【備忘録】bundletool を自分でビルドしてみた話

# 略称
- PAD：Play Asset Delivery
- AAB：Android App Bundle

# ■ はじめに

Android Developer で提供されている bundletool という AAB を弄くり回せるツールがあります。

せっかくオープンソースで公開されていましたのでどのようなことをやっているのかを知りたくて自前でビルドしてみました。
そのときの手順などをまとめておこうと思います。

# ■ 開発環境

- bundletool 1.8.0 (masterブランチ)
- Windows 10 Home (21H1)
- IntelliJ IDEA Ultimate 2021.2.1
    - 恐らく Community でも動かせると思います。
    - 余談ですが Japanease Language Pack をインストールしています。
- JRE 11

# ■ bundletool について

公式ドキュメントにございますのでこちらをご確認ください。

- [bundletool - Android developers](https://developer.android.com/studio/command-line/bundletool?hl=ja)

# ■ ビルド手順の前準備（JRE11の設定）

① GitHub にプッシュされている [bundletool](https://github.com/google/bundletool) のプロジェクトを clone してきます。

② IntelliJ IDEA で ① のプロジェクトを開きます。

![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/ffb35457-08e4-7b3b-0de6-f5af06286c3d.png)

③ メニューバーより `ファイル(F) -> プロジェクト構成 Ctrl+Alt+Shift+S` を選択します。

④ `プロジェクト設定 -> プロジェクト -> プロジェクト SDK(P)` で Java のバージョンが`11`を選択していることを確認します。
もし、してなければ下記へ進んでください。

![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/66ef7148-d1b1-8c71-08bf-0dda72cec174.png)

⑤ プロジェクト SDK(P) 項目のプルダウンメニューを開き、`SDKの追加 -> JDK のダウンロード` を選択します。

⑥ JDK のダウンロードウィンドウにて下記設定でダウンロードします。
- バージョン：11
- ベンダー：任意（私はデフォルトのAmazon Corretto）
- 場所：任意

![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/ae373441-c933-4743-a050-059364a8ad89.png)

⑦ 先程の`プロジェクト SDK(P)` の項目に `11` が指定されていることを確認してOKでウィンドウを閉じます。

# ■ ビルド手順

① IntelliJ IDEA で bundletool のプロジェクトを開いておきます。

② Jarファイルを生成します。
`Gradleタブ -> bundletool > Tasks > other > executableJar` を右クリックし、`実行 [executableJar] (U) Ctrl+Shift+F10` を選択し、実行します。

![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/6404a9a5-0aaa-3baa-1862-dd45c661f72e.png)

③ 実行タブ内のログに `'executableJar' の実行を完了しました。` と出ているのを確認します。

④ エクスプローラーを開き、下記パスに `bundletool-all.jar` があればビルド成功です。

```
.\bundletool\build\libs\bundletool-all.jar
```

![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/64d1246a-7505-f71f-c93d-1a89628e54af.png)

ここまで出来ていれば「実行構成」に `bundletool [executableJar]` という項目が追加されますので、以降Jarの更新をしたい場合はそちらを使えば簡単にJarファイルを作り直すことが出来ます。

# ■ 実行手順の前準備

今回は `build-apksオプション` について調査しやすい環境を作っていきます。

① 検証用に aab ファイルを作っておき、下記フォルダへ配置しておきます。

```
.\bundletool\test\app.aab
```

② メニューバーより `実行(U) -> 実行構成の編集(R)` を選択します。

③ `新規構成の追加 Alt+Insert -> JAR アプリケーション` を選択します。

④ 下記設定を行います。

- 名前 (N)：任意(私はaab2apks)
- JAR のパス (J)：先程生成した `bundletool-all.jar` までのフルパスを指定
- VM オプション (V)：空欄でOK
- プログラム引数 (R)：`build-apks --bundle=$ProjectFileDir$\test\app.aab --output=$ProjectFileDir$\test\app.apks`
- 作業ディレクトリ (W)：デフォルトのまま
- 環境変数(E)：空欄でOK
- JRE (J)：ビルド手順の前準備にて準備した物を使う（私は 11 を指定）

![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/85213c40-5c1a-0018-072b-4842c0269bfa.png)

# ■ 実行手順

① IntelliJ IDEA で下記ファイルを開きます。

```
.\bundletool\src\main\java\com\android\tools\build\bundletool\BundleToolMain.java
```

② メインメソッド内の適当なところにブレークポイントを貼ります。

③ メニューバーから `実行(U) -> デバッグ'aab2apks'(D) Shift+F9` を選択します。

④ 下記のようにブレークポイントで止まれば成功です。

![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/a22dc8da-2824-14f2-981b-0c620427b0c0.png)

# まとめ

長くなりましたが以上となります。

やはり実際のコードを見ながら動作チェックできると色々捗ります。

ソースコードを見ていると公式には発表していない機能が幾つかありましたので、その辺りの挙動も確認できれば、アプリ開発に役立つと思いますので引き続き調査を進めていこうと思います。