2011/07/26

アプリのSD移動について

Android2.2(API8-)で対応したアプリのSD移動について、

ビルドSDKを8以上にしAndroidManifest.xmlにinstallLocation="internalOnly"を明示しない限り、目の付け所が違う某メーカーの端末にのみ存在する「優先インストール先」設定で「microSD」を指定された場合、アプリをSDに移動できてしまう。端末側の設定に依存してSDカードへのインストールを許す場合がある。


SD移動すべきでないアプリ(ホームウィジェットやサービスを利用するアプリ)はinstallLocation="internalOnly"を明示すべきである。


ちなみにAndroid3.0にはアプリのSD移動機能がありません。
(おそらくmicroSDのサポート自体が3.0リリース当初は無かったための措置)

3.1以降は出来る。。。?
(3.1は未確認ですが、3.2には「SDへ移動」の項目が存在します)


以下、どうでもいい検証
targetAPI=7, installLocation記述なしアプリについて、

1.優先がmicroSDの時にインストールした場合
PackageManagerから取得できるinstallLocationの値は「移動可能」

2.優先がシステム判断の時にインストールした場合
PackageManagerから取得できるinstallLocationの値は「移動不可能」

3.優先がシステム判断の時にインストール >> インストール後に優先をmicroSDに変更
PackageManagerから取得できるinstallLocationの値は「移動不可能」だが
Androidの設定からはアプリをSDに移動できる


ちなみにinstallLocationの値自体はAPI8ではPackageManagerから取得できるPackageInfo、API9-ではApplicationInfoから取得できます。リフレクションで。


優先インストール先の設定はコマンドラインから
pm setInstallLocation -(数字)
で可能です。

The setInstallLocation command changes the default install location
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

だそうな。

adb shell pm setInstallLocation 2
で通ると優先インストール先がmicroSDになりinstallLocationを指定していないアプリはSDへ移動可能に。