ビルドSDKを8以上にしAndroidManifest.xmlにinstallLocation="internalOnly"を明示しない限り、
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へ移動可能に。