應用的安裝能夠在AndroidManifest.xml 中設定 android
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:installLocation="auto"
android:versionName="1.0">
android:installLocation的值有三個 internalOnly ,auto,preferExternal,缺省值爲internalOnly
internalOnly表示該應用程序只能安裝到手機內部存儲中。
auto表示由系統決定該應用程序安裝到手機內部存儲中仍是SD卡中。 若是有SD卡且應用程序大於5M的話,安裝到SD卡中,不然安排到手機內部存儲中
preferExternal表示若是有SD卡就把該應用程序只能安裝到SD卡中,不然安裝到手機內部存儲中。
android:installLocation爲internalOnly時,用戶在"Setting"->"Application"->"Manage applications"中不能把應用程序在SD卡與內存中相互移動
android:installLocation爲auto或preferExternal時,用戶在"Setting"->"Application"->"Manage applications"中能夠把應用程序在SD卡與內存中相互移動
另外,adb shell 中可使用 pm setInstallLocation 2 命令中強行更改安裝位置。2表明的是強制安裝在SD卡中,0表明自動,1表明強制裝到手機內部存儲中。
在代碼中,對於高於Android 2.2的手機中,能夠經過ApplicationInfo.FLAG_EXTERNAL_STORAGE 標記能夠判斷應用是否安裝在Sdcard上,對於低於Android 2.2的手機能夠經過ApplicationInfo的sourceDir屬性爲/sdcard/開頭來肯定APK安裝的位置。
示例1
PackageManager pm=ctx.getPackageManager();
ApplicationInfo appInfo=pm.getApplicationInfo(pkgName,0);
if((appInfo.flags &ApplicationInfo.FLAG_EXTERNAL_STORAGE)!=0){
// App on sdcard
System.out.println(pkgName+" install on sdcard");