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

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

还有一个解决scheme可以在0.14.x以前版本的插件中使用,但是他们改变了一些数据模型,所以不能工作了,而且我不知道如何解决这个问题。 据我所知,下面的代码块应该工作,但最后set()调用似乎没有效果。 它不会抛出一个错误,但是这个值也不会被replace。

 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) } 

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

Solutions Collecting From Web of "如何使用0.14+版本的Android Gradle插件向我的APK文件添加版本号?"

现在您需要多一个循环,每个变体可以有多个输出:

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

我修改了一下你的答案:

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

单词“-assistant”在variables名称前面的文件名中。 例子我有3个变种

斧,BX,CX

文件名在我的例子中:

  • 该助理的-AX-debug.apk
  • 该助理的-BX-debug.apk
  • 该助理的-CX-debug.apk

我想要在版本号之前的版本号。 所以,以上他们现在被称为

  • 该助理的-1.0-AX-debug.apk
  • 该助理的-1.0-BX-debug.apk
  • 该助理的-1.0-CX-debug.apk

所以,gradle build会在我们的文件名中添加变体名称。

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

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

希望这有助于someoen。

使用插件版本3.0.0或更高版本时,您必须稍作更改:

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

3.0.0插件迁移文档说:

如果使用each()遍历变体对象,则需要开始使用all()。 这是因为each()仅在configuration时间内遍历已经存在的对象 – 但是这些对象在configuration时不存在于新模型中。 但是,all()适应新模型,通过在执行过程中添加对象来拾取对象。