每当我在Android Studio中生成签名的apk时,默认情况下,其名称都将命名为app-release.apk ...
我们可以做任何设置,以便它提示并询问我需要分配给apk的名称(在Eclipse中的操作方式)
我要做的是-生成apk后对其重命名。这不会给出任何错误,但是有什么真正的方法,这样我就可以对设置进行任何更改以获得提示。
注意::
生成APK Android Studio时提示我选择位置(仅)
每当我在Android Studio中生成签名的apk时,默认情况下,其名称都将命名为app-release.apk ...
我们可以做任何设置,以便它提示并询问我需要分配给apk的名称(在Eclipse中的操作方式)
我要做的是-生成apk后对其重命名。这不会给出任何错误,但是有什么真正的方法,这样我就可以对设置进行任何更改以获得提示。
注意::
生成APK Android Studio时提示我选择位置(仅)
Answers:
是的,我们可以改变这一点,但需要更多注意
现在,将其添加到项目的build.gradle中,同时确保已检查了项目的build变体,release or Debug
因此在这里我将build变体设置为,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 希望它将解决您的问题:)
google update最近添加的一种新方法来处理此问题。 您现在可以根据风味或Variant输出来重命名构建 // //来源来自开发人员android文档 有关更多详细信息,请按照上述文档链接
使用Variant 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捆绑包的重命名是由之前的代码完成的,不需要任何任务即可全部重命名。
希望对您有帮助。:)
versionName
某种方式?
The APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
您可能会使用最新的android gradle插件(3.0)收到错误消息:
无法设置只读属性'outputFile'的值
根据迁移指南,我们现在应该使用以下方法:
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
}
}
注意2主要更改:
all
现在使用而不是each
迭代变体输出。outputFileName
属性用于代替对文件引用进行变异。${applicationName}
解决为BuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...
(为清楚起见,缩短了)。这导致包装失败。对我来说${applicationId}
还是${archivesBaseName}
更好的选择。还${defaultConfig.versionName}
对我来说是零。那么${applicationId}_${variant.name}-${variant.versionName}
是什么我结束了。
android{}
在和级别相同的部分中使用defaultConfig{}
。虽然,您可以在android{}
使用android.applicationVariants.all { }
语法之外使用它
我修改了@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
project.ext { appName = 'MyApplicatioName' }
rootProject.name
不如使用eclipse中的项目名称。
(已编辑,可与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)
}
}
}
> groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData
。为什么不简单地更改为buildType = variant.buildType.name
?
"file.apk" is not writeable
这是一个简短得多的方法:
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
我基于@Fer答案编写了更通用的解决方案。
还应该与风味和积累型的配置工作applicationId
,versionName
,versionCode
。
在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
变量的更多信息,请参见ApkVariant和BaseVariant接口定义。
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可用
不重命名,但也许首先正确地生成名称会有所帮助? 用Gradle更改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"
}
}
}
}
}
在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 4.4在IntelliJ 2017.3.2上测试并工作
场景:
我的应用程序中有2种口味,因此我希望根据每种口味对每个版本进行适当命名。
下面的代码将放入您的模块gradle构建文件中,该文件位于:
{app-root}/app/build.gradle
待添加的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
}
}
}
上面提供了以下可找到的APK {app-root}/app/
:
myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.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'
}
}