“;app-release.apk"如何更改这个默认生成的apk名称

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

我们是否可以做一些设置,以便它应该提示并询问我需要分配给apk的名称(就像在eclipse中那样)

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

注意::

在生成apk android studio时,提示我选择位置(仅)enter image description here

156511 次浏览

不是重命名,但也许在第一时间生成正确的名称会有所帮助?用Gradle更改apk名称

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

SeeThis

现在将此添加到项目中的build.gradle中,同时确保您已经检查了项目的构建变体,如release or Debug 所以这里我已经将我的构建变量设置为release,但你也可以选择为Debug。

    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文档 欲了解更多详细信息,请参阅上面的文档链接 < br > 新插件打破了使用Variant API来操作Variant输出的习惯。它仍然适用于简单的任务,例如在构建时更改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 bundle 这是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包的重命名是由前面的代码完成的,根本不需要任何任务重命名。

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

我修改了@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_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)
}
}
}

我写了更多基于@Fer answer的通用解。

它还应该与flavor一起工作,并构建基于类型的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接口定义。

我想这会有帮助。

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这里的主要变化:

  1. 现在使用all而不是each来迭代变量输出。
  2. 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中。它与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.2Gradle 4.4

场景:

我的应用程序中有两种口味,所以我希望每个版本都能根据每种口味适当命名。

下面的代码将被放置到你的模块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
}
}
}

上面提供了在{app-root}/app/中找到的以下apk:

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

希望对别人有用。

欲了解更多信息,请参阅问题中提到的其他答案

在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

在你的应用程序级别gradle中添加如下android.applicationVariants.all

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发售

Android studio 4.1.1

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

浏览器名称是你想要的应用程序名称,所以替换它
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_release_d_26 - 04 - 2021 - _v_1.2.apk

我意识到很多答案不适合不同的建筑类型,下面是我如何处理它。

applicationVariants.all { variant ->
variant.outputs.all {
def appVersionName = "${applicationId}v${versionCode}#${versionName}"
      

switch (buildType.name) {
case "debug": {
outputFileName = "${appVersionName}-staging.apk"
break
}
case "release": {
outputFileName = "${appVersionName}.apk"
break
}
}
}
}

像applicationId, versionCode和versionName这样的属性已经在defaultConfig中定义了。无论何时生成APK,您都可以轻松地将其格式化为更有意义的上下文命名。

这就是它产生的过程。

com.delacrixmorgan-v1.0.0#1.apk
com.delacrixmorgan-v1.0.0#1-staging.apk
除此之外,如果你们想了解更多关于Gradle的知识。我已经在这篇中型文章中详细介绍了。 给你的Android Gradle充电 < / p >

对于flavors and split APK,这是它对APK文件的工作方式,而不是Bundle / AAB files

android {
....


productFlavors {
aFlavor {
applicationId "com.a"
        

versionCode 5
versionName "1.0.5"


signingConfig signingConfigs.signingA
}
bFlavor {
applicationId "com.b"


versionCode 5
versionName "1.0.5"


signingConfig signingConfigs.signingB
}
cFlavor {
applicationId "com.c"


versionCode 3
versionName "1.0.3"


signingConfig signingConfigs.signingC
}
}


splits {
abi {
enable true
reset()
include 'arm64-v8a', 'x86', 'x86_64'
universalApk false
}
}


android.applicationVariants.all { variant ->
variant.outputs.all { output ->
// New one or Updated one
output.outputFileName = "${variant.getFlavorName()}-${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}-${output.getFilter(com.android.build.OutputFile.ABI)}.apk"
// Old one
// output.outputFileName = "${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}.apk"
}
}
}

👇结果👇

对于aFlvour

  • < p > 释放

    aFlavor-release-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

    aFlavor-release-v5_1.0.5-16Jan2020_21-26-x86_64.apk

    aFlavor-release-v5_1.0.5-16Jan2020_21-26-x86.apk

  • < p > 调试

    aFlavor-debug-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

    aFlavor-debug-v5_1.0.5-16Jan2020_21-26-x86_64.apk

    aFlavor-debug-v5_1.0.5-16Jan2020_21-26-x86.apk

对于bFlavor

与上面类似的名称,只是将前缀aFlavor改为bFlavor

  • bFlavor-release-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

对于cFlavor

与上面类似的名称只是将前缀aFlavor改为cFlavor 和,versionCodeversionName作为尊重

  • cFlavor-release-v3_1.0.3-16Jan2020_21-26-arm64-v8a.apk

要了解更多细节,请查看<强> < a href = " https://stackoverflow.com/q/59650844/1684864 " > Que-Ans < / > < / >强线程

把这段代码放到build.gradle(app)中

 android {


.......
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "Name_of_App.apk"
}}
}

最简单的方法-在build.gradle(app):

android {
compileSdk 31
project.archivesBaseName = "Scanner"


defaultConfig {

你会收到:Scanner-release.apk

在这里我得到了apk的名字

branchName_versionName_versionCode.apk

例子

development_1.5.3_10.apk

从这里获取分支名称

def getBranchName = { ->
try {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
standardOutput = stdout
}
println "Git Current Branch = " + stdout.toString()
return stdout.toString().trim()
}
catch (Exception e) {
println "Exception = " + e.getMessage()
return null;
}
}

然后从这里获得您的变体并设置文件名

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 = getBranchName() + '_' + versionName + '_' + versionCode + '.apk';
output.outputFileName = apkName
}
}

把这个脚本放在app/build.gradle文件中的android标签中

android {
def getBranchName ................
..................
..................
applicationVariants.all ..........
..................
..................
}