【发布时间】:2013-05-23 03:43:42
【问题描述】:
如何调整我的 build.gradle 以更改 apk(s) 的最终基本名称? (不改变默认后缀)
【问题讨论】:
标签: android build gradle android-gradle-plugin
如何调整我的 build.gradle 以更改 apk(s) 的最终基本名称? (不改变默认后缀)
【问题讨论】:
标签: android build gradle android-gradle-plugin
在 Gradle 1.8 上,project.archivesBaseName 确实有效,但它给出了这样的抱怨:
按需创建属性(也称为动态属性)已 已弃用,并计划在 Gradle 2.0 中删除。请阅读 http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html 有关替换动态属性的信息。已弃用 动态属性:“根项目”上的“archivesBaseName” 'myapp'",值:"AnotherName"。
要消除警告(并避免您的构建在 Gradle 2.0 上中断),请使用以下命令:
project.ext.set("archivesBaseName", "AnotherName");
...正如ExtraPropertiesExtension documentation 中所建议的那样。
Android Gradle 插件版本 1.1.0 引入了一个破坏 archivesBaseName、as friederbluemle noted 的错误。但幸运的是,此问题已得到修复(在 version 1.1.2 中)。
【讨论】:
1.1.0-rc1 一起工作。有谁知道为什么?
archivesBaseName 工作正常。
我找到了一个非常简单的解决方案。 apk 基本名称是在项目上定义的属性archivesBaseName。所以以下行足以重命名 apk:
project.archivesBaseName = "AnotherName";
【讨论】:
Could not get unknown property 'versionName' for project ':app' of type org.gradle.api.Project.
project.ext.set("archivesBaseName", "${applicationId}-${versionName}-${versionCode}".toString()); 错误范围内使用了${versionName},
从您必须使用的 Android Gradle 插件的 1.1.0 版本开始
archivesBaseName = "yourOtherName"
而不是 project.ext.set("archivesBaseName", "yourOtherName") 在您的 build.gradle 中使其工作。
【讨论】:
archivesBaseName 存在一个错误,即fixed in version 1.1.2。 project.ext.set 现在又可以工作了。
以下代码在 v1.3.1 上对我来说非常有用,并且仅适用于 APK:
android {
defaultConfig {
archivesBaseName = "AnotherName"
同样,这适用于 android 插件 1.3.1(不是 1.3.0),但我们仍然无法重命名我们的应用程序 (APK) 和库 (AAR)。一个大问题,因为我们有 20 多个项目设置,我们锁定了部署的二进制文件的来源,而不是在每个子项目 build.gradle 中重复代码。
以下对我们有用:
在根 build.gradle 中定义以下方法(和插件):
ext.snapshotSuffix = "<sha>-<count>-SNAPSHOT"
ext.nextVersion = "patch"
apply plugin: 'com.cinnober.gradle.semver-git'
def renameArtifact(variant) {
variant.outputs.each { output ->
def fullName = output.outputFile.name
def projectName = fullName.substring(0, fullName.indexOf('-'))
output.outputFile = new File(
(String) output.outputFile.parent,
(String) output.outputFile.name.replace(projectName, "drivecx-${projectName}-${project.version}"))
}
}
应用程序使用:
apply plugin: 'com.android.application'
android {
...
// Rename all output artifacts to include version information
applicationVariants.all { variant ->
renameArtifact(variant)
}
}
供图书馆使用:
apply plugin: 'com.android.library'
android {
...
// Rename all output artifacts to include version information
libraryVariants.all { variant ->
renameArtifact(variant)
}
}
现在您会得到一些非常棒的文件,它们具有通用前缀、项目名称、git-describe-wth-sha1-buildflavor 和扩展名。
旧示例:
androidauto-debug.apk
新示例:
drivecx-androidauto-0.2.1-d1436b7-193-SNAPSHOT-debug.apk
一个好处是它不会重命名未对齐的 apk。
【讨论】:
您也可以重命名子项目(不重命名目录),方法是将以下内容放在根settings.gradle:
rootProject.children.each {
it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
【讨论】: