web-dev-qa-db-fra.com

variantOutput.getPackageApplication () est obsolète

avec Gradle 4.10.1 et le Android Gradle mis à jour vers 3.3.0, je reçois l'avertissement suivant:

AVERTISSEMENT: l'API 'variantOutput.getPackageApplication()' est obsolète et a été remplacée par 'variant.getPackageApplicationProvider()'.

la ligne, avec le contexte environnant (qui attribue les noms de fichiers de sortie par variante de build):

applicationVariants.all { variant ->
    variant.outputs.all { output ->

        if (variant.getBuildType().getName() in rootProject.archiveBuildTypes) {

            def buildType = variant.getBuildType().getName()
            if (variant.versionName != null) {

                def baseName = output.baseName.toLowerCase()
                String fileName = "${rootProject.name}_${variant.versionName}-${baseName}.apk"

                // this is the line:
                outputFileName = new File(output.outputFile.parent, fileName).getName()
            }
        }
    }
}

le guide de migration n'est pas trop utile; alors que le variant.outputs.all est peut-être en faute - vous n'avez aucune idée de ce qu'il faut remplacer - et le guide de migration fait référence aux tâches et non à la création de variantes. en désactivant File → Settings → Experimental → Gradle → Only sync the active variant, j'obtiens encore plus d'avertissements de dépréciation (le fait est qu'aucune de ces méthodes n'est appelée directement):

WARNING: API 'variant.getAssemble()' is obsolete and has been replaced with 'variant.getAssembleProvider()'.
WARNING: API 'variantOutput.getProcessResources()' is obsolete and has been replaced with 'variantOutput.getProcessResourcesProvider()'.
WARNING: API 'variantOutput.getProcessManifest()' is obsolete and has been replaced with 'variantOutput.getProcessManifestProvider()'.
WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
WARNING: API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.
WARNING: API 'variant.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.

Q: comment éviter ces avertissements de dépréciation en migrant vers la nouvelle API?

27
Martin Zeitler

Vous pouvez également utiliser une ancienne version de gradle. J'ai changé ma version gradle de 3.5.0 à 3.2.1 et cela a fonctionné . enter image description here

0
inspiredMichael

Une solution un peu moins douteuse:

def variant = findYourVariantSomehow()
def output = findCorrectOutputInVariant(variant)
def fileName = output.outputFileName

def fileDir = variant.packageApplicationProvider.get().outputDirectory.get()

def apkFile = file("$fileDir/$fileName")

source

0
Peter