「app-release.apk」このデフォルトで生成されたapk名を変更する方法


155

Android Studioで署名済みのAPKを生成すると、デフォルトでapp-release.apk ...という名前が付けられます。

設定を行って、apkに割り当てる必要がある名前を尋ねて尋ねるようにできますか(eclipseで行う方法)

私がすることは-それが生成された後にapkの名前を変更します。これはエラーにはなりませんが、プロンプトを表示するために設定を変更できるようにするための本物の方法はあります。

注意::

apk android studioの生成中に、場所を選択するように求めるプロンプトが表示されます(のみ)ここに画像の説明を入力してください


1.ビルドバリアントをリリースに変更2.メニューバーからビルド->署名されたAPKを生成を選択します。このようにして、署名されたapkを生成しています
Prabs

ここでのすべての答えは正しくありません。この問題は引き続きそれらのいずれかを使用しても発生します...問題はapkアーティファクトの名前をキャッシュするスタジオであり、新しく生成された名前を使用する代わりに、キャッシュされた名前を使用し続けます!
TacB0sS

回答:


142

はい、それを変えることができますが、もう少し注意してください

SeeThis

これをプロジェクトのbuild.gradleに追加し、プロジェクトのビルドバリアントを確認したことを確認してください。release or Debug ここで、ビルドバリアントを設定しましたreleaseが、デバッグとしても選択できます。

    buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig getSigningConfig()
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def date = new Date();
                        def formattedDate = date.format('yyyyMMddHHmmss')
                        output.outputFile = new File(output.outputFile.parent,
                                output.outputFile.name.replace("-release", "-" + formattedDate)
    //for Debug use output.outputFile = new File(output.outputFile.parent,
   //                             output.outputFile.name.replace("-debug", "-" + formattedDate)
                        )
                    }
                }
            }
        }

あなたはこのような異なるアプローチでそれを行うかもしれません

 defaultConfig {
        applicationId "com.myapp.status"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        setProperty("archivesBaseName", "COMU-$versionName")
    }

build.gradleでSetプロパティメソッドを使用し 、プロジェクトを実行する前にGradleを同期することを忘れないで ください問題が解決することを願っています:)

これをグーグルアップデートで最近追加した新しいアプローチフレーバーまたはバリアントの出力に従ってビルドの名前を変更できます //以下のソースは開発者のandroidドキュメントからです 詳細については、上記のドキュメントリンク参照してくださいバリアントAPIを使用してバリアントの出力を操作する ことはできません
新しいプラグインで。以下に示すように、ビルド時にAPK名を変更するなどの単純なタスクでも機能します。

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

.aabバンドルの名前の変更これは、David Medenjakによって適切に回答されています

tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) {
        def renameTaskName = "rename${task.name.capitalize()}Aab"
        def flavor = task.name.substring("bundle".length()).uncapitalize()
        tasks.create(renameTaskName, Copy) {
            def path = "${buildDir}/outputs/bundle/${flavor}/"
            from(path)
            include "app.aab"
            destinationDir file("${buildDir}/outputs/renamedBundle/")
            rename "app.aab", "${flavor}.aab"
        }

        task.finalizedBy(renameTaskName)
    }
//@credit to David Medenjak for this block of code
}

上記のコードの必要性はありますか

Android Studio 3.3.1の最新バージョンで確認したこと

.aabバンドルの名前変更は前のコードによって行われ、タスクの名前をすべて変更する必要はありません。

皆さんのお役に立てば幸いです。:)


したがって、formattedDateの「Abhishek Chaubey」のような文字列をそこに使用します
Abhishek Chaubey

versionNameどういうわけか追加することは可能ですか?
zygimantus

@AbhishekChaubey apk名を変更した後、Android Studioでコードを実行できなくなりました。助けてください...それは示していますThe APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
Beeing Jk

@BeeingJkがプロジェクトを再ビルドするか、Androidスタジオを閉じてビルドディレクトリから出力フォルダーを削除し、プロジェクトを再ビルドするか、クリーニングして試してください。役立つと思います
Abhishek Chaubey

4
Android Studio 3.0以降、output.outputFileは読み取り専用です。@ johnny-doeの答えは新しいソリューションです。
krishh

79

最新のAndroid Gradleプラグイン(3.0)でエラーが発生する場合があります。

読み取り専用プロパティ 'outputFile'の値を設定できません

