とにかくAndroid App Bundleに対応する

# 環境

- Android Studio 3.4.2

# Android App Bundleに対応すると何が嬉しいか

各端末で必要なサイズの画像、言語、ライブラリだけをダウンロードするようになるので、アプリによってはダウンロードサイズの大幅な削減が見込める。

# とにかくAndroid App Bundleに対応する

ビルド時（「Build」→「Generate Signed Bundle/APK...」）に上（APKではなくAndroid App Bundle）を選ぶ。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/9093dac2-16c6-9a01-08f8-0866802f8fd1.png">

書き出し時はいつもどおり。
初回は「Export encrypted key for enrolling published apps in Google Play App Signing」にチェックを入れておく。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/5d256f14-dd7e-b269-a477-e0b50ce3e205.png">

書き出したファイルは「aab」（Android App Bundle）という拡張子になっている。

Export...にチェックを入れている場合は、ここに `private_key.pepk` というのも入っている。
これをGoogle Play Consoleにアップロードする。
場所は「リリース管理」→「アプリの署名」。
<img width="233" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/02664c04-f756-cc61-728e-4c462949f27d.png">

後はいつもどおり「リリース管理」→「アプリのリリース」からアップロードし、リリースする。

# とにかくAndroid App Bundleを実機にインストールする

aabファイルはそのままでは実機にadbコマンドでインストールできない。
そのため、少し違う方法を使う事になる。

- bundletool を利用する
- 「内部アプリ共有」を使う

## bundletool を利用する

[bundletool](https://github.com/google/bundletool) というまたもググラビリティの低い名前のツールがGoogle公式から提供されている。
まず、これのReleasesから最新のjar（ `bundletool-all-0.10.2.jar` など）をダウンロードする。
`.bash_profile` あたりにこんな感じで書いておく。

```.bash_profile
alias bundletool="java -jar /path/to/bundletool-all-0.10.2.jar"
```

`source ~/.bash_profile` するなりして反映。

まず、下記コマンドを実行する。
オプションはまぁ見れば分かると思う。

```shell
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks \
--ks=/MyApp/keystore.jks \
--ks-pass=pass:PasSW0rD \
--ks-key-alias=MyKeyAlias \
--key-pass=pass:pAsSw0rD
```

すると細切れのapkをzipした apks というファイルが出来上がる。
zipファイルなので、拡張子をzipに変更すると解凍して細切れのapkを見る事ができる。
次に、下記コマンドを実行すると、良い感じに実機に合ったapkを作ってインストールしてくれる。

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

## 「内部アプリ共有」を使う

Google Play Consoleにある機能を利用する。

「リリース管理」→「アプリのリリース」→「内部アプリ共有を管理」から[https://play.google.com/apps/publish/internalappsharing/](https://play.google.com/apps/publish/internalappsharing/)に遷移する。
そこからaabをアップロードして、「リンクをコピー」からアプリのダウンロード用のリンクをコピーする。

<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/65ccc042-ab51-97f6-ec57-210400af5f4a.png">

それをシェアすれば良いだけかと思いきや、もう一つハードルがある。

インストールしたい端末でPlayストアアプリを開く。
左上のハンバーガーメニューから「設定」を開く。
<img width="233" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/0eb1a24c-8030-ee1c-a5ac-b9b333dfb1c8.png">

次に「Playストアのバージョン」を7回連続でタップする。
<img width="233" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/db8d5d87-3ca3-921a-8a42-1bd2f60fcdb2.png">

すると開発者オプションが有効になって「内部アプリ共有」メニューが表示されるので、これをON（スクショの状態）にする。
<img width="233" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9104/48a38709-fccf-b47c-b21a-e012f81c1709.png">

そうすると、先程コピーしたリンクを開いて遷移できるようになる。
なお、buildtoolと異なり、リリース済みのバージョンと同じバージョン番号になっている場合は、一度アンインストールして再インストールする事になる。

上記メニューが表示されていない場合は、Playストア自身のバージョンアップが必要な事がある。
「Playストアのバージョン」を1度タップするとバージョンアップがあるか確認できる。

Androidのバージョンが古すぎると（4.1系？）、そもそも「内部アプリ共有」が有効にできない事もある模様。

# 参考

- [Android App Bundle  |  Android Developers](https://developer.android.com/platform/technology/app-bundle)
- [google/bundletool: Bundletool is a command-line tool to manipulate Android App Bundles](https://github.com/google/bundletool)
- [アプリのサイズを削減  |  Android Developers](https://developer.android.com/topic/performance/reduce-apk-size)
- [About Android App Bundles  |  Android Developers](https://developer.android.com/guide/app-bundle)
- [bundletool  |  Android Developers](https://developer.android.com/studio/command-line/bundletool)
- [App Bundle と APK を内部で共有する - Play Console ヘルプ](https://support.google.com/googleplay/android-developer/answer/9303479)