android - warning - gradle configuration compile is obsolete and has been replaced with implementation
Advertencia de Gradle: variant.getOutputFile() y variant.setOutputFile() están en desuso (4)
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)
}
}
}
}
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
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 compilació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.