Android &引用;应用程序发布.apk“;如何更改此默认生成的apk名称

Android &引用;应用程序发布.apk“;如何更改此默认生成的apk名称,android,android-studio,Android,Android Studio,每当我在Android Studio中生成一个签名的apk时,默认情况下它的名称为app release.apk 我们是否可以进行任何设置,以便它能够提示并询问需要分配给apk的名称(就像它在eclipse中所做的那样) 我要做的是-在生成apk后重命名它。 这不会给出任何错误,但是否有任何真正的方法,以便我可以对设置进行任何更改以获得提示 注:: 生成apk时,android studio会提示我选择位置(仅限)不重命名它,但首先正确生成名称可能会有所帮助 是的,我们可以改变这一点,但需要更多

每当我在Android Studio中生成一个签名的apk时,默认情况下它的名称为app release.apk

我们是否可以进行任何设置,以便它能够提示并询问需要分配给apk的名称(就像它在eclipse中所做的那样)

我要做的是-在生成apk后重命名它。 这不会给出任何错误,但是否有任何真正的方法,以便我可以对设置进行任何更改以获得提示

注::


生成apk时,android studio会提示我选择位置(仅限)

不重命名它,但首先正确生成名称可能会有所帮助

是的,我们可以改变这一点,但需要更多的关注

现在将此添加到项目中的build.gradle中,同时确保已检查项目的build variant,如
发布或调试
因此,这里我将构建变量设置为
release
,但您也可以选择Debug。

你可以这样用不同的方法来做

在build.gradle中使用Set属性方法 在运行项目之前,不要忘记同步gradle 希望它能解决您的问题:)

google update最近增加了一种新的处理方法 您现在可以根据味道或变体输出重命名构建 有关更多详细信息,请参见上述文档链接
使用variantapi操作变量输出的新插件被破坏了。它仍然适用于简单任务,例如在构建期间更改APK名称,如下所示:

重命名.aab包 这很好

是否需要上述代码

我在最新版本的android studio 3.3.1中观察到的内容

.aab bundle的重命名由前面的代码完成,根本不需要任何任务重命名


希望这对你们有帮助。:)

我修改了@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
(编辑以与Android Studio 3.0和Gradle 4配合使用)

我正在寻找一个更复杂的apk文件名重命名选项,我编写了这个解决方案,用以下数据重命名apk:

  • 风味
  • 构建类型
  • 版本
  • 日期
你会得到这样一个apk:myProject\u dev\u debug\u 1.3.6\u 131016\u 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)
        }
    }
}
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)
        }
    }
}

我根据@Fer-answer编写了更通用的解决方案

它还应该与
applicationId
versionName
versionCode
的基于风格和构建类型的配置一起使用

在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)
        }
    }
}
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\u freeDebug\u 1.0\u 1.apk


有关
变量的更多信息,请参阅和接口定义

我认为这会有帮助

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'
    }
}

最新的android gradle插件(3.0)可能会出现错误:

无法设置只读属性“outputFile”的值

根据中国的经验,我们现在应该采用以下方法:

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
    }
}
注2:此处的主要变化:

  • 现在使用
    all
    而不是
    each
    来迭代变量输出
  • 使用
    outputFileName
    属性,而不是修改文件引用

  • 这里有一个更短的方法:

    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

    首先将模块从应用程序重命名为,即SurveyApp

    其次,将其添加到项目顶级(根项目)渐变中。它与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"
                    }
                }
            }
        }
    }
    

    我的解决方案也可能对某人有所帮助。

    在IntelliJ 2017.3.2上测试并使用Gradle 4.4

    场景:

    我的应用程序中有两种风格,因此我希望每个版本都根据每种风格进行适当命名

    下面的代码将放入您的模块gradle生成文件中,该文件位于:

    {app root}/app/build.gradle

    要添加到
    android{}
    块的渐变代码:

    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
            }
        }
    }
    
    上面提供了在
    {app root}/app/
    中找到的以下APK:

    myspicyflavor-release-1.2.3_build5_v10.apk
    mystandardflavor-release-1.2.3_build5_v10.apk
    
    希望它能对某人有用


    有关更多信息,请参阅问题中提到的其他答案在build.gradle(模块:app)中添加以下代码


    发布版本名将是您的应用程序名2018-03-31 12-34

    添加
    android.applicationVariants。所有的
    都会像下面那样在您的应用程序级别中屏蔽

    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下载

    applicationVariants.all { variant ->
      variant.outputs.all { output ->
        def reversion = "118"
        def date = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
        def versionName = defaultConfig.versionName
        outputFileName = "MyApp_${versionName}_${date}_${reversion}.apk"
      }
    }
    
    对于较新的android studio Gradle AppName是您想要的应用程序名称,请将其替换
    variantName将是默认选择的变体或风味
    日期将是今天的日期,因此需要进行任何更改,只需将其粘贴

    applicationVariants.all { variant ->
        variant.outputs.all {
            def variantName = variant.name
            def versionName = variant.versionName
            def formattedDate = new Date().format('dd-MM-YYYY')
            outputFileName = "AppName_${variantName}_D_${formattedDate}_V_${versionName}.apk"
        }
    }
    
    输出:
    AppName\u release\u D\u 26-04-2021\u V\u 1.2.apk1.将构建变量更改为release 2.从菜单栏选择构建->生成签名apk。通过这种方式,我生成了带符号的apkAll,这里的答案是不正确的。。使用其中任何一个都会出现此问题。。。问题是studio缓存apk工件的名称,并继续使用缓存的名称,而不是使用新生成的名称!因此,在FormattedDate的类似“Abhishek Chaubey”的安装中使用字符串。是否可以添加
    versionName
    ?@AbhishekChaubey在更改apk n后,我无法再通过Android Studio运行代码
    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'
            }
        }
    
    applicationVariants.all { variant ->
      variant.outputs.all { output ->
        def reversion = "118"
        def date = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
        def versionName = defaultConfig.versionName
        outputFileName = "MyApp_${versionName}_${date}_${reversion}.apk"
      }
    }
    
    applicationVariants.all { variant ->
        variant.outputs.all {
            def variantName = variant.name
            def versionName = variant.versionName
            def formattedDate = new Date().format('dd-MM-YYYY')
            outputFileName = "AppName_${variantName}_D_${formattedDate}_V_${versionName}.apk"
        }
    }