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


199

Soudain, lors de la synchronisation de Gradle, j'obtiens cette erreur:

AVERTISSEMENT: l'API 'variant.getJavaCompile ()' est obsolète et a été remplacée par 'variant.getJavaCompileProvider ()'. Il sera supprimé fin 2019. Pour plus d'informations, voir https://d.android.com/r/tools/task-configuration-avoidance Modules concernés: app

J'ai ceci build.gradlepour le module d'application:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.2"
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "..."
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        versionNameSuffix = version_suffix

        [...]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            [...]
        }
        debug {
            [...]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
    implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:preference-v7:28.0.0"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.google.android.material:material:1.0.0-rc02'

    [...]
}

Je peux compiler correctement l'application, mais c'est un peu gênant, et comme je le vois, quelque chose cessera de fonctionner à la fin de 2019. Avez-vous des idées sur ce que c'est et comment le résoudre?


Tout comme un léger choix, un avertissement n'est pas une erreur. Même avec un avertissement, votre code devrait être compilé de la même manière, alors qu'une erreur entraînerait l'échec de votre build. Il s'agit simplement d'un avis avancé que la façon actuelle de faire les choses pourrait ne pas fonctionner à l'avenir et sera probablement corrigée avec les mises à jour du plugin. Avez-vous également pris le temps de lire la page liée dans l'erreur ?
Michael Dodd

2
Mon sentiment personnel est que cela est dû à un plugin qui n'a pas encore été mis à jour pour utiliser la nouvelle API Gradle, qui devrait se réparer à temps.
Michael Dodd



Réponses:


81

Ce problème est maintenant résolu avec la mise à jour Fabric Gradle version 1.30.0:

Communiqué de mise à jour: 19 mars 2019

Veuillez consulter ce lien: https://docs.fabric.io/android/changelog.html#march-15-2019

Veuillez mettre à jour votre dépendance de chemin de classe au niveau du projet Gradle:

buildscript {
    // ... repositories, etc. ...

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}

2
C'est aussi une bonne réponse, le moyen facile de résoudre le problème rencontré.
M.Noman

5
Je l'ai maintenant classpath 'io.fabric.tools:gradle:1.29.0'. Que devrais-je faire?
Faizan Mubasher

7
@FaizanMubasher essayez de rétrograder votre service google à 4.2
Infinite Loops

4
La suggestion de @InfiniteLoops de revenir à 4.2 semble fonctionner.
HondaGuy

1
Tissu mis à niveau à 1.31.0 et services Google rétrogradés à 4.2.0 Résolu
Mukeshkumar S

94

Je fais face à ce problème après la mise à jour vers 3.3.0