移行ガイドによると今は次のアプローチを使用する必要があります。

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
    }
}

注2の主な変更点:

  1. alleachバリアント出力を反復処理する代わりに、現在使用されています。
  2. outputFileName プロパティは、ファイル参照を変更する代わりに使用されます。

1
これが2017年10月のAndroid Studio 3.0 Beta 7の正解です。ありがとうございます。
krishh 2017年

3
私の場合は${applicationName}解決されましたBuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...(明確にするために短縮されています)。これにより、パッケージ化が失敗しました。私にとって、${applicationId}または${archivesBaseName}より良いオプションでした。また${defaultConfig.versionName}私にとってはヌルです。だから${applicationId}_${variant.name}-${variant.versionName}私は結局のところです。
pcdev 2017

1
@KGCybeX通常、このコードはandroid{}と同じレベルのセクションで使用されdefaultConfig{}ます。ただし、構文のandroid{}使用以外でも使用できandroid.applicationVariants.all { }ます
Johnny Doe

1
あなたは命の恩人です;)
Rik van Velzen

1
Gradle 5.1.1での作業
Williaan Lopes

53

@Abhishek Chaubeyの回答を変更して、ファイル名全体を変更しました。

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                project.ext { appName = 'MyAppName' }
                def formattedDate = new Date().format('yyyyMMddHHmmss')
                def newName = output.outputFile.name
                newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
                newName = newName.replace("-release", "-release" + formattedDate)
                //noinspection GroovyAssignabilityCheck
                output.outputFile = new File(output.outputFile.parent, newName)
            }
        }
    }
    debug {
    }
}

これにより、次のようなファイル名が生成されます。 MyAppName-release20150519121617.apk


3
Gradleで変数を追加する方法
Mehdiway、2015年

1
:カスタム「のappName」プロパティを追加するには、ルートプロジェクトに、このようなコードを追加するために project.ext { appName = 'MyApplicatioName' }
miha

2
@ ranma2913 apk名を変更した後、Android Studioでコードを実行できなくなりました。助けてください... APKファイル/Users/.../outputs/apk/NewName-debug-20161004172815.apkがディスクに存在しないことを示しています。
Beking Jk

1
MyAppNameを手動で設定する代わりにrootProject.name、Eclipseのようにプロジェクト名を指定します。
Hiren Dabhi 2016年

3
Android Studio 3.0以降output.outputFileは読み取り専用です。@ johnny-doeの答えは新しいソリューションです。
krishh

50

(Android Studio 3.0およびGradle 4で動作するように編集)

より複雑なapkファイル名の変更オプションを探していたところ、apkの名前を次のデータに変更するこのソリューションを作成しました。

  • ビルドタイプ
  • バージョン
  • 日付

次のようなapkを取得します:myProject_dev_debug_1.3.6_131016_1047.apk

ここで答え全体を見つけることができます。それが役に立てば幸い!

build.gradleで:

android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
        debug {
            minifyEnabled false
        }
    }

    productFlavors {
        prod {
            applicationId "com.feraguiba.myproject"
            versionCode 3
            versionName "1.2.0"
        }
        dev {
            applicationId "com.feraguiba.myproject.dev"
            versionCode 15
            versionName "1.3.6"
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def project = "myProject"
            def SEP = "_"
            def flavor = variant.productFlavors[0].name
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def version = variant.versionName
            def date = new Date();
            def formattedDate = date.format('ddMMyy_HHmm')

            def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"

            outputFileName = new File(newApkName)
        }
    }
}

2
すごい。一部のフレーバーまたはbuildType(flavor == "dev" || buildType = "debug")の定数ファイル名(バージョンまたは日付なし)のみが改善される
Tony BenBrahim

ここでは、「それぞれ」ではなく「すべて」が重要と思われます。
Xan-Kun Clark-Davis

エラーが発生します> groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData。単純に変更しないのはなぜbuildType = variant.buildType.nameですか?
soshial

それは言う"file.apk" is not writeable
Hosein Haqiqian

38

これははるかに短い方法です:

defaultConfig {
    ...
    applicationId "com.blahblah.example"
    versionCode 1
    versionName "1.0"
    setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
    //or so
    archivesBaseName = "$applicationId-v$versionCode($versionName)"
}

名前はcom.blahblah.example-v1(1.0)-debug.apk(デバッグモード)になります。

Android Studioは、デフォルトでビルドタイプ名によってversionNameSuffixを追加します。これをオーバーライドする場合は、次の手順を実行します。

