Android Gradle build:重命名apk

时间:2013-05-28 08:36:07

标签: android build gradle android-gradle

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

5 个答案:

答案 0 :(得分:26)

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

  

按需创建属性(a.k.a.动态属性)   已弃用,计划在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中所述。

更新(Gradle插件1.1.0)

Android Gradle插件版本1.1.0引入了一个错误archivesBaseNameas friederbluemle noted。但幸运的是,这已被修复(version 1.1.2)。

答案 1 :(得分:21)

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

project.archivesBaseName = "AnotherName";

答案 2 :(得分:10)

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

archivesBaseName = "yourOtherName"

而不是project.ext.set("archivesBaseName", "yourOtherName")中的build.gradle才能使其正常工作。

答案 3 :(得分:1)

以下代码在v1.3.1和仅适用于APK时非常适合我:

android {
    defaultConfig {
        archivesBaseName = "AnotherName"

同样,这适用于android插件1.3.1(不是1.3.0),但我们仍然无法重命名我们的应用程序(APK)和libs(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

奖励是它不会重命名未对齐的apks。

答案 4 :(得分:0)

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

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}