如何使用 0.14+ 版本的安卓 Gradle 插件向我的 APK 文件添加版本号



我想将versionName包含在我的Android版本的输出APK文件的名称中。

还有另一个答案适用于 0.14.x 之前的插件版本,但他们更改了一些数据模型,因此不再有效,我不知道如何解决它。 据我所知,下面的代码块应该可以工作,但最后set()调用似乎没有效果。 它不会引发错误,但也不会替换该值。

buildTypes {
    applicationVariants.all { variant ->
        def oldFile = variant.outputs.outputFile.get(0)
        def newFile = new File(
                oldFile.parent,
                oldFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
        variant.outputs.outputFile.set(0, newFile)
}

有人可以帮助我解决这个问题吗?

现在每个变体都可以有多个输出,因此还需要一个循环:

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
}

使用 3.0.0 或更高版本的插件时,您必须进行轻微更改:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = "myapp-${variant.versionName}-${variant.name}.apk"
    }
}

3.0.0 插件迁移文档说:

如果使用 each() 遍历变量对象,则需要开始使用 all()。这是因为 each() 只遍历在配置时已经存在的对象 - 但这些对象在新模型的配置时不存在。但是,all() 通过在执行期间添加对象时拾取对象来适应新模型。

我复制了你的答案并进行了一些修改:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(
                output.outputFile.parent,
                output.outputFile.name.replace("-assistant", "-assistant-${versionName}"))
    }
}

单词"-assistant"在我的文件名中变体名称之前。 示例我有 3 个变体

斧头、斧

头、斧头、斧头

文件名在我的示例中:

  • 助手 AX 调试.apk
  • 助手-bx-debug.apk
  • 助手-CX调试.apk

我希望在变体名称之前有版本号。 因此,在上述之后,它们现在被称为

  • 助手-1.0-ax-调试.apk
  • 助手-1.0-bx-调试.apk
  • 助手-1.0-CX 调试.apk

因此,gradle build正在为我们在文件名中添加变体名称。

${versionName} 只是 "1.0"。 我注意到,无论是 ${versionName} 还是 ${variant.versionName},它们都产生了相同的结果。

也就是说,如果有 defaultConfig { versionName "a.b" } 和 productFlavors { ax { versionName "1.0" } },则上面代码循环中的 $versionName$variant.versionName 将包含变体版本名称 "1.0"

希望这对某人有所帮助。

最新更新