web-dev-qa-db-fra.com

Avertissement Gradle: variant.getOutputFile () et variant.setOutputFile () sont obsolètes

J'utilise la configuration simplifiée suivante dans un projet d'application 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)
        }
    }    
}

Maintenant que j'ai mis à jour le plug-in Gradle vers v.0.13.0 et Gradle vers v.2.1. les avertissements suivants apparaissent:

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. 

Comment puis-je réécrire le script Groovy pour se débarrasser des avertissements de dépréciation?

34
JJD

En s'appuyant sur la réponse de Larry Schiefer vous pouvez changer le script en quelque chose comme ceci:

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

L'extrait de code complet ressemble à celui-ci:

// 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
Thomas

L'API de sortie de la variante de génération a changé dans le dernier Android Gradle. Elle autorise désormais plusieurs fichiers de sortie (ou répertoires), c'est pourquoi cette méthode a été marquée comme obsolète. Si vous utilisez variant.outputs à la place, il vous donnera un Collection que vous pourrez ensuite parcourir et obtenir chaque fichier de sortie. Vous devrez vérifier que l'objet fichier n'est pas nul et qu'il correspond à vos critères (par exemple, a une extension ".apk".) Ensuite, vous pouvez créer un nouvel objet File et l'ajouter à la sortie dans la collection.

10
Larry Schiefer

Plugin Android pour Gradle 3.0.0

Vous pouvez utiliser comme ça

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

vous pouvez en savoir plus sur les fonctionnalités et les nouvelles modifications dans Android https://developer.Android.com/studio/build/gradle-plugin-3-0-0- migration.html # update_gradle

4
inder