先日発表されたAndroid 2.2、通称「Froyo」ではアプリケーションをSDカードにも
インストールできるようになりました。
このおかげでAndroid端末の内蔵メモリの容量を気にせずに、
好きなだけアプリをインストールできるわけです!
というわけで早速どのように実現するのか実際に試してみました。
まずはFroyo上で自作アプリをインストールし、アプリケーション情報を見てみます。
「SDカードに移動」というボタンがありますが、押せないようになっています。
これを押せるようにしてみます。
SDカードへの移動を許可するにはManifest.xmlを編集します。
コードは以下のようになります。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.example.graphics" android:versionCode="1" android:installLocation="preferExternal" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidGraphics" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
ポイントは
android:installLocation="preferExternal"
という一行です。
android:installLocationでインストール先の指定ができます。
選択できる値としては以下のようなものがあります。
- internalOnly : 内蔵メモリへのインストールのみ許可します。
- auto : 内蔵メモリ優先でインストールします。しかし内蔵メモリの容量が一杯だった場合はSDカードへ保存されます。
- preferExternal : SDカードを優先してインストールしますが、SDカードの容量が一杯だった場合は内蔵メモリへインストールされます。
今回のサンプルでは「preferExternal」を選択しているので、
SDカードにインストールされるはずです。
ではこのサンプルをエミュレータ上にインストールしてみます。
先ほどのボタンが押せるようになってます。
また、表示が「携帯端末に移動」になってますので、
このアプリがSDカードにインストールされていることがわかります。
このような手順でアプリのインストール先を制御することができますが、
サービスやインプットメソッドエンジンなど、システムに常駐するようなアプリを
SDカードにインストールしてしまうと、SDカードが利用できないシチュエーション
(物理的に外されてるorSDカードがアンマウント状態)では使えなくなってしまいます。
アプリケーションの種類によってandroid:installLocationの指定を考えるようにして下さい。