我在之前的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链接,但无法找到确切的错误来源。
我有什么问题可以修复吗?
答案 0 :(得分:17)
要更改APK名称,您可以将其更改为:
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "companyName-app-v${variant.versionName}.apk"
}
}
如果使用each()迭代变量对象,则需要 开始使用all()。那是因为each()只遍历了 在配置期间已经存在的对象 - 但那些 配置时,对象在新模型中不存在。然而, all()通过在添加对象时拾取对象来适应新模型 执行期间。
答案 1 :(得分:2)
我在加那利3号,这对我有用。但是看看ABI名称的kludge?我无法弄清楚在新结构中获取ABI的位置,因此将其从默认名称(sucks)中提取出来。如果有人知道在使用分割时获得ABI名称的更好方法(更改每个ABI的versionCode),我很乐意听到。也许是时候发一个单独的问题了。无论如何,这适用于prod APK版本。
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
}
}
}
从"构建APK"生成的结果文件名对于versionCode 1,versionName" 1.0.0"分别使用armeabi-v7a和x86 ABI:
AppName-Prod-1.0.0-2001.apk
AppName-Prod-1.0.0-8001.apk
我无法在新设置中找到ABI名称的任何文档。得到它们的旧方法显然已被打破: - )
答案 2 :(得分:0)
似乎问题已经addressed,答案是目前不支持,但会为其引入新的API。