Advertencia de Gradle: variant.getOutputFile () y variant.setOutputFile () están en desuso

Estoy usando la siguiente configuración simplificada en un proyecto de aplicación de Android.

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

Ahora que actualicé el plug-in de Gradle a v.0.13.0 y Gradle a v.2.1. las siguientes advertencias aparecen:

 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. 

¿Cómo puedo reescribir el script de Groovy para deshacerme de las advertencias de desaprobación?

Basándose en la respuesta de Larry Schiefer , puede cambiar el script a algo como esto:

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

El fragmento de código completo se parece a ese:

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

La API de salida de variante de comstackción ha cambiado en el último complemento de Android Gradle. Ahora permite múltiples archivos de salida (o directorios), por lo que este método ha sido marcado como obsoleto. Si usa variant.outputs en variant.outputs lugar, le dará una Collection , puede iterar y obtener cada archivo de salida. Deberá verificar que el objeto del archivo no sea nulo y que coincida con sus criterios (por ejemplo, tiene una extensión ‘.apk’). Luego puede crear un nuevo objeto File y agregarlo al resultado dentro de la colección.

Complemento de Android para Gradle 3.0.0

Puedes usar así

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

puede obtener más información sobre las funciones y los nuevos cambios en la documentación de Android https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#update_gradle