• Android Studio avd虚拟机存储位置更改 Android Studio默认的虚拟机存储位置是在C盘 如:C:\Users\Administrator\.android 下图为.android文件夹中内容 为了修改存储位置,需要在windows系统的环境变量中新建...

    Android Studio avd虚拟机存储位置更改

    Android Studio默认的虚拟机存储位置是在C盘
    如:C:\Users\Administrator\.android
    下图为.android文件夹中内容
    .android文件夹中内容

    为了修改存储位置,需要在windows系统的环境变量中新建一个系统变量,名称为ANDROID_SDK_HOME,值为新位置,如 F:\LocalData\AndroidStudioCache
    注意:该值为.android文件夹的上一级目录

    之后把原来的.android文件夹剪切过去即可

    最终效果

    这里写图片描述

    展开全文
  • 如想自己更改AVD的位置只需要做如下三步操作即可。 (1)到AVD的默认文件夹下将“.android”剪切到你想放的盘片,比如“D:\Android\AVDs”目录下。 (2)然后在系统环境变量里设置一个ANDROID_SDK_HOME,将

    1、从Android下载的软件后。由于Eclipse默认的虚拟机保存目录为C盘。会影响系统。。创建未创建虚拟机之前就配置好相应的数据。以免保存在你系统盘的容量:

    (1)然后在系统环境变量里设置一个ANDROID_SDK_HOME,将“D:\Android\AVDs”复制到该变量下。

    (2)找开Eclipse新建虚拟机,看是否有引用。。


    以下为已创建有虚拟机的情况(转载。)。。

    2、学习过android的都知道,android 虚拟机的保存目录默认的是C:\Documents and Settings\用户名\.android。如想自己更改AVD的位置只需要做如下三步操作即可。

    (1)到AVD的默认文件夹下将“.android”剪切到你想放的盘片,比如“D:\Android\AVDs”目录下。

    (2)然后在系统环境变量里设置一个ANDROID_SDK_HOME,将“D:\Android\AVDs”复制到该变量下。

    (3)修改D:\Android\AVDs\.android\avd目录下的配置文件中的path项目。

    例如“Android2.2.ini”修改其中的path

    path=D:\Android\AVDs\.android\avd\Android2.2.avd

    即可。

      注意,在修改时,要使eclipse和AVD关闭。

    然后启动eclipse 进入android virtual devices manager 可以看到路径已经变化了。

    展开全文
  • .android这个文件夹是AndroidStudio 工具生成的模拟机存放的地方 (点击去里面有avd的文件夹,在点进去里面就是模拟机了,这里是删除模拟机的地方) .AndroidStudio配置、插件缓存文件夹 .gradle这其中存储的是本地...

    今天无意点开我的电脑 看到了如下

    额,这个怎么能也太夸张了,整理一波把

    一般移动呢,如下

     

    .android 这个文件夹是AndroidStudio 工具生成的模拟机存放的地方

    (点击去里面有avd的文件夹,在点进去里面就是模拟机了,这里是删除模拟机的地方)

    .AndroidStudio 配置、插件缓存文件夹

    .gradle 这其中存储的是本地的gradle全局配置文件  这个如果没有的话as 是不能运行的

    裁切下,然后贴到要存放的目录,,(粘贴的时候需要注意studio需要关闭,)

     

    粘贴过去之后 就是修改了

    1 .AndroidStudio文件夹的修改

    这个需要到androidstudio  安装目录中的 Bin 文件夹。 
    打开文件:idea.properties ,找到idea.config.path和idea.config.path

    打开 如果在系统盘里面路径为$(user.home)

    把# 去掉

    比如我的

    这样就可以了

    2 然后在修改下.gradle

    这个时候打开studio 提示,点击设置 

    点击setting

    点击gradle

    点击修改新存放的路径就行了

    这样就可以了

    3 修改.android 模拟机的路径,

    到存放的目录点击.android 在点击.avd 然后看到如下

    这里面就是模拟机取得的名字,下面2个是配置文件打开修改路径为存放的路径

    然后在配置下环境变量 

    这个存放地址我存放到classpath里面了,我看别人都是新建一个文件夹。

     

     

     

     

     

     

     

    展开全文
  • 更改android 数据库存放位置
        //初始化数据库
        public static void initDB() {
            boolean premission = PermissionUtils.isPremission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (!premission) return;
            File file = CreatFileUtil.getRootFile(getApplication());
            FileDatabaseContext mSdDatabaseContext = new FileDatabaseContext(context, file, true);
            FlowManager.init(mSdDatabaseContext);
        }
    
        //重新加载数据库
        public static void deleteDB() {
            File file = CreatFileUtil.getRootFile(getApplication());
            file.delete();
            FlowManager.destroy();// 释放引用,才能重新创建表
            initDB();
        }
    package com.jtv.operation.dao;
    
    import android.content.Context;
    import android.content.ContextWrapper;
    import android.database.DatabaseErrorHandler;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.text.TextUtils;
    
    import com.raizlabs.android.dbflow.config.FlowLog;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    
    /**
     * 支持数据库任意地址
     * <p>
     * 支持使用打包的数据库res/raw/initdb.db
     *
     * @author 更生
     * @version 2017年3月2日
     */
    public class FileDatabaseContext extends ContextWrapper {
        private File file;
        private boolean isUseDefaultDB;
        private Context context;
    
        /**
         * @param base           上下文
         * @param file           文件存储目录
         * @param isUseDefaultDB 是否使用raw/initdb.db文件
         */
        public FileDatabaseContext(Context base, File file, boolean isUseDefaultDB) {
            super(base);
            this.file = file;
            this.context = base;
            this.isUseDefaultDB = isUseDefaultDB;
        }
    
        @Override
        public Context getApplicationContext() {
            return this;
        }
    
        @Override
        public File getDatabasePath(String name) {
            //携带数据库
            if (isUseDefaultDB) {
                File tempFile = file;
    
                if (tempFile == null)
                    tempFile = context.getDatabasePath(name).getParentFile();
                createInitDatabase(tempFile, name, context);
            }
    
            if (file == null)
                return context.getDatabasePath(name);
    
            // 判断目录是否存在,不存在则创建该目录
            if (!file.exists())
                file.mkdirs();
    
            File addressFile = new File(file, name);
            if (addressFile == null)
                addressFile = context.getDatabasePath(name);
            return addressFile;
        }
    
        public boolean createInitDatabase(File toFile, String name, Context context) {
            String path = toFile.getAbsolutePath();
            if (TextUtils.isEmpty(path))
                return false;
    
            // 判断数据文件是否存在,不存在的话使用打包的数据文件
            String toFileName = path + File.separator + name;
    
            File f = new File(toFileName);
            if (f == null || f.exists())
                return false;
    
            File dir = new File(path);
            if (dir == null) return false;
            if (!dir.exists())
                dir.mkdirs();
            InputStream is = null;
            FileOutputStream fos = null;
            try {
                is = context.getResources().openRawResource(context.getResources().getIdentifier("initdb", "raw", context.getPackageName()));
                // 创建输出流
                fos = new FileOutputStream(toFileName);
                // 将数据输出
                byte[] buffer = new byte[8192];
                int count = 0;
                while ((count = is.read(buffer)) > 0) {
                    fos.write(buffer, 0, count);
                }
                buffer = null;
            } catch (Exception ee) {
                FlowLog.log(FlowLog.Level.I, ee.toString());
            } finally {
                try {
                    fos.close();
                } catch (Exception ee) {
                }
                try {
                    is.close();
                } catch (Exception ee) {
                }
            }
            return true;
        }
    
        //重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
        @Override
        public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
            SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
            return result;
        }
    
        //Android 4.0会调用此方法获取数据库。
        @Override
        public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
                                                   DatabaseErrorHandler errorHandler) {
            SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
            return result;
        }
    }


    
    
    展开全文
  • Android模拟位置实现

    2017-01-23 16:21:12
    Android上有很多位置欺骗软件,当你打开微信搜索附近的,可以通过这类软件把你位置定位到指定位置。 今天,我们就使用Android自带的模拟位置功能来实现。 准备工作: 1:设置-开发者选项-允许模拟位置 打钩   2:...

    手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位。

    目前比较稳定的思路就是使用hook,用它对app_process进行注入,找到定位的方法,然后进行修改,但此方法需要root权限。参考:http://www.jianshu.com/p/91e312faa6c3

    我这里本方法是利用手机自带的"模拟位置"功能实现运行时修改LocationManager结果,原理:使用android自带的调试api,模拟gps provider的结果。

    LocationManager.setTestProviderLocation(Provider, Location);

    不稳定,特征明显,容易按特征嗅探到(有反作弊机制的游戏基本都能查出来),需要打开开发者的允许模拟位置选项。


    准备工作:

    1:设置-开发者选项-允许模拟位置 打钩

     

    2:我这里使用了百度地图,所以需要去申请一个地图的key。传送门申请key

    3:定位方式修改成 仅限GPS

      

    4:不是所有软件的GPS都能被欺骗,比如QQ就不行,可能是QQ的定位方式经过处理,旧版本微信测试成功。


    上代码

    1:界面

    Demo很简单,就一个界面,界面上一个百度地图,用来选择位置,一个确认按钮Button,一个显示位置文字的TextView

    布局文件activity_main.xml如下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/bt_Ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确定" />
    
        <TextView
            android:id="@+id/tv_location"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <com.baidu.mapapi.map.MapView
                android:id="@+id/bmapView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true" />
        </RelativeLayout>
    
    </LinearLayout>


    2:代码

    需要的接口:

    LocationListener 模拟GPS接口
    BDLocationListener 百度定位接口
    OnMapClickListener 地图点击接口
    OnMarkerDragListener 地图上拖动接口
    OnGetGeoCoderResultListener 反地理信息搜索接口


    变量定义:

        private String mMockProviderName = LocationManager.GPS_PROVIDER;;
        private Button bt_Ok;
        private LocationManager locationManager;
        private double latitude = 31.3029742, longitude = 120.6097126;// 默认常州
        private Thread thread;// 需要一个线程一直刷新
        private Boolean RUN = true;
        private TextView tv_location;
    
        boolean isFirstLoc = true;// 是否首次定位
        // 定位相关
        private LocationClient mLocClient;
        private LocationMode mCurrentMode;// 定位模式
        private BitmapDescriptor mCurrentMarker;// 定位图标
        private MapView mMapView;
        private BaiduMap mBaiduMap;
    
        // 初始化全局 bitmap 信息,不用时及时 recycle
        private BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
        private Marker mMarker;
        private LatLng curLatlng;
        private GeoCoder mSearch;


    关键代码:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iniView();
            iniListner();
            iniData();
        }
    
        /**
         * iniView 界面初始化
         * 
         */
        private void iniView() {
            bt_Ok = (Button) findViewById(R.id.bt_Ok);
            tv_location = (TextView) findViewById(R.id.tv_location);
            // 地图初始化
            mMapView = (MapView) findViewById(R.id.bmapView);
            mBaiduMap = mMapView.getMap();
            // 开启定位图层
            mBaiduMap.setMyLocationEnabled(true);
            // 定位初始化
            mLocClient = new LocationClient(this);
        }
    
        /**
         * iniListner 接口初始化
         * 
         */
        private void iniListner() {
            bt_Ok.setOnClickListener(this);
            mLocClient.registerLocationListener(this);
            mBaiduMap.setOnMapClickListener(this);
            mBaiduMap.setOnMarkerDragListener(this);
    
            // 初始化搜索模块,注册事件监听
            mSearch = GeoCoder.newInstance();
            mSearch.setOnGetGeoCodeResultListener(this);
        }
    
        /**
         * iniData 数据初始化
         * 
         */
        private void iniData() {
            inilocation();
            iniMap();
        }
    
        /**
         * iniMap 初始化地图
         * 
         */
        private void iniMap() {
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);// 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setScanSpan(1000);
            mCurrentMode = LocationMode.NORMAL;
            // 缩放
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(14.0f);
            mBaiduMap.setMapStatus(msu);
    
            mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true,
                    mCurrentMarker));
            mLocClient.setLocOption(option);
            mLocClient.start();
            initOverlay();
    
            // 开启线程,一直修改GPS坐标
            thread = new Thread(new Runnable() {
    
                @Override
                public void run() {
                    while (RUN) {
                        try {
                            Thread.sleep(500);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        setLocation(longitude, latitude);
                    }
                }
            });
            thread.start();
        }
    
        /**
         * initOverlay 设置覆盖物,这里就是地图上那个点
         * 
         */
        private void initOverlay() {
            LatLng ll = new LatLng(latitude, longitude);
            OverlayOptions oo = new MarkerOptions().position(ll).icon(bd).zIndex(9).draggable(true);
            mMarker = (Marker) (mBaiduMap.addOverlay(oo));
        }
    
        /**
         * inilocation 初始化 位置模拟
         * 
         */
        private void inilocation() {
            locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            locationManager.addTestProvider(mMockProviderName, false, true, false, false, true, true,
                    true, 0, 5);
            locationManager.setTestProviderEnabled(mMockProviderName, true);
            locationManager.requestLocationUpdates(mMockProviderName, 0, 0, this);
        }
    
        /**
         * setLocation 设置GPS的位置
         * 
         */
        private void setLocation(double longitude, double latitude) {
            Location location = new Location(mMockProviderName);
            location.setTime(System.currentTimeMillis());
            location.setLatitude(latitude);
            location.setLongitude(longitude);
            location.setAltitude(2.0f);
            location.setAccuracy(3.0f);
            locationManager.setTestProviderLocation(mMockProviderName, location);
        }
    
        @Override
        public void onLocationChanged(Location location) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            Log.i("gps", String.format("location: x=%s y=%s", lat, lng));
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        protected void onPause() {
            mMapView.onPause();
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            mMapView.onResume();
            super.onResume();
        }
    
        @Override
        public void onBackPressed() {
            thisFinish();
        }
    
        @Override
        protected void onDestroy() {
            RUN = false;
            thread = null;
    
            // 退出时销毁定位
            mLocClient.stop();
            // 关闭定位图层
            mBaiduMap.setMyLocationEnabled(false);
            mMapView.onDestroy();
            mMapView = null;
            bd.recycle();
            super.onDestroy();
        }
    
        private void thisFinish() {
            AlertDialog.Builder build = new AlertDialog.Builder(this);
            build.setTitle("提示");
            build.setMessage("退出后,将不再提供定位服务,继续退出吗?");
            build.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            build.setNeutralButton("最小化", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    moveTaskToBack(true);
                }
            });
            build.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            build.show();
        }
    
        @Override
        public void onClick(View v) {
            int id = v.getId();
            switch (id) {
            case R.id.bt_Ok:
                latitude = curLatlng.latitude;
                longitude = curLatlng.longitude;
                break;
            }
        }
    
        /**
         * 定位SDK监听函数
         */
        @Override
        public void onReceiveLocation(BDLocation location) {
            // map view 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
    
            if (isFirstLoc) {
                isFirstLoc = false;
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                setCurrentMapLatLng(ll);
            }
        }
    
        @Override
        public void onMapClick(LatLng arg0) {
            setCurrentMapLatLng(arg0);
        }
    
        @Override
        public boolean onMapPoiClick(MapPoi arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    
        /**
         * setCurrentMapLatLng 设置当前坐标
         */
        private void setCurrentMapLatLng(LatLng arg0) {
            curLatlng = arg0;
            mMarker.setPosition(arg0);
    
            // 设置地图中心点为这是位置
            LatLng ll = new LatLng(arg0.latitude, arg0.longitude);
            MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
            mBaiduMap.animateMapStatus(u);
    
            // 根据经纬度坐标 找到实地信息,会在接口onGetReverseGeoCodeResult中呈现结果
            mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(arg0));
        }
    
        /**
         * onMarkerDrag 地图上标记拖动结束
         */
        @Override
        public void onMarkerDrag(Marker arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onMarkerDragEnd 地图上标记拖动结束
         */
        @Override
        public void onMarkerDragEnd(Marker marker) {
            setCurrentMapLatLng(marker.getPosition());
        }
    
        /**
         * onMarkerDragStart 地图上标记拖动开始
         */
        @Override
        public void onMarkerDragStart(Marker arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onGetGeoCodeResult 搜索(根据实地信息-->经纬坐标)
         */
        @Override
        public void onGetGeoCodeResult(GeoCodeResult arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onGetReverseGeoCodeResult 搜索(根据坐标-->实地信息)
         */
        @Override
        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
            if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show();
                return;
            }
    
            tv_location.setText(String.format("伪造位置:%s", result.getAddress()));
        }

    到底,就结束了,现在运行我们的程序,然后选择一个地点,然后点击确认

    接着,打开微信,打开附近的人,查看结果,如果没有修改定位,多尝试几次打开附近,如果还不行,那就参考 准备工作 是否做好



    程序github地址:https://github.com/Aslanchen/SimulateGps



    展开全文
  • (比如:c:/user/xiaohong/)其他软件在安装中要创建缓存文件夹,那么也会在这个目录创建,比如Notepad++等这三个文件夹的作用:.android 这个文件夹是Android SDK生成的AVD(Android Virtual Device Manager)即...
  • 只需要在环境变量中配置ANDROID_SDK_HOME为你想要存放模拟器的位置即可
  • 修改Android Studio缓存目录,主要是修改.AndroidStudio文件夹和m2文件夹所在目录。.AndroidStudio主要用于保存AS的配置以及插件。默认情况下,.AndroidStudio 默认的目录位于C盘系统用户文件夹下: 1560927672266 ...
  • Virtual Xponse(一个 类似于 android 虚拟机的东西, 可以将 android 软件 安装到里面, 或者也可以使用一些 xponse插件, ) 修改gps定位的软件。 你需要打卡的软件 将 修改 gps的软件, 与需要打卡的软件都安装在 ...
  • 在D盘下建立Android_sdk_home文件夹,在其下建立.android子文件夹(注意前面有个点,如果系统提示请输入文件名,则将原路径下的文件夹拷贝过来即可),再在.android下建立avd文件夹,即建立了D:\Android_sdk_home\....
  • 1.androidstudio安装好后自动生成如下图的配置文件夹: .android 这个文件夹是Android SDK生成的AVD(Android Virtual Device Manager)即模拟器存放路径 .AndroidStudio 这个文件夹是Android Studio的配置文件夹...
  • 1.创建ANDROID_SDK_HOME环境变量,如ANDROID_SDK_HOME=D:\eclipse_android\android-sdk 2.在ANDROID_SDK_HOME目录下,建立.android目录 3.默认的avd路径是C:\Users\Administrator\.android, 将里面的内容放入到...
  • 可以使用setGravity(int, int, int)方法来调整Toast窗口的位置. toast.setGravity(Gravity.TOP|Gravity.LEFT, xfft, yfft); xfft表示横向的位移,负数向左,正数向右 yfft表示纵向的位移,负数向上,整数向下...
  • android studioUI控件位置

    2019-03-30 17:23:03
    android studioUI控件位置全在左上角,该怎么解决 ``` <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=...
  • Android Studio修改模拟器 AVD 默认安装路径的方法1,设置系统环境变量:2,可能你再次打开Android Studio时发现,这默认位置更改**但没事可能是显示错误,直接下载,然后看你添进去的环境变量更改的地址有没有下...
  • Android studio中SDK,AVD的默认路径的更改 对于大部分首次下载android studio开发android的人来说, 由于Android Studio的自动更新,将会默认把SDK,AVD下载到我们的C盘,造成大量内存的占用,那么如何更改SDK,AVD...
  • 使用 Android 的 SDK 时,可能有很多人纳闷如何修改 AVD 的位置,那么经过摸索和 Google 之,也经过实验,终于知道如何更改 AVD 的位置了,那么请看。 第一种方法,适合还没有建立 AVD 的情况 即:在计算机右击的...
  • 参考:http://blog.csdn.net/qiujuer/article/details/44160127 ...http://www.jianshu.com/p/7a58c5f154c5Android Studio的缓存文件默认安装的AndroidStudio会在C:\Users\You
  • Android系统修改导航栏显示位置,默认在下方,改到左边。 --- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/frameworks/base/policy/src/...
1 2 3 4 5 ... 20
收藏数 153,204
精华内容 61,281