Si vous ne faites pas les états d'erreur dans le fichier gradle, c'est un plugin qui n'a toujours pas été mis à jour vers la nouvelle API qui provoque cela. Pour savoir de quel plug-in il s'agit, procédez comme suit (comme expliqué dans "Meilleures informations de débogage lors de l'utilisation d'une API obsolète" de l'annonce 3.3.0 ):

  • Ajoutez 'android.debug.obsoleteApi = true' à votre fichier gradle.properties qui enregistrera l'erreur avec plus de détails
  • Réessayez et lisez les détails du journal. Il y aura une trace de plugin "problématique"
  • Lorsque vous vous identifiez, essayez de le désactiver et voyez si le problème a disparu, juste pour être sûr
  • allez à la page github du plugin et créez un problème qui contiendra un journal détaillé et une description claire, afin que vous aidiez les développeurs à le résoudre plus rapidement pour tout le monde
  • soyez patient pendant qu'ils le réparent, ou vous le réparez et créez des relations publiques pour les développeurs

J'espère que cela aide les autres


4
C'est à mon avis la réponse la plus générale et la plus utile. Dans mon cas, cet avertissement est émis à cause de l'utilisation du plugin Groovy-Android (pour les tests Spock).
AutonomousApps

2
C'est la bonne réponse. Qui a voté pour la mise à jour de la version Gradle?
Pier Betos

Cela a également fonctionné pour moi, y a-t-il des nouveautés sur cette question? Pendant ce temps, nous ne supposons rien que nous puissions faire, n'est-ce pas?
Billyjoker

1
Très utile. Dans mon cas, c'était le plugin Hugo.
AlvaroSantisteban

6
après l'ajout android.debug.obsoleteApi=true, Pour lire les détails enregistrés: Allez dans l'onglet Build en bas et dans la fenêtre "Build Output", cliquez sur "Toggle View". Lorsque vous cliquez sur le joli, les couleurs disparaissent, faites défiler vers le haut où il est dit WARNING: API 'variant.getAssemble()' is obsolete. Ensuite, en dessous, cela montre REASON: Called from: ... dans mon cas, c'était dû à medium.com/@xabaras/…
Quelqu'un Quelque Part

62

Dans mon cas, cela a été causé par les services gms 4.3.0. J'ai donc dû le changer en:

com.google.gms:google-services:4.2.0

J'ai trouvé cela en exécutant:

gradlew sync -Pandroid.debug.obsoleteApi=true

dans le terminal. Accédez à la vue -> fenêtres d'outils -> Terminal dans Android Studio.


dans Ubuntu, incapable d'exécuter cette commande comme je peux le faire dans Ubuntu. demandant d'installer le package et j'installe ce package, je ne suis toujours pas en mesure d'exécuter. Est-ce qu'il y a un autre moyen?
Vasudev Vyas

3
Je viens de changer mon service google gms en 4.2 et l'avertissement a disparu grâce.
Infinite Loops

2
@VasudevVyas si dans Android Studio, ajoutez simplement ./avant la commande, c'est-à-dire si le terminal est défini à la racine de votre projet Android. Sinon, vous devrez cd à la racine du projet.
Racu

3
Pourquoi devrais-je rétrograder la dépendance aux services Google. Ce n'est pas une solution.
Ahamadullah Saikat

4
@AhamadullahSaikat, cela sera probablement corrigé dans les futures versions. Ensuite, vous pouvez le mettre à niveau à nouveau. Il s'agit d'une solution de contournement jusqu'à ce qu'elle soit corrigée par Google.
Numan Karaaslan

34

Ceci n'est qu'un avertissement et il sera probablement corrigé avant 2019 avec les mises à jour du plugin, alors ne vous inquiétez pas. Je vous recommande d'utiliser des versions compatibles de vos plugins et gradle.

Vous pouvez vérifier la version de votre plugin et la version gradle ici pour une meilleure expérience et performance.

https://developer.android.com/studio/releases/gradle-plugin

Essayez d'utiliser les versions stables pour un code fluide et sans avertissement / erreur.


24
C'est en fait plus insidieux qu'un simple avertissement - il affecte l'éditeur de code et vous empêche de rechercher des références aux classes.
IgorGanapolsky

ce n'est pas seulement dans les éditions dev / canary, également dans stable, mais je pense que c'est un avertissement qui sera corrigé avec les nouvelles mises à jour.
Marlon López

1
@HarshilShah il n'y a aucune garantie que le plugin problématique sera jamais mis à jour. Les développeurs pourraient même ne jamais connaître le problème. Pour cette raison, le mieux que nous pouvons faire est le suivant: stackoverflow.com/a/54213973/304270
Ewoks

25

J'ai également rencontré le même problème. Et après avoir cherché pendant un certain temps, j'ai compris que l'avertissement se produisait en raison de l'utilisation de la dernière version du google-servicesplugin (version 4.3.0). J'utilisais d'ailleurs ce plugin pour les fonctionnalités Firebase dans mon application. Tout ce que j'ai fait, c'est de rétrograder mon google-servicesplugin dans buildscript dans le fichier de niveau build.gradle (Project) comme suit:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}

1
J'ai fait cette solution et l'erreur a disparu. Merci
wesley franks

1
Travail! Merci
Сергей

3
J'ai mis à jour vers 4.3.2 sans que cet avertissement ne revienne.
tagy22

10

Changez votre version des services Google de votre build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}

1
Je suis sur 4.3.0 et le problème est toujours là.
wesley franks

@wesleyfranks pareil. Mais si je passe à 4.2.0, je n'ai plus de problème ...
diAz

Je suis sur 4.3.1 et le problème est toujours là
pvalle

8

Il s'agit d'un avertissement craché par les outils de construction pour deux raisons.
1. L'un des plugins s'appuie sur Task au lieu de TaskProvider, il n'y a rien que nous puissions faire.
2. Vous avez configuré l'utilisation de la tâche, alors qu'elle prend en charge TaskProvider.

WARNING: API 'variant.getGenerateBuildConfig()' is obsolete and has been replaced with 'variant.getGenerateBuildConfigProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

Recherchez les extraits comme ci-dessous et mettez à jour.

android {
    <library|application>Variants.all { variant ->
        /* Disable Generating Build config */
        // variant.generateBuildConfig.enabled = true // <- Deprecated
        variant.generateBuildConfigProvider.configure {
            it.enabled = true // Replacement
        }
    }
}

De même, recherchez les utilisations de 'variant.getJavaCompile()'ou 'variant.javaCompile', 'variant.getMergeResources()'ou 'variant.mergeResources'. Remplacez comme ci-dessus.

