Gradleを使用して生成される.aabのファイル名が変更された歴史があった

f:id:vm-dev-yt:20220325171902p:plain
出典:Android Developers Japan Blog: Android App Bundle の未来がここに

はじめに

株式会社ビデオマーケットの田中です。

最近、Gradleを使用して生成されるAndroid App Bundleのデフォルトのファイル名について調べる機会がありました。そして、そのファイル名が今までに変わってきたことが分かりましたので、ご紹介します。

また、特殊なパターンとなりますが、調査するきっかけとなりました、ファイル名の変更の影響を受けて直面した問題についても説明していきます。

Android App Bundleのビルド

.aabの生成

developer.android.com

Android Developer公式サイトなどにも記載されている通り、通常Gradleを使用してApp Bundleをビルドする際には、$ ./gradlew :{module}:bundle{BuildVariant}の形式でコマンドを実行します。

例1)module:app, BuildVariant:Releaseの場合
$ ./gradlew :app:bundleRelease
または
$ ./gradlew bundleRelease

例2)module:app, BuildVariant:prodReleaseの場合
$ ./gradlew :app:bundleProdRelease
または
$ ./gradlew bundleProdRelease

そして、App Bundleのビルドが成功すると、{module}/build/outputs/bundle/{BuildVariant}フォルダに生成された.aabファイルが格納されます。

f:id:vm-dev-yt:20220329232607p:plain
$ ./gradlew :app:bundleProdRelease実行(Android Gradle プラグイン v7.1.2)

生成される.aabのファイル名が変更された歴史があった

Gradleを使用して生成される.aabのデフォルトのファイル名は、Android Gradle プラグイン(以下、プラグイン)及びGradleのバージョンによって、次のように違いが出ることが分かりました。

プラグインのバージョン Gradleのバージョン .aabファイル名
($ ./gradlew bundleRelease)
.aabファイル名
($ ./gradlew bundleProdRelease)※1
3.3.3 4.10.1 app.aab app.aab
3.4.3 5.4.0 app.aab app.aab
3.5.4 5.4.1 app-release.aab または app-{productFlavors}-release.aab ※2 app-prod-release.aab
3.6.4 5.6.4 app-release.aab または app-{productFlavors}-release.aab ※2 app-prod-release.aab
4.0.2 6.4.1 app-release.aab または app-{productFlavors}-release.aab ※2 app-prod-release.aab
4.1.3 6.7.0 app-release.aab または app-{productFlavors}-release.aab ※2 app-prod-release.aab
7.1.2 7.4.1 app-release.aab または app-{productFlavors}-release.aab ※2 app-prod-release.aab

※1.BuildVariant:prodReleaseがある場合。

※2.module:app, buildTypes:releaseのBuildVariantが複数個ある場合、app-{productFlavors}-release.aabがそれぞれ生成される。

上記の表より、Gradleを使用して生成される.aabのファイル名が変わってきたことが分かります。具体的には、プラグインが3.4系までであれば全て{module}.aabの形式となり、3.5系以降の場合には{module}-{buildTypes}.aabまたは{module}-{productFlavors}-{buildTypes}.aabの形式で生成されます。

f:id:vm-dev-yt:20220329232546p:plainf:id:vm-dev-yt:20220329232607p:plain
左)$ ./gradlew :app:bundleProdRelease実行 :プラグイン〜v3.4系
右)$ ./gradlew :app:bundleProdRelease実行 :プラグインv3.5系〜

従いまして、安定した開発環境の導入を目的にプラグイン及びGradleのバージョンを更新した際には、生成される.aabのデフォルトのファイル名が変わるパターンもあるということを覚えておくと良さそうです。

ファイル名の変更の影響を受けて直面した問題

独自実装の.aabファイル名の変更処理が動かなくなった

この度、新たに引き継いだデモ用のAndroidアプリがありました。

あまりメンテナンスがされていなかった為、引き継いだ時には「プラグイン:3.3系、Gradle:4.10系」という、とても古い状態になっていました。

そして、「プラグイン:4.0系、Gradle:6.4系」まで更新し、従来の運用通り$ ./gradlew bundleProdReleaseを実行してApp Bundleをビルドした結果、独自実装の.aabファイル名の変更処理が動かなくなりました。

原因

以下の2点が原因です。

  1. 「プラグイン:3.3系、Gradle:4.10系」から「プラグイン:4.0系、Gradle:6.4系」に更新した為、$ ./gradlew bundleProdRelease実行により生成される.aabのデフォルトのファイル名が、app.aabからapp-prod-release.aabに変わった。
  2. .aabファイル名の変更処理では、app.aabというファイルが生成されるのを前提として処理を実行するよう実装されていた為、app-prod-release.aabという想定していない形式のファイル名には対応できなくなっていた。

.aabファイル名の変更処理を改修

そこで、以下のように.aabファイル名の変更処理をbuild.gradle(:app)で実装することで対応しました。

■対応前
rename "app.aab", "任意のファイル名.aab"

■対応後
rename (/.+\.aab/, /任意のファイル名.aab/)

最後に

Androidプロジェクトのプラグイン及びGradleのバージョン更新を行った際には、Gradleを使用して生成される.aabのファイル名が変わる事があります。

特に、build.gradleなどで独自の.aabファイル名の変更処理を実装している場合には、生成後の.aabのファイル名に対して適切に対応していく必要があります。

参考リンク

コマンドラインからアプリをビルドする  |  Android デベロッパー  |  Android Developers

Android Gradle プラグインのリリースノート  |  Android デベロッパー  |  Android Developers