Gradle警告:不推荐使用variant.getOutputFile()和variant.setOutputFile()

我在Android应用程序项目中使用以下简化的configuration。

android { compileSdkVersion 20 buildToolsVersion "20.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 20 versionCode 1 versionName "1.0.0" applicationVariants.all { variant -> def file = variant.outputFile def fileName = file.name.replace(".apk", "-" + versionName + ".apk") variant.outputFile = new File(file.parent, fileName) } } } 

现在我已经将Gradle插件更新到v.0.13.0,Gradle更新到了v.2.1。 出现以下警告:

 WARNING [Project: :MyApp] variant.getOutputFile() is deprecated. Call it on one of variant.getOutputs() instead. WARNING [Project: :MyApp] variant.setOutputFile() is deprecated. Call it on one of variant.getOutputs() instead. WARNING [Project: :MyApp] variant.getOutputFile() is deprecated. Call it on one of variant.getOutputs() instead. WARNING [Project: :MyApp] variant.setOutputFile() is deprecated. Call it on one of variant.getOutputs() instead. 

如何重写Groovy脚本来摆脱弃用警告

Solutions Collecting From Web of "Gradle警告:不推荐使用variant.getOutputFile()和variant.setOutputFile()"

根据Larry Schiefer的回答,您可以将脚本更改为如下所示:

 android { applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace('.apk', "-${versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } } } } 

完整的代码片段如下所示:

 // Customize generated apk's name with version number applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def manifestParser = new com.android.builder.core.DefaultManifestParser() def fileName = outputFile.name.replace(".apk", "-DEBUG-" + manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) + ".apk") output.outputFile = new File(outputFile.parent, fileName) } } } 

在最新的Android Gradle插件中,构build变体输出API已经发生了变化。 它现在允许多个输出文件(或目录),这就是为什么这个方法被标记为不推荐使用。 如果使用variant.outputs ,它会给你一个Collection ,然后迭代并获取每个输出文件。 您必须validation文件对象是否为非null,并且它符合您的条件(例如具有“.apk”扩展名)。然后,您可以创build一个新的File对象,并将其添加到集合中的输出。

Android插件的Gradle 3.0.0

你可以这样使用

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

你可以得到更多的function和Android的文档中的新变化https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#update_gradle