はじめに
Android AppではDynamic Feature Modules(DFM)を用いて、リリース後に必要な機能を追加でインストールすることができます。これにより開発者がアプリのサイズを小さくできたり、ユーザも使わない機能はそもそもインストールしないことでストレージの節約にもなるという便利なものです。
今回はこちらのDFMのインストール状況をユーザへと通知するテストを、内部テストを使用することなく完全オフラインで実施できるようにしていきます。
FakeSplitInstallManagerの実装
こちらを使っていきます。
通常のDFMのリクエストやインストールをするにはSplitInstallManagerを使いますが、そのFakeバージョンになります。
まずはSplitInstallManagerやSplitInstallManagerFactoryを使っている箇所を、それぞれFakeSplitInstallManagerとFakeSplitInstallManagerFactoryに入れ替えます。
この時に、FakeSplitInstallManagerFactory.createの第二引数はディレクトリ名を指定します。
private FakeSplitInstallManager mFakeSplitInstallManager;
mFakeSplitInstallManager = FakeSplitInstallManagerFactory.create(this, this.getExternalFilesDir("local_testing"));
分割されたAPKファイルを生成する
FakeSplitInstallManagerを実装した状態で通常通りAndroid Studioでビルドしても、アプリはクラッシュしてしまう。そこで、aabファイルを生成 -> bundletoolでapksを生成という形で、実機にインストールできるものを作っていく
まずはAndroid Studioでaabを作成する。
aabができたら、それがあるディレクトリに移動し、下記コマンドを用いてapksファイルを生成する。
bundletool build-apks --local-testing --bundle sample.aab --output sample.apks
apksファイルのインストール
apksファイルがあるディレクトリで、下記コマンドを用いてapkを実機にインストールする。
bundletool install-apks --apks=sample.apks
これでインストールが完了します。あとはDFMをインストールする動作を実機で確認すれば、ダウンロードからインストールまでの動作テストをすることができます。
意図的にネットワークエラーを起こす
テストで「ダウンロード失敗時」のケースをカバーするために、意図的にエラーを起こします。
エラーを起こしたい処理の箇所に下記コードを追記します。
FakeSplitInstallManager.setShouldNetworkError(true);
おわりに
設定をするのはややこしいところもありますが、内部テストでの公開をすることなくダウンロードからインストールの動作を確認できるのは便利です。
ただし、こちらはあくまでもmock的な立ち位置です。最終的な確認の際にはPlay Storeを用いて確認すると、一層品質の担保ができそうです。