19

如何调整我的 build.gradle 以更改 apk(s) 的最终基本名称?(不更改默认后缀)

4

5 回答 5

26

在 Gradle 1.8 上,project.archivesBaseName确实有效,但它给出了这样的抱怨:

按需创建属性(也称为动态属性)已被弃用,并计划在 Gradle 2.0 中删除。 有关替换动态属性的信息,请阅读 http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html 。不推荐使用的动态属性:“根项目'myapp'”上的“archivesBaseName”,值:“AnotherName”。

要消除警告(并避免您的构建在 Gradle 2.0 上中断),请使用以下命令:

project.ext.set("archivesBaseName", "AnotherName");

...按照ExtraPropertiesExtension 文档中的建议。

更新(Gradle 插件 1.1.0)

正如friederbluemle 所指出archivesBaseName的,Android Gradle 插件版本 1.1.0 引入了一个错误。但幸运的是,这已被修复(在版本 1.1.2中)。

于 2013-12-18T14:04:54.287 回答
23

我找到了一个非常简单的解决方案。apk 基本名称是archivesBaseName在项目中定义的属性。因此,以下行足以重命名 apk:

project.archivesBaseName = "AnotherName";
于 2013-05-28T14:19:23.767 回答
11

从 Android Gradle 插件的 1.1.0 版本开始,您必须使用

archivesBaseName = "yourOtherName"

而不是project.ext.set("archivesBaseName", "yourOtherName")在你build.gradle的让它工作。

于 2015-02-20T03:32:39.523 回答
2

下面的代码在 v1.3.1 和 APK 上对我来说非常有用:

android {
    defaultConfig {
        archivesBaseName = "AnotherName"

同样,这适用于 android 插件 1.3.1(不是 1.3.0),但我们仍然无法重命名我们的应用程序 (APK) 和库 (AAR)。一个大问题,因为我们有 20 多个项目设置,我们锁定了部署的二进制文件的来源,而不是在每个子项目 build.gradle 中重复代码。

以下对我们有用:

在 root 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。

于 2015-10-20T00:13:50.743 回答
0

您还可以通过将以下内容放在根目录中来重命名子项目(不重命名目录)settings.gradle

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
于 2016-03-25T21:06:16.700 回答