Android Studioで「Generate Signed Budle / APK」したときに生成される APK/AAB のファイル名。そのままでもそんな問題があるって訳でもないけど、所望のファイル名つけたいなって思いますよね。
知らない人が調べるのはしんどいと思うので、というか自分がしんどかったので、書きます。
デフォルト状態
まずは、特段なにも指定しない場合にどうなるかをまとめてみます。
APKの場合
ビルドタイプのみの場合
/app/release/app-release.apk
モジュール配下に[buildType]/
のディレクトリが作られ、[module]-[buildType].apk
という名前のファイルになります。
プロダクトフレーバーを設定している場合
/app/production/release/app-production-release.apk
モジュール配下に[prodctFlavor]/[buildType]/
のディレクトリが作られ、[module]-[productFlavor]-[buildType].apk
という名前のファイルになります。
AAB (Android App Bundle) の場合
ビルドタイプのみの場合
/app/release/app.aab
モジュール配下に[buildType]/
のディレクトリが作られ、[module].aab
という名前のファイルになります。
プロダクトフレーバーを設定している場合
/app/production/release/app.aab
モジュール配下に[prodctFlavor]/[buildType]/
のディレクトリが作られ、[module].aab
という名前のファイルになります。
どちらにしてもAABの場合、モジュール名しか名前に反映されません。
APKのファイル名を変更する方法
APKのファイル名を完全に制御する、スマートな方法はなさそうです。
以下のようにして指定することができますが、多分バージョンが変わるとこの方法では通用しなくなります。
また、この方法ではAABの名前は変更できません。
※ Gradle 4.10.3の時点で動作することを確認しています。
android {
...
applicationVariants.all { variant ->
if (variant.buildType.name != "release") {
return
}
variant.outputs.all {
outputFileName = "hogehoge.apk"
}
}
}
作成されるディレクトリは変わらず以下のように生成されるファイル名が変わっています。
hogehoge.apk
「アプリ名+バージョン名」みたいな名前にしたいので私は以下のように指定したりします。
def applicationName = "Application"
def versionMajor = 0
def versionMinor = 0
def versionPatch = 1
android {
compileSdkVersion 28
defaultConfig {
applicationId "net.mm2d.myapplication"
minSdkVersion 21
targetSdkVersion 28
versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
}
applicationVariants.all { variant ->
if (variant.buildType.name != "release") {
return
}
variant.outputs.all {
outputFileName = "${applicationName}-${versionName}.apk" // ←ココ
}
}
}
こうなります。
Application-0.0.1.apk
AAB(Android App Bundle) のファイル名を変更する方法
AABの方が簡単です。
デフォルト状態でモジュール名が当てはめられていた部分の名前はarchivesBaseName
を指定することで変更できます。
以下のようにすると
archivesBaseName = "hogehoge"
作成されるディレクトリは変わらず以下のように生成されるファイル名が変わっています。
hogehoge.aab
「アプリ名+バージョン名」にしてみましょう。
def applicationName = "Application"
def versionMajor = 0
def versionMinor = 0
def versionPatch = 1
android {
compileSdkVersion 28
defaultConfig {
applicationId "net.mm2d.myapplication"
minSdkVersion 21
targetSdkVersion 28
versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
archivesBaseName = "${applicationName}-${versionName}" // ←ココ
}
}
できました。
Application-0.0.1.aab
APKの場合も同様に、モジュール名部分が archivesBaseName
で指定した名前に変化します。
Application-0.0.1-production-release.apk
APKの場合は、名前の後ろに-[productFlavor]-[buildType]
がつきますが、これで十分な場合も多いでしょう。
こっちは技巧的な変更方法って訳ではないので、多分前述の方法よりは長く使えそうです。
以上です。