Aviso de Gradle: variant.getOutputFile () y variant.setOutputFile () están obsoletos

Estoy utilizando 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 he actualizado el plug-in Gradle a v.0.13.0 y Gradle a v.2.1. Aparecen las siguientes advertencias:

 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 volver a escribir el script de Groovy para deshacerme de las advertencias de depreciación?

Sobre la base de la respuesta de Larry Schiefer puede cambiar el guión 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 parece el siguiente:

 // 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 construcció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 utiliza variant.outputs en variant.outputs lugar, le dará una Collection que puede iterar más y obtener cada archivo de salida. Deberá verificar que el objeto de archivo no es nulo y que coincide con sus criterios (por ejemplo, tiene una extensión .apk). A continuación, puede crear un nuevo objeto de File y agregarlo a la salida dentro de la colección.

  • Aplicar plugin: 'android' o aplicar plugin: 'com.android.application'
  • Construya androide con gradle, substituya la cadena cada sabor del producto
  • Cómo agregar colecciones de apache commons en Android Studio (Gradle)
  • Proguard gradle debug build pero no las pruebas
  • ¿Cómo gradle maneja multi módulos con diferentes versiones de la biblioteca de soporte v4?
  • ¿Cómo puedo conseguir que mi app.iml se mantenga estable en la reconstrucción del proyecto Android Studio?
  • Gradle no genera una cadena con comillas
  • Android - Errores de entrada de zip de Proguard duplicados - Biblioteca de soporte de Android
  • No se puede firmar la versión APK -: app: shrinkReleaseMultiDexComponents FALLED
  • Cómo incluir dependencias de maven remoto en una biblioteca de Android
  • ¿Cómo configurar los tipos de construcción frente a los sabores del producto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.