本文譯自:http://developer.android.com/guide/topics/data/install-location.html
從API Level 8開始,你可以允許你的應用程式被安裝在外部儲存空間上(如裝置的SD卡)。這是一個可選的功能,你可以用android:installLocation清單屬性來聲明。如果你沒有聲明這個屬性,你的應用程式只會被安裝在內部儲存空間上,並且它不可以被轉移到外部儲存空間。
要允許系統把你的應用程式安裝在外部儲存空間上,就要在資訊清單檔的<manifest>元素中包含android:installLocation屬性,並把該屬性值設定為“preferExternal”或“auto”。例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >
如果你聲明的屬性值是“preferExternal”,就會要求你的應用程式被安裝在外部儲存空間上,但是系統不會保證你的應用程式一定會被安裝在外部儲存空間上。如果外部儲存空間已滿,那麼系統會把它安裝在內部儲存空間上。使用者也可以在這兩個位置之間移動你的應用程式。
如果你聲明的屬性值是“auto”,就說明你的應用程式可以被安裝在外部儲存空間上,但你沒有安裝位置的偏好。系統會基於幾個要素來決定你的應用程式安裝到那兒。使用者也可以在這兩個位置之間來移動你的應用程式。
當你的應用程式被安裝在外部儲存空間時:
當你的應用程式被安裝在外部儲存空間上時:
1. 掛載在裝置上的外部儲存空間不會影響應用程式的效能。
2. .apk檔案被儲存在外部儲存空間上,但是所有私人的使用者資料、資料庫、被最佳化的.dex檔案以及提取的原生代碼都會儲存在內部的裝置儲存空間中。
3. 在你的應用程式的唯一的容器中儲存著一個隨機產生的密鑰,它只可以在初始安裝它的裝置上被解密。這樣安裝在SD卡上的應用程式就只能在一個裝置上工作了。
4. 通過系統設定,使用者可以把你的應用程式移動到內部儲存空間上。
警告:當使用者啟用USB儲存空間來跟電腦共用檔案或通過系統設定卸載SD卡時,外部儲存空間會從裝置上被卸載,並且所有的正在啟動並執行外部儲存空間上的應用程式都會被立即殺死。
向後相容
把你的應用程式安裝在外部儲存空間上能力,只有在運行API Level 8(Android2.2)以上版本的裝置上才有效。既存的建立與API Level 8之前應用程式會始終安裝在內部儲存空間上,並且不能被轉移到外部儲存空間上(即使是在API Level 8的裝置上)。
但是,如果你的應用程式被設計成要支援API Level 8以前的版本,你可以選擇讓這些功能支援API Level 8以上的版本,並且依然相容API Level 8以前的版本。
以下是允許應用程式安裝在外部儲存空間上,同時保持跟API Level 8以前版本相容的方法:
1. 在<manifest>元素中包含帶有“auto”或“preferExternal”值的android:installLocation屬性。
2. 保留android:minSdkVersion屬性,確保該屬性值是你的應用程式要相容的那個API等級。
3. 為了編譯你的應用程式,把你的編譯目標改變到API Level 8。這是必須的,因為較舊的Android類庫不理解android:installLocation屬性,所以在這個屬性存在的時候不會編譯你的應用程式。
當你的應用程式被安裝在API Level 8以前版本的裝置上時,android:installLocation屬性會被忽略,並且該應用程式會被安裝在內部儲存空間上。
注意:儘管像這樣的XML標記會被較舊的平台所忽略,但是你要注意在minSdkVersion屬性值比8小時,不要使用在API Level 8以前引入的編程API,除非你要執行一些必要的工作,以便讓代碼提供向後相容性。