Android App Bundle をビルドした後、Google Play で App Bundle から生成される APK と、デバイスにデプロイされたときの APK の動作をテストする必要があります。App Bundle をテストするには、2 つの方法が考えられます。bundletool
コマンドライン ツールをローカルに使用する方法と、Play Console に App Bundle をアップロードしてテストトラックを使用することで Google Play でテストする方法です。このページでは、bundletool
を使用して App Bundle をローカルにテストする方法について説明します。
bundletool
は、Gradle、Android Studio、Google Play が Android App Bundle をビルドしたり、各種 APK に変換してデバイスにデプロイしたりする際に基盤となるツールです。bundletool
はコマンドライン ツールとしても利用できるため、アプリの APK に対する Google Play のサーバー側のビルドを再作成、テスト、検証することが可能です。
Android App Bundle をビルドして署名するには、Android Studio と Android Plugin for Gradle を使用する必要があります。ただし、IDE を使用しない場合(継続的なビルドサーバーを使用しているなどの理由で)、コマンドラインから App Bundle をビルドして、jarsigner
を使って署名することもできます。
アプリをローカル デバイスにデプロイしてテストする際、IDE はデフォルトでは App Bundle を使用しません。ただし、実行 / デバッグ構成を変更し、App Bundle から APK をデプロイする方法を選択することで、アプリの実行に及ぼす影響を確認できます。
bundletool をダウンロードする
まだダウンロードしていない場合は、GitHub リポジトリから bundletool
をダウンロードしてください。
App Bundle から APK のセットを生成する
bundletool
が App Bundle から生成する APK は、APK セット アーカイブと呼ばれるコンテナに格納されます。このアーカイブは .apks
ファイル拡張子を使用します。アプリがサポートするすべてのデバイス設定に対する APK セットを App Bundle から生成するには、下記のように bundletool build-apks
コマンドを使用します。
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
APK をデバイスにデプロイする場合、下記のコマンドのように、アプリの署名情報も含める必要があります。署名情報を指定しない場合、bundletool
はデバッグ鍵を使用して APK の署名を試みます。
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks --ks=/MyApp/keystore.jks --ks-pass=file:/MyApp/keystore.pwd --ks-key-alias=MyKeyAlias --key-pass=file:/MyApp/key.pwd
下記の表で、bundletool build-apks
コマンドを使用する際に設定できるさまざまなフラグとオプションについて詳しく説明します。--bundle
と --output
だけが必須で、それ以外のフラグはすべて省略可能です。
フラグ | 説明 |
---|---|
--bundle=path |
(必須)Android Studio を使ってビルドした App Bundle へのパスを指定します。詳細については、プロジェクトのビルドをご覧ください。 |
--output=path |
(必須)出力する .apks ファイルの名前を指定します。これには、そのアプリのすべての APK アーティファクトが含まれます。このファイル内のアーティファクトをデバイス上でテストするには、接続されているデバイスに APK をデプロイする方法をご覧ください。 |
--overwrite |
--output オプションを使って指定したパスにある既存の出力ファイルを上書きする場合に、このフラグを指定します。このフラグを指定せず、出力ファイルがすでにある場合、ビルドエラーが発生します。
|
--aapt2=path |
AAPT2 へのカスタムパスを指定します。デフォルトで、bundletool には独自のバージョンの AAPT2 が含まれます。
|
--ks=path |
APK の署名に使用するデプロイ キーストアへのパスを指定します。このフラグは省略可能です。指定しない場合、bundletool はデバッグ署名鍵を使用して APK の署名を試みます。
|
--ks-pass=pass:password または --ks-pass=file:/path/to/file |
キーストアのパスワードを指定します。パスワードを書式なしテキストで指定する場合は、pass: を付けます。パスワードが記載されているファイルへのパスを渡す場合は、file: を付けます。--ks-pass を指定せずに --ks フラグを使用してキーストアを指定する場合、コマンドラインからパスワードを入力するように bundletool から求められます。
|
--ks-key-alias=alias |
使用する署名鍵のエイリアスを指定します。 |
--key-pass=pass:password または --key-pass=file:/path/to/file |
署名鍵のパスワードを指定します。パスワードを書式なしテキストで指定する場合は、pass: を付けます。パスワードが記載されているファイルへのパスを渡す場合は、file: を付けます。このパスワードがキーストアのパスワードと同じであれば、このフラグを省略できます。 |
--connected-device |
接続されているデバイスの設定を対象とする APK をビルドするように bundletool に指示します。このフラグを指定しない場合、bundletool はアプリがサポートするすべてのデバイス設定を対象に APK を生成します。
|
--device-id=serial-number |
接続されているデバイスが複数ある場合、アプリをデプロイするデバイスのシリアル ID をこのフラグで指定します。 |
--device-spec=spec_json |
対象とするデバイス設定を指定する .json ファイルへのパスをこのフラグで指定します。詳しくは、デバイス仕様の JSON ファイルを作成して使用する方法をご覧ください。 |
--mode=universal |
モードを universal に設定して、アプリのコードとリソースをすべて含む単一の APK のみ、bundletool でビルドします。これにより、アプリでサポートするすべてのデバイス設定と互換性のある APK となります。
注: こうした APK は、特定のデバイス設定用に最適化された APK よりもサイズが大きくなるのでご注意ください。ただし、複数のデバイス設定でアプリをテストする社内テスターとの共有などは簡単になります。 |
--local-testing
|
ローカルテスト用の App Bundle を有効にするには、このフラグを使用します。ローカルテストでは、Google Play サーバーへのアップロードが不要で、テストサイクルをすぐに繰り返し実行できます。
|
接続されているデバイスに APK をデプロイする
APK のセットを生成した後、bundletool
は、そのセットから APK の適切な組み合わせを、接続されているデバイスにデプロイできます。
たとえば Android 5.0(API レベル 21)以上を搭載するデバイスが接続されている場合、bundletool
はそのデバイスでアプリを実行するのに必要なベース APK、機能モジュール APK、設定 APK をプッシュします。または、Android 4.4(API レベル 20)以下を搭載するデバイスが接続されている場合、bundletool
は互換性のあるマルチ APK を探して、そのデバイスにデプロイします。
APK セットからアプリをデプロイするには、下記のように install-apks
コマンドを使用して、--apks=/path/to/apks
フラグで APK セットのパスを指定します(複数のデバイスが接続されている場合、--device-id=serial-id
フラグを追加して、対象デバイスを指定します)。
bundletool install-apks --apks=/MyApp/my_app.apks
デバイス固有の APK セットを生成する
アプリがサポートするすべてのデバイス設定に対する APK セットをビルドする代わりに、下記のように --connected-device
オプションを使用して、接続されているデバイスの設定のみを対象とする APK をビルドできます(複数のデバイスが接続されている場合、--device-id=serial-id
フラグを追加して、対象デバイスを指定します)。
bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
デバイス仕様の JSON ファイルを生成して使用する
bundletool
は JSON ファイルに指定されたデバイス設定を対象とする APK セットを生成できます。まず、接続されているデバイスについて JSON ファイルを生成するために、次のコマンドを実行します。
bundletool get-device-spec --output=/tmp/device-spec.json
bundletool
はデバイスの JSON ファイルを、自身が置かれているディレクトリに作成します。次に下記のように、そのファイルを bundletool
に渡して、その JSON ファイルに記載されている設定のみを対象とする APK セットを生成できます。
bundletool build-apks --device-spec=/MyApp/pixel2.json --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
デバイス仕様の JSON を手動で作成する
APK セットをビルドする対象のデバイスにアクセスできない場合(たとえば、デベロッパーの手元にないデバイスで友だちがアプリを試そうとする場合)、次の形式に沿って JSON ファイルを手動で作成できます。
{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
その後、前述のように、この JSON を bundle extract-apks
コマンドに渡すことができます。
既存の APK セットからデバイス固有の APK を抽出する
既存の APK セットから、特定のデバイス設定を対象とする APK のサブセットを抽出する場合、次のように extract-apks
コマンドを使用して、デバイス仕様の JSON を指定します。
bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json
APK セット内の APK の推定ダウンロード サイズを見積もる
圧縮されて有線で配信される APK セット内の APK の推定ダウンロード サイズを見積もるには、get-size total
コマンドを使用します。
bundletool get-size total --apks=/MyApp/my_app.apks
以下のフラグを使用して get-size total
コマンドの動作を変更できます。
フラグ | 説明 |
---|---|
--apks=path |
(必須)ダウンロード サイズを見積もる既存の APK セットのファイルへのパスを指定します。 |
--device-spec=path |
照合に使用するデバイス仕様のファイル(get-device-spec からまたは手動で構成)へのパスを指定します。部分的なパスを指定して、設定のセットについて見積もることもできます。
|
--dimensions=dimensions |
推定サイズを見積もるのに使用するディメンションを指定します。SDK 、ABI 、SCREEN_DENSITY 、LANGUAGE のカンマ区切りのリストを指定できます。すべてのディメンションにわたって見積もるには、ALL を指定します。
|
--instant |
インストール可能な APK ではなく、Instant を有効にした APK のダウンロード サイズを見積もります。デフォルトで、bundletool はインストール版 APK のダウンロード サイズを見積もります。
|
--modules=modules |
見積もりで考慮する APK セットのモジュールをカンマ区切りのリストで指定します。bundletool コマンドを使用すると、指定したセットの依存関係モジュールが自動的にすべて含まれます。デフォルトで、このコマンドは初回ダウンロードでインストールされるすべてのモジュールのダウンロード サイズを見積もります。
|
参考情報
bundletool
の使用方法について詳しくは、下記のリソースをご覧ください。
Codelab
- 初めての Android App Bundle: Android App Bundle の基本原則を探り、Android Studio を使用して独自のビルドをすぐに始める方法を示すコードラボです。この CodeLab は、
bundletool
を使用して App Bundle をテストする方法についても紹介します。