Friday, May 21, 2010

如何讓應用程式直接安裝到SD卡執行(2.2)

Android 2.2 中新增了應用程式直接安裝到SD卡執行 (不少人稱這個功能作 App2SD),
要使用這個功能只要在目前程式中做幾個設定:

1. 專案的 Project Build Target 版本設定為 2.2 (API 8)
2. 修改 AndroidManifest 清單

設定 Project Build Target 版本

在 Eclipse 專案列表中按右鍵,選取 properties 選項,會彈出設定視窗。
在上面選擇左側的 Android 標籤,在右側 Build 欄位勾選「Android 2.2」選項(沒有這選項的請參考 管理SDK 來升級SDK),如此一來編譯時才能認得我們接下來在 AndroidManifest 清單中所做的設定。

修改 AndroidManifest 清單

在 manifest 標籤中加入一個「android:installLocation」屬性,實際程式碼如下

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
package="com.demo.org"
android:versionName="1.0" android:versionCode="1"
android:installLocation="preferExternal"
>
....

說明

android:installLocation="preferExternal"

清單中加入以上宣告後,編譯好的程式仍然可以適用於較低版本的機器,只有在程式安裝到 Android 2.2 版之後的系統上,系統才會自動將這個程式安裝到 SD 卡中。

安裝到SD卡中時程式會預作一次加密,讓只有安裝本程式的機器能存取這個程式,避免了程式可能會輕易被盜拷的疑慮。

沒有用到 Service、桌面小工具(Widget)、或動態桌布(Live Wallpaper)功能的程式比較適合儲存到SD卡,例如遊戲或 BMI 等小程式。

因為當機器使用 USB 和電腦連線,將SD卡掛載成磁碟機時,這些儲存在SD卡中執行的程式將會被中斷。

其他提示請參考 Android 官方文件

9 意見:

東港漁郎 said...

Hi! Gasolin, 您好, 小弟依照您文章中所述, 在 AndroidManifest.xml 中加入了 android:installLocation="preferExternal" , 但在 Eclipse 中編譯後會出現 Warnings: Attribute minSdkVersion (3) is lower than the project target API level (8) ... 原以為是加了 minSdkVersion=3 的因素, 但將 minSdkVersion=3 刪除後, 卻無法上載 Android Market (會出現說要設定 minSdkVersion 的錯誤), 又有個使用者發 email 回應說在 "移至SD卡的按鈕是呈現不能按的暗灰色", 他的手機是 HTC Desire (Android 2.2), 請問小弟的程式有哪需要修正的 ? 感謝您的解惑 ...

gasolin said...

東港漁郎 , 把android:installLocation="preferExternal"移掉就不會出現這訊息嗎?

東港漁郎 said...

您好, 原先不會有該 Warnings, 主要應該是.. 如要使用 preferExternal 參數, 必須將 SDK 指定為 2.2 所致, 由於小弟希望該程式能相容於 SDK 1.5 以上, 所以, 沒將 minSdkVersion 改為 8 , 也就不知 Android Market 是否一定要給 minSdkVersion 參數才能上載了... PS. 指定 targetSdkVersion 也一樣會有該 Warnings.. 謝謝您的回應 ^_^

東港漁郎 said...

難不成在 Android Market 上還要勾選 Application can be copied from the device , 使用者才能使用 App2SD ?

gasolin said...

你的擔心是多餘的, 編譯時 target 得用 API 8(2.2)編譯, minSdkVersion設為3, 這樣就可以相容1.5以上啦

東港漁郎 said...

是的, 小弟是將 Target API 指為 API 8(2.2), 並在 AndroidManifest.xml 加入了 android:installLocation="preferExternal", 以及 minSdkVersion=3 後, 順利編譯並上載到 Android Market (已過了1星期了,且上網搜文很多人都說別理那個 Warning). 只是今日有個使用者發 email 回應說在他的 HTC Desire (Android 2.2) 中 Android Market 的 "移至SD卡的按鈕是呈現不能按的暗灰色". 問小弟是我程式的問題, 還是有別的方式將程式安裝到 SD card? 或者是他手機的個案? 因此, 才順帶有此一問, 想確認一下有沒解法. 那個 App2SD 的問題, 難不成他一安裝就已裝在 SD card ? 所以, 他的"移至SD卡的按鈕" 才會變成暗灰色 @_@... 打擾了...

gasolin said...

設成 preferExternal 當然預設是裝在 SD 卡上....

東港漁郎 said...

哈哈~~ 收到! 謝啦~~ ^__^

東港漁郎 said...

Hello~ 我想我找到問題所在了... Google 的開發者說明中有這麼一段: if the application uses the forward-locking mechanism (not supported on external storage), 也就是說不能將 Android Market 上架的程式設定為 Copy Protect (複製保護)... 而該程式就是有勾選 Copy Protect .. >_< ... 參考參考 ...