Plus d'informations sur Évitement de la configuration des tâches


1
Cela se produit dans tous les projets Android Studio. Rien à voir avec les extraits que vous avez mentionnés ...
IgorGanapolsky

2
@IgorGanapolsky, cela se produirait également dans le terminal. Essayez d'exécuter ./gradlew. Cela n'a rien à voir avec AS, c'est dans les outils de build. Mettre à niveau / rétrograder com.android.tools.build:gradle:3.2.0et exécuter ./gradlew. Cela ne viendra pas.
VenomVendor

N'a pas trouvé variant.generateBuildConfig.enableddans mon projet. Je reçois toujours l'avertissement ci-dessus
kbsbng

N'a pas trouvé variant.generateBuildConfig.enableddans mon projet. Je reçois toujours l'avertissement ci-dessus
kbsbng

@VenomVendor C'est la réponse la plus utile selon mon problème, pouvez-vous toujours aider avec cet extrait de code? codeshare.io/G6ogzk
Raghav Satyadev


5

1) Ajoutez android.debug.obsoleteApi=trueà votre gradle.properties. Il vous montrera quels modules sont affectés par votre journal d'avertissement.

2) Mettez à jour ces fonctions obsolètes.

  • variant.javaCompile à variant.javaCompileProvider

  • variant.javaCompile.destinationDir à variant.javaCompileProvider.get().destinationDir


5

La mise à niveau de la version Kotlin ( Plugin et stdLib ) vers 1.3.1 a résolu cet avertissement dans mon cas. Mettez à jour la version Kotlin dans l'ensemble du projet en remplaçant la version Kotlin existante par:

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10' ou '1.3.50'
Pouchkine

c'était mon problème. avant était ext.kotlin_version = '1.2.71'.. Changé pour la réponse ci-dessus et cela a bien fonctionné! - i supprimé mes /androidet /iosdossiers, puis couru flutter create .pour reconstruire l'application Flutter et placé ext.kotlin_version = '1.2.71'dans monbuild.gradle
MaylorTaylor

4

Revenez de classpath 'com.android.tools.build:gradle:3.3.0-alpha13' à classpath 'com.android.tools.build:gradle:3.2.0'

cela a fonctionné pour moi


6
c'est juste une solution de contournement temporelle car vous ne pouvez pas rester indéfiniment sur 3.2.0, en particulier lorsque la version finale 3.3.0 est déjà sortie
Ewoks

déclasser la version gradle n'est pas une option! .
Jorgesys

4

