Google默认的PackageManager,会读取应用AndroidManifest.xml的对应定义installLocation:
规则如下:
1.如果没有定义安装位置,表示安装在手机内存上;
2. android:installLocation = "auto",先查看手机内存是否足够,如果够就安装在手机内存上,不够就安装在T 卡上;
3. android:installLocation = "internalOnly",表示安装在手机内存上;
4. android:installLocation = "preferExternal" ,表示安装在 T 卡上;
如何在设置中增加“选取应用安装位置”的功能,让用户选择默认的安装位置?
修改如下文件:
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
做以下修改:
loadSetting(stmt, Global.SET_INSTALL_LOCATION, 0);
改为:
loadSetting(stmt, Secure.SET_INSTALL_LOCATION, 1);
loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 0);
改为:
loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 1);
这样修改之后,在设置>应用中会出现“选取应用安装位置”的功能,不过无论在这里选择什么,对于应用中AndroidManifest.xml文件中声明
android:installLocation = "internalOnly"
的,该apk 都会安装到手机上,这样做的好处是避免程序运行错误,因为定义android:installLocation = "internalOnly" 的 apk 一般要安装到手机内存上才能正常运行。