65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Android 中更改默认的 apk 名称

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2016年4月10日

CPOL

3分钟阅读

viewsIcon

25547

使用 Gradle 插件脚本更改 Android 应用程序的 generated->output 目录中的默认 APK 名称。

引言

如果您从事过 Android 应用程序开发,那么您一定知道 Android 中生成的 APK 文件的默认命名约定。 类似于 app-flavor1-flavor2....-debug.apk。 在调试应用程序时这没有问题,但是当我们必须与测试人员或分析师共享 APK 文件时,我们通常会给它一个有意义的名称。 这个技巧/窍门有助于通过 Gradle 中的脚本插件自动化该过程。 实际上,这并不一定需要脚本插件,也可以通过修改模块的 Gradle 文件来完成。 此技巧还可以使读者了解脚本插件以及 Gradle 提供的强大的可扩展性。

背景

我假设您了解 Android 开发、产品风味和 Gradle 基础知识。 快速回顾,您可以浏览这个。 下面的代码示例适用于 Android Studio IDE,不得在 Eclipse IDE 中使用。

Using the Code

Gradle 中的插件可以分为两类 - 二进制插件和脚本插件。 二进制插件是我们在 Android Gradle 文件中的 apply plugin "..." 语句中看到的插件。 例如,在 Android 中,我们总是看到 "apply plugin 'com.android.application'"。 另一方面,脚本插件是可以包含在我们的 Android 应用程序的标准 Gradle 文件中的单独 Gradle 文件。 脚本插件可以使用语法 "apply from '../newgradle.gradle'" 应用。

以下是我喜欢称之为 apkbeautifier.gradle 的 Gradle 文件的内容。 它保存在 Android 项目的根目录中。

android.applicationVariants.all { variant ->
    ;
    def appName
    //Check if an appName property is supplied;
    //if not use the name of the parent folder.
    if (project.hasProperty("applicationName")) {
        appName = applicationName
    } else {
        appName = parent.name
    }

    variant.outputs.each { output ->
        ;
        def newApkName
        if (output.zipAlign) {
            newApkName = "${appName}-${variant.name}.apk"
            //newApkName = "${appName}-${output.baseName}-${variant.versionName}.apk"
            output.outputFile = new File(output.outputFile.parent, newApkName)
        }
    }
}

此代码基本上遍历 Android 应用程序的所有构建变体,并为输出文件指定一个自定义名称,在本例中为 APK 文件。 它首先检查是否从 Android 项目的 gradle.properties 中提供了任何名为 "appName" 的属性(如:appName=myApp),如果没有,它只选择根目录名称。 然后,它使用 apkName 变量,使用上面定义的逻辑为输出 APK 文件命名。

现在我们的脚本插件已准备就绪,并命名为 apkbeautifier.gradle。 但我们还没有完成。 我们还没有在任何地方应用此插件。 我们需要在 Android 项目的标准 Gradle 文件中应用此插件。 在您应用程序模块的 build.gradle 文件中,只需添加此语句(在其他 apply 语句中):

apply from: "../apkbeautifier.gradle"

上面的语句假定根项目文件夹中存在 *apkbeautifier* 文件,如果您希望将脚本插件保留在任何其他位置,只需在上面的语句中添加该文件的相对路径即可。

你完成了。 执行 Gradle 同步,然后像往常一样运行和调试您的应用程序。 在模块的生成构建目录中打开 outputs 文件夹,您可以看到更改后的 APK 名称。

关注点

请注意代码的 if 块内注释掉的语句。 还有一个额外的版本名称属性用于命名 APK。 你也可以尝试一下。 但如果您的版本名称更改过于频繁,我不建议使用它。 Android Studio 会缓存 APK 名称,如果版本更改频繁,APK 名称也会更改,您可能会遇到类似 "apk file myApp-flavor1Flavor2-1.2.3.55895 not found" 的错误。

如果您看到此错误,只需注释掉 apply from 语句,执行 Gradle 同步,然后取消注释并再次同步。

历史

  • 1.0 - Kaushal Dhruw 的第一个版本
© . All rights reserved.