buildTypes {
    debug {
        ...
        versionNameSuffix "-MyNiceDebugModeName"
    }
    release {
        ...
    }
}

デバッグモードでの出力:com.blahblah.example-v1(1.0)-MyNiceDebugModeName.apk


3
ありがとう。これは最速のオプションです!
ジョン

1
補足として、archiveBaseNameをローカルのgradle.propertiesファイルに追加できます。
Ge3ng 2018

本当にはっきりしているようです。なぜこれが望ましいソリューションではないのですか?
Xan-Kun Clark-Davis

6

@Ferの回答に基づいて、より普遍的なソリューションを作成しました。

それはまたの風味とビルドタイプベースの構成で動作するはずですapplicationIdversionNameversionCode

build.gradleで:

android {
    ...
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def appId = variant.applicationId
            def versionName = variant.versionName
            def versionCode = variant.versionCode
            def flavorName = variant.flavorName // e. g. free
            def buildType = variant.buildType // e. g. debug
            def variantName = variant.name // e. g. freeDebug

            def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
            output.outputFile = new File(output.outputFile.parentFile, apkName)
        }
    }
}

APK名の例: com.example.app_freeDebug_1.0_1.apk

詳細についてはvariant、変数を参照ApkVariantBaseVariantインタフェース定義を。


4

android.applicationVariants.allあなたのアプリレベルのgradleに以下のようなブロックを追加してください

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            lintOptions {
                disable 'MissingTranslation'
            }
            signingConfig signingConfigs.release
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
                }
            }
        }
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '_debug'
        }
    }

2019/03/25で利用可能



2

まず、モジュールの名前をappからieに変更します SurveyAppに

次に、これをプロジェクトの最上位(ルートプロジェクト)Gradleに追加します。Gradle 3.0で動作しています

//rename apk for all sub projects
subprojects {
    afterEvaluate { project ->
        if (project.hasProperty("android")) {
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${project.name}-${variant.name}-${variant.versionName}.apk"
                }
            }
        }
    }
}

2

build.gradle(Module:app)に次のコードを追加します

android {
    ......
    ......
    ......
    buildTypes {
        release {
            ......
            ......
            ......
            /*The is the code fot the template of release name*/
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def formattedDate = new Date().format('yyyy-MM-dd HH-mm')
                    def newName = "Your App Name " + formattedDate
                    output.outputFile = new File(output.outputFile.parent, newName)
                }
            }
        }
    }
}

そして、リリースビルド名はあなたのアプリ名になります 2018-03-31 12-34


1

私の解決策も誰かに役立つかもしれません。

IntelliJ 2017.3.2Gradle 4.4でテストおよび動作

シナリオ:

私のアプリケーションには2つのフレーバーがあるので、各リリースにそれぞれのフレーバーに応じて適切な名前を付けたいと思いました。

以下のコードは、次の場所にあるモジュールgradleビルドファイルに配置されます。

{app-root}/app/build.gradle

android{ }ブロックに追加するGradleコード:

android {
    // ...

    defaultConfig {
        versionCode 10
        versionName "1.2.3_build5"
    }

    buildTypes {
        // ...

        release {
            // ...

            applicationVariants.all { 
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(output.outputFile.name, variant.flavorName + "-" + defaultConfig.versionName + "_v" + defaultConfig.versionCode + ".apk"))
                }
            }

        }
    }

    productFlavors {
        myspicyflavor {
            applicationIdSuffix ".MySpicyFlavor"
            signingConfig signingConfigs.debug
        }

        mystandardflavor {
            applicationIdSuffix ".MyStandardFlavor"
            signingConfig signingConfigs.config
        }
    }
}

上記は、にある次のAPKを提供します{app-root}/app/

myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.apk

それが誰かに役立つことを願っています。

詳細については、質問で言及されている他の回答を参照してください


0

これは役立つと思います。

buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                project.ext { appName = 'MyAppName' }
                def formattedDate = new Date().format('yyyyMMddHHmmss')
                def newName = output.outputFile.name
                newName = newName.replace("app-", "$project.ext.appName-")
                newName = newName.replace("-release", "-release" + formattedDate)
                output.outputFile = new File(output.outputFile.parent, newName)
            }
        }
    }
}
productFlavors {
    flavor1 {
    }
    flavor2 {
        proguardFile 'flavor2-rules.pro'
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.