Mettez à jour le plugin Fabric vers le dernier fichier Gradle au niveau du projet (pas au niveau de l'application). Dans mon cas, cette ligne a résolu le problème

classpath 'io.fabric.tools:gradle:1.25.4'

à

classpath 'io.fabric.tools:gradle:1.29.0'

3

Dans mon cas

build.gradle(Project)

était

ext.kotlin_version = '1.2.71'

mis à jour pour

ext.kotlin_version = '1.3.0'

semble que le problème a disparu pour l'instant


2

Dans mon cas, j'ai dû commenter le com.google.firebase.firebase-crashplugin:

apply plugin: 'com.android.application'
// apply plugin: 'com.google.firebase.firebase-crash' <== this plugin causes the error

C'est un bug depuis Android Studio 3.3.0


2
Pour moi, cela arrive parce que j'utiliseoss-licenses-plugin
Mikhail

2

Mise à jour de gradle à gradle: 3.3.0

La tâche par défaut d'assemblage ne s'applique qu'aux variantes normales. Ajoutez également des variantes de test.

android.testVariants.all { variant ->
    tasks.getByName('assemble').dependsOn variant.getAssembleProvider()
}

commenter également appliquer le tissu

//apply plugin: 'io.fabric'

1
Quelles sont les variantes "normales"? À quoi sert le code android.testVariants.all {...} (à quoi sert-il)? D'où vient ce texte cité? Pouvez-vous mettre à jour la réponse?
Ewoks du

J'ai changé le chemin du manifeste pour les chrashlytiques crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI

1
Les variantes normales @Ewoks sont des variantes de build (débogage / libération) qui utilisent un ensemble spécifique de règles .. vous pouvez définir de nombreuses variantes différentes (saveurs).
Krste Moskov

Je connais les saveurs mais je ne suis pas sûr que cela s'applique ici et comment cela est lié. C'est pourquoi j'ai demandé si vous pouvez mettre à jour la réponse en clarifiant quelle source avez-vous citée et pour corriger le formatage (supposez que vous avez mélangé le formatage du code avec le commentaire)
Ewoks

1
Il n'y a aucune garantie que le tissu soit à l'origine du problème. En fait, avec cette "solution", nous n'avons aucune idée où était le problème. De plus, il n'y a aucune explication pourquoi faire quoi que ce soit avec testVariants et comment est-ce lié?!? C'est pourquoi la réponse originale de @KrsteMoskov est trompeuse et s'applique uniquement à un cas d'utilisation spécifique si elle résout quoi que ce soit. Pour vous aider à "embarquer", j'ai formaté votre réponse correctement et laissé le contenu tel que vous l'avez écrit, afin que les autres puissent décider si cela leur est utile
Ewoks

2

Lorsque le plugin détecte que vous utilisez une API qui n'est plus prise en charge, il peut désormais fournir des informations plus détaillées pour vous aider à déterminer où cette API est utilisée. Pour voir les informations supplémentaires, vous devez inclure les éléments suivants dans le fichier gradle.properties de votre projet:

android.debug.obsoleteApi=true

où construire, gradle ou app.gradle
PN Jithish

recherchez simplement le fichier gradle.properties dans votre projet
Hamed safari


2

Migrez votre projet vers androidX.

les dépendances sont mises à niveau vers androidX. donc si vous souhaitez utiliser le contenu androidX, migrez votre projet vers androidX.

Avec Android Studio 3.2 et supérieur, vous pouvez migrer rapidement un projet existant pour utiliser AndroidX en sélectionnant Refactor> Migrer vers AndroidX dans la barre de menus.

La rétrogradation des dépendances peut résoudre votre problème cette fois - mais n'est pas recommandé


1
J'ai AndroidX et je reçois toujours le message.
Jorgesys

1

Cela a résolu mon problème. Tout ce que j'avais à faire était de rétrograder mon plugin google-services dans buildscript dans le fichier de niveau build.gradle (Project) comme suit

buildscript{
     dependencies {
        // From =>
        classpath 'com.google.gms:google-services:4.3.0'
        // To =>
        classpath 'com.google.gms:google-services:4.2.0'
        // Add dependency
        classpath 'io.fabric.tools:gradle:1.28.1'
    }
}

0

Voici une solution de contournement temporaire, si vous utilisez la salle, passez simplement à la version 1.1.0 ou supérieure

implementation "android.arch.persistence.room:runtime:1.1.0"

il supprime cet avertissement pour moi.


oui, lorsque je mets à jour la version, ces avertissements ont disparu
Sergio KS

0

garder votre projet (pas l'application) Build.gradle dependncies code de version de chemin de classe est nouveau

 dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0-beta01'
    classpath 'com.novoda:bintray-release:0.8.1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

0

C'est une question populaire. Si vous n'utilisez pas ces méthodes, la solution met à jour les bibliothèques. Veuillez mettre à jour votre version de kotlin et toutes vos dépendances comme fabric , protobuf etc. Si vous êtes sûr d'avoir tout mis à jour, essayez de demander à l'auteur de la bibliothèque.


0

La mise à niveau du plugin protobuf-gradle vers la version 0.8.10 a résolu mon problème. Remplacez votre protobuf existant par

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'

0

Cela est principalement dû aux bibliothèques obsolètes. Pour rechercher manuellement les nouvelles mises à jour, vous devez accéder à

Analyser> "Exécuter l'inspection par nom"

exécuter l'inspection par nom résultat android

Cela devrait suffire. Une autre option consiste à exécuter une mise à jour de la dépendance Gradle à l'aide de

./gradlew dependencyUpdates

qui produira un rapport comme celui-ci:

:dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - com.github.ben-manes:gradle-versions-plugin:0.15.0

The following dependencies have later milestone versions:
 - com.google.auto.value:auto-value [1.4 -> 1.4.1]
 - com.google.errorprone:error_prone_core [2.0.19 -> 2.0.21]
 - com.google.guava:guava [21.0 -> 23.0-rc1]
 - net.ltgt.gradle:gradle-apt-plugin [0.9 -> 0.10]
 - net.ltgt.gradle:gradle-errorprone-plugin [0.0.10 -> 0.0.11]

...

0

la mise à niveau des services google au niveau du projet a build.gradlerésolu mon problème.

Après la mise à niveau:

dependencies {
    ...
    classpath 'com.google.gms:google-services:4.3.2'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

0

J'ai eu le même problème et il a été résolu en définissant la version du plugin kotlin gradle dans le fichier build.gradle.

change ça

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

à

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50{or latest version}"

0

Dans mon cas, j'ai suivi cela . Résumé, au niveau de l'application Gradle: changez ceci:

variant.outputs.all { output ->
    variant.assemble.doLast {
        ....
    }
}

à

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.