Gradle advertencia: variante.getOutputFile () y variant.setOutputFile() está obsoleto


Estoy utilizando la siguiente configuración simplificada en un proyecto de aplicación 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 actualizé el plug-in de 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 reescribir el script Groovy para deshacerme de las advertencias de obsolescencia?

Author: JJD, 2014-09-23

4 answers

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)
            }
        }
    }
}
 59
Author: Thorbear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:19:20

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)
        }
    }
}
 16
Author: Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-24 08:07:29

La API de salida de la 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 su lugar, le dará un Collection que luego puede iterar y obtener cada archivo de salida. Tendrás que verificar que el objeto file no es null y que coincide con tus criterios (por ejemplo, tiene un '.apk " extensión.) Luego puede crear un nuevo objeto File y agregarlo a la salida dentro del colección.

 8
Author: Larry Schiefer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-23 15:41:14

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 características 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

 4
Author: inderisonline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-27 06:22:35