2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】Test dynamic delivery offline のやり方

Posted at

はじめに

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を用いて確認すると、一層品質の担保ができそうです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?