ビルド時に生成されるAPK/AABのファイル名を変更する方法


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]がつきますが、これで十分な場合も多いでしょう。

こっちは技巧的な変更方法って訳ではないので、多分前述の方法よりは長く使えそうです。

以上です。