重新命名输出文件在新的Android插件3.0.0-alpha1

我在前面的gradle插件中使用它,它工作正常。

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

随着最近更新到3.0.0-alpha1它显示错误。

我阅读链接https://developer.android.com/studio/preview/features/new-android-plugin-migration.html,但无法find确切的错误来源。

有没有修复这个我失踪?

Solutions Collecting From Web of "重新命名输出文件在新的Android插件3.0.0-alpha1"

要更改APK名称,可以将其更改为:

 android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "companyName-app-v${variant.versionName}.apk" } } 

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

资源

似乎这个问题已经解决了,答案是目前还不支持,但是会引入新的API。

我在加那利3号,这是为我工作。 但是看到ABI名字的混乱? 我无法弄清楚新结构中ABI的位置,所以从默认名称(糟糕)中提取出来。 如果有人知道更好的方式来获得ABI的名字,当使用拆分(更改每个ABI versionCode),我很乐意听到。 也许是时候发布一个单独的问题。 无论如何,这适用于prod APK构build。

 def ext = rootProject.extensions.getByName("ext") ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'x86': 8] android.applicationVariants.all { variant -> if (variant.buildType.name != "debug") { variant.outputs.all { vOutput -> // there has got to be a better way to get the ABI name than this kludge def nameTokens = vOutput.name.split("-"); def abiName = nameTokens[1] abiName = nameTokens[2].contains("v7a") ? abiName + "-v7a" : abiName def versionNumber = ext.versionCodes.get(abiName) * 1000 + variant.versionCode def newApkName = "${getAppName()}-${variant.flavorName}-${variant.versionName}-${versionNumber}.apk" outputFileName = newApkName } } } 

版本代码1的版本“1.0.0”,armeabi-v7a和x86 ABI分别产生的“Build APKs”

 AppName-Prod-1.0.0-2001.apk AppName-Prod-1.0.0-8001.apk 

在新的设置中,我找不到任何有关ABI名称的文档。 旧的方式让他们显然是破:-)