bundletool は、Android Studio、Android Gradle プラグイン、Google Play が Android App Bundle をビルドする基盤となるツールです。bundletool は App Bundle を各種 APK に変換してデバイスにデプロイすることができます。
Android SDK Bundle(ASB)とその APK は、bundletool を使用してビルドされます。また、コマンドライン ツールとしても利用できるため、App Bundle と SDK Bundle を自分でビルドして、アプリの APK またはランタイム対応の SDK の APK に対する Google Play のサーバー側のビルドを再作成することが可能です。
bundletool のダウンロード
まだダウンロードしていない場合は、GitHub リポジトリから bundletool をダウンロードしてください。
App Bundle をビルドしてテストする
Android Studio または bundletool コマンドライン ツールを使用して Android App Bundle をビルドし、この App Bundle から APK を生成するテストを行えます。
App Bundle をビルドする
Android App Bundle をビルドして署名するには、Android Studio と Android Gradle プラグインを使用します。ただし、IDE を使用しない場合(継続的なビルドサーバーを使用しているなどの理由で)、コマンドラインから App Bundle をビルドして、jarsigner を使って署名することもできます。
bundletool を使用して App Bundle をビルドする方法についての詳細は、bundletool を使用して App Bundle をビルドするをご覧ください。
App Bundle から APK のセットを生成する
Android App Bundle をビルドした後、Google Play で App Bundle から生成される APK と、デバイスにデプロイされたときの APK の動作をテストする必要があります。
App Bundle をテストするには、次の 2 つの方法があります。
bundletoolコマンドライン ツールをローカルで使用します。- テストトラックを使用して、Google Play から Play Console にバンドルをアップロードします。
このセクションでは、bundletool を使用して App Bundle をローカルにテストする方法について説明します。
bundletool が App Bundle から APK を生成する際、生成された 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 コマンドを使用する際に設定できるさまざまなフラグとオプションについて詳細を説明します。
表 1. bundletool build-apks コマンドのオプション
| フラグ | 説明 |
|---|---|
--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 コマンドの動作を変更できます。
表 2. 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 の使用方法について詳しくは、App Bundle: bundletool と Play Console でバンドルをテストするをご覧ください。