前段时间从AS 2.4到AS 3.0 Beta版本的时候,由于Gradle升级了,导致我原有的文件配置代码没法正常的使用。这两天又遇到这个问题了。所以记录一下。
以前应该都是这么写的:
applicationVariants.all { variant -\>
variant.outputs.all { output -\>
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('release.apk')) {
def fileName = “YourApp_${defaultConfig.versionCode}_v${defaultConfig.versionName}.apk"
// output.outputFile = new File(outputFile.parent, fileName)
// def fileName = outputFile.name.replace("app", "xx00_${defaultConfig.versionCode}")
outputFileName = new File(outputFile.parent, fileName)
}
if (outputFile != null && outputFile.name.endsWith('release-unsigned.apk')) {
def fileName = “YourApp_${defaultConfig.versionCode}_v${defaultConfig.versionName}_unsigned.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
但是这样在新版本的Gradle里面会报错,Like this。按照底下答案给的Ref,我找到了,官方的文档,实测使用官方的文档解决了我的问题。
// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant -\>
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
上面需要注意将each -> all,然后下面的outputFileName就原样的输出就可以了。
网友评论