アプリをSDカードにインストールできるようにする


先日発表された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の指定を考えるようにして下さい。

3 Comments