見出し画像

Androidアプリ開発 App Bundleをローカルでテストする【プログラマ】

FINE Knowledge Board(社内)よりエンジニアスタッフの投稿


概要

今まで、AndroidアプリのROMファイルの拡張子は.apkとなり、このアプリを実機インストールする場合は、端末上でそのファイルを選択するだけで、
インストーラーが立ち上がってインストールすることができた。

しかし、AppBundleファイルの拡張子は.aabとなる。
このファイルは端末上で選択してもzipファイル同様に解凍する挙動となる。
つまり、現段階では既存のインストーラーではAppBundleのファイルをインストールすることができない。

既存のインストーラーが使用できないため、ローカルでテストするためには、ビルドツールを用いて、PCからコマンドでインストールする必要がある。


ビルドツール

ビルドツールにはGoogleが提供する「bundletool 」というツールを使用する

Git:https://github.com/google/bundletool/releases


手順

ビルドツールを用いても.aabを実機にインストールすることはできない。
実機インストールするためには、インストール可能な形式「.apks」に変換する必要がある。
そのため、インストールするための手順としては以下のようになる

①.aab形式を.apks形式に変換
②.apks形式ファイルを端末にインストール

以降にて各手順の詳細を説明する。

>① .aab形式を.apks形式に変換

.aab形式を.apks形式に変換するためにはbundletool build-apksコマンドを使用する。

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

実機インストールするためには署名情報を含める必要があるため、以下のようになる。署名情報を指定しない場合、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

上記のままコマンドを行うと全てのアーキテクチャに対応された形となる。
特定の端末に合わせたアーキテクチャのみにする場合は端末の情報が必要となる。

画像1

実機インストールの流れとしては端末が接続されている前提となるため、
--connected-device」でよい。
※ただし、1台のみ接続されている前提

PlayAssetDeliveryなど、アプリを分割している場合には
上記に「--local-testing」を追加することで、ローカルでテストすることができる。
※リソースがサーバーでなくローカルにある形式

>② .apks形式ファイルを端末にインストール

以下のコマンドを入力し、処理が完了すると、端末へのインストールが完了する。端末へのインストールが完了する。

bundletool install-apks --apks=/MyApp/my_app.apks


まとめ

以下のようにコマンドを行うことで、
AppBuindleのローカルでのテストができる。

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
--connected-device
--local-testing
bundletool install-apks --apks=/MyApp/my_app.apks

出力ファイルの上書きができる「--overwrite」フラグなど他にも機能は存在するため、詳細は公式サイトを参考にする。

このような流れになっている理由として、
AppBundleの機能が関わっているからと思われる。

アプリが、以下のような複数のアーキテクチャに対応している場合
x86, x86_64, armeabi-v7a, arm64-v8a
APKでは全てのアーキテクチャに対応されたファイルをインストールするのに対し、AppBundleでは端末に必要なアーキテクチャのみ対応されたファイルをインストールする。
「端末に最適なアーキテクチャのみ対応されたファイル」を作成する必要があるため、手順が分割されているのではないかと考えられる。

また、以下の点に関しては注意が必要となる。

・ファイル容量が大きい場合はエラーになることがあるため、「java -Xms1024m -Xmx4096m -jar」を用いてbundletoolを呼び出す必要あり。

・PlayAssetDeliveryなどアプリを分割している際に「--local-testing」を設定した場合、サーバーを介さないテストとなるため、DLするリソースはアプリの保存領域の一部をサーバーに見立てて、そこからDLする扱いとなる(データ削除により削除可能な領域)
※ローカルのため、機内モードであってもDL可能

・AppBundleはインストールする端末に最適化されたアプリがインストールされる。そのため、バックアップアプリによってはバックアップを取っていても、他の端末では使用できない状態となる可能性があると思われる。


参考

bundletool
https://developer.android.com/studio/command-line/bundletool?hl=ja

bundletool GitHub
https://github.com/google/bundletool/releases


大阪のゲーム開発会社ファインでは一緒に働くアプリプログラマーを募集しています!
募集要項はコチラを御覧ください!


この記事が気に入ったらサポートをしてみませんか?