アプリのインストール先を指定する方法


アプリのインストール先を指定する方法

Fireデバイスにおけるアプリのインストール先は、Androidマニフェストファイルの設定で決まります。インストール先に指定できるストレージは以下のとおりです。

  • 外部ストレージ(SDカードなど)
  • 内部ストレージ(デバイスのメモリを使用)

Fire TV Stickは外部ストレージ非対応ですが、Fire TV(第1世代と第2世代のみ)ではメモリカードスロットを介して外部ストレージを利用することができます。

一般的に、アプリのインストール先にはデフォルトとして外部ストレージを指定します。

ベストプラクティス

ベストプラクティスとして、ほとんどのアプリではAndroidマニフェストファイルのinstallLocationpreferExternalを指定することが推奨されます。指定しない場合、アプリは内部ストレージにインストールされます。

内部ストレージの容量を消費してしまうと、以下のような問題につながる恐れがあります。

  • インストール回数の低下
  • 評価の低下
  • ユーザーエクスペリエンスの低下

ユーザーの外部ストレージに十分な容量があったとしても、アプリのマニフェストでpreferExternalを指定しない限り、アプリは内部ストレージにインストールされてしまいます。ストレージ不足の警告が表示されたり、インストールができない結果になれば、ユーザーの不満を招くことになりかねません。

preferExternalを指定すれば、アプリのユーザーベースを最大限に拡大し、Fireデバイスのユーザーエクスペリエンスを向上させる効果が期待できます。

外部ストレージを指定する方法

アプリのAndroidManifest.xml<manifest>タグ内にinstallLocation属性を追加し、値をpreferExternalに設定します。以下の例を参照してください。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal" ... >
    ...
</manifest>

installLocationパラメーターには、以下の値を使用できます。

installLocationの値 説明
preferExternal ほとんどのアプリで推奨される値です。利用できる場合は外部ストレージがアプリのインストール先になります。外部ストレージに空き容量がない場合は、内部ストレージがインストール先になります(空き容量がある場合)。インストールしたアプリは、後から手動で移動可能です。その際は、[設定] > [アプリケーション] > [インストール済アプリケーションを管理] で該当するアプリを選択してください。
internalOnly アプリのインストール先を内部ストレージに限定する値です。内部ストレージに十分な空き容量がない場合、インストールはできません。インストールしたアプリを後から手動で移動させることもできません。ほとんどのアプリでは推奨されない値です。次のセクションで説明するアプリの種類に対してのみ、このオプションを選択するようにしてください。
auto デフォルトで内部ストレージをインストール先に指定する値です。ただし、内部ストレージに空き容量がない場合は、外部ストレージがインストール先になります(外部ストレージが利用可能な場合)。インストールしたアプリは、後から手動で移動可能です。その際は、[設定] > [アプリケーション] > [インストール済アプリケーションを管理] で該当するアプリを選択してください。

なお、APKファイルが外部ストレージにインストールされた場合でも、データベース・非公開のユーザーデータ・最適化済み.dexファイル・抽出済みネイティブコードはすべて、内部ストレージに保存されます。

詳細については、AndroidドキュメントのApp install location(英語のみ)を参照してください。

インストール先を内部ストレージにすべき場合

ほとんどのアプリでは、installLocationpreferExternalを指定することが推奨されています。ただし、DRM保護されたメディアアプリは例外です。

  • アプリでDRM保護されたメディアを再生する際に、USBストレージが使用できないと、DRMリソースが不安定になる恐れがあります。
  • アプリでDRM保護されたメディアを再生する場合は、installLocation自体を追加しない、またはパラメーターの値をinternalOnlyに設定してください。

DRM保護されたメディアアプリに加えて、以下の種類のアプリも絶対に外部ストレージにインストールしないでください。

  • サービス
  • アラームサービス
  • インプットメソッドエンジン
  • アカウントマネージャー
  • 同期アダプター
  • デバイスアドミニストレーター
  • 「ブート完了」メッセージをリッスンするブロードキャストレシーバー
  • ライブ壁紙(Fire OSではサポートされていません)
  • アプリウィジェット(Fire OSではサポートされていません)

詳細については、AndroidドキュメントのApp install location(英語のみ)を参照してください。

Fire TVの外部ストレージ設定

Fire TV(第1世代)はUSB外部ストレージに対応していて、Fire TV(第2世代)は外部ストレージ用のmicroSDスロットを搭載しています。また、これらのデバイスには接続済み外部ストレージを管理するための設定が用意されています。

内部ストレージに保存されたアプリをSDカードに移動させることも可能です。

アプリにおけるセカンダリダウンロードの処理

初めての実行時でも別のタイミングでも、自らセカンダリダウンロードを実行するアプリの場合、一般的にダウンロードされたファイルはAPKファイルのインストール先と同じ場所に保存されます。アプリのインストール先が外部ストレージの場合、APKファイルは外部ストレージに存在することになります。

アプリによっては(特にゲームアプリの場合)、追加のテクスチャやレベルなどのアセットファイルを含むセカンダリダウンロードが使用されることがあります。初回実行時の初期化中に行うなど、アプリのコード内でセカンダリダウンロードを処理する場合は、AndroidのPackageManager getApplicationInfoメソッドを使用して、ApplicationInfoクラスを取得してください。

ApplicationInfoクラスには、APKの場所(sourceDir)と、リソースとマニフェストが格納されたソースディレクトリのパブリックな部分(publicSourceDir)が含まれています。アプリのインストール先が外部ストレージの場合、これらのパスはその場所を指し、そこがダウンロードした追加コンテンツのインストール先となります。

アプリがinstallLocation="preferExternal"に従って40MBのAPKを外部ストレージにインストールしたにもかかわらず、ApplicationInfo dataDirのパスに基づいて1GBのデータファイルを内部ストレージに保存しているとします。このような場合、外部ストレージ使用のメリットを十分に活かすことができません。内部ストレージはすぐにいっぱいになり、ユーザーの不満を招く可能性があります。そのため、セカンダリダウンロードではダウンロードパスにsourceDirを使用するようにしてください。

Unityを使用したインストール先の指定方法

UnityはAmazonアプリストア向けのゲームを作成する際によく利用されるツールで、Android Player Settingsインスペクターを使用してインストール先の設定を行うことができます。アプリのインストール先を外部ストレージで構成する手順は次のとおりです。

  1. Unityプロジェクトで、[File-Build Settings…] をクリックします。
  2. [Build Settings] ダイアログの [Platform] リストで [Android] を選択し、[Player Settings…] ボタンをクリックしてインスペクターを表示します。

  3. [Other Settings] セクションを開いて、[Install Location] の設定を確認します。通常はpreferExternalがデフォルトになっています(ほとんどの場合、これが最適な設定です)。

YoYo GamesのGamemaker:Studioでも、AndroidプロジェクトではデフォルトとしてpreferExternalが使用されています。このデフォルト値は手動で変更できますが、そのままにしておくことをお勧めします。

ほかのエンジンや開発フレームワークでも、同様のオプションが用意されています。使用しているツールのテクニカルドキュメントを参照して、APKマニフェストでinstallLocationの値がpreferExternalに設定されていることを確認してください。