WARNUNG: Die API 'varianten.getJavaCompile ()' ist veraltet und wurde durch 'varianten.getJavaCompileProvider ()' ersetzt.


199

Beim Synchronisieren von Gradle wird plötzlich folgende Fehlermeldung angezeigt:

WARNUNG: Die API 'varianten.getJavaCompile ()' ist veraltet und wurde durch 'varianten.getJavaCompileProvider ()' ersetzt. Es wird Ende 2019 entfernt. Weitere Informationen finden Sie unter https://d.android.com/r/tools/task-configuration-avoidance Betroffene Module: App

Ich habe das build.gradlefür das App-Modul:

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'

    [...]
}

Ich kann die App korrekt kompilieren, aber es ist ein bisschen störend, und wie ich sehe, wird Ende 2019 etwas nicht mehr funktionieren. Irgendwelche Ideen, was es ist und wie man es löst?


Eine Warnung ist kein Fehler. Selbst mit einer Warnung sollte Ihr Code auf die gleiche Weise kompiliert werden, während ein Fehler dazu führen würde, dass Ihr Build fehlschlägt. Es ist nur eine Vorankündigung, dass die derzeitige Vorgehensweise in Zukunft möglicherweise nicht mehr funktioniert und wahrscheinlich mit Plugin-Updates behoben wird. Haben Sie sich auch die Zeit genommen, die im Fehler verlinkte Seite zu lesen ?
Michael Dodd

2
Mein persönliches Gefühl ist, dass es durch ein Plugin verursacht wird, das noch nicht aktualisiert wurde, um die neue Gradle-API zu verwenden, das sich rechtzeitig beheben sollte.
Michael Dodd



Antworten:


81

Dieses Problem wurde jetzt mit dem Update Fabric Gradle Version 1.30.0 behoben:

Update-Version: 19. März 2019

Bitte sehen Sie diesen Link: https://docs.fabric.io/android/changelog.html#march-15-2019

Bitte aktualisieren Sie Ihre Klassenpfadabhängigkeit in Gradle auf Projektebene:

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

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

2
Dies ist auch eine richtige Antwort, die einfache Möglichkeit, das Problem zu lösen.
M.Noman

5
Ich habe jetzt classpath 'io.fabric.tools:gradle:1.29.0'. Was soll ich machen?
Faizan Mubasher

7
@FaizanMubasher versuchen Sie, Ihren Google-Dienst auf 4.2
Infinite Loops

4
Der Vorschlag von @InfiniteLoops, ein Downgrade auf 4.2 durchzuführen, scheint zu funktionieren.
HondaGuy

1
Upgrade von Fabric auf 1.31.0 und Herabstufung von Google Services auf 4.2.0 gelöst
Mukeshkumar S

94

Ich habe dieses Problem nach dem Update auf 3.3.0

Wenn Sie nicht die Fehlerzustände in der Gradle-Datei ausführen, ist dies ein Plugin, das immer noch nicht auf die neuere API aktualisiert wurde, die dies verursacht. Um herauszufinden, um welches Plugin es sich handelt, gehen Sie wie folgt vor (wie unter "Bessere Debug-Informationen bei Verwendung einer veralteten API" in 3.3.0-Ankündigung erläutert ):

  • Fügen Sie 'android.debug.obsoleteApi = true' zu Ihrer gradle.properties- Datei hinzu, die den Fehler mit weiteren Details protokolliert
  • Versuchen Sie es erneut und lesen Sie die Protokolldetails. Es wird eine Spur von "problematischen" Plugins geben
  • Wenn Sie sich identifizieren, versuchen Sie, es zu deaktivieren und festzustellen, ob das Problem behoben ist, nur um sicherzugehen
  • Gehen Sie zur Github-Seite des Plugins und erstellen Sie ein Problem, das ein detailliertes Protokoll und eine klare Beschreibung enthält, damit Sie den Entwicklern helfen können, es schneller für alle zu beheben
  • Seien Sie geduldig, während sie es reparieren, oder Sie reparieren es und erstellen PR für Entwickler

Hoffe es hilft anderen


4
Dies ist meiner Meinung nach die allgemeinste und nützlichste Antwort. In meinem Fall wird diese Warnung aufgrund der Verwendung des Groovy-Android-Plugins (für Spock-Tests) ausgegeben.
AutonomousApps

2
Das ist die richtige Antwort. Wer hat das Gradle-Versions-Update positiv bewertet?
Pier Betos

Das hat auch bei mir funktioniert. Gibt es etwas Neues zu diesem Thema? In der Zwischenzeit soll nichts getan werden, oder?
Billyjoker

1
Wirklich hilfreich. In meinem Fall war es das Hugo-Plugin.
AlvaroSantisteban

6
Nach dem Hinzufügen android.debug.obsoleteApi=true: So lesen Sie die protokollierten Details: Gehen Sie unten zur Registerkarte "Erstellen" und klicken Sie im Fenster "Ausgabe erstellen" auf "Ansicht umschalten". Wenn Sie darauf klicken, dass die hübschen Farben verschwinden, scrollen Sie nach oben, wo es heißt WARNING: API 'variant.getAssemble()' is obsolete. Dann darunter zeigt es REASON: Called from: ... in meinem Fall war es wegen medium.com/@xabaras/…
Jemand irgendwo

62

In meinem Fall wurde es von gms services 4.3.0 verursacht. Also musste ich es ändern zu:

com.google.gms:google-services:4.2.0

Ich habe dies gefunden, indem ich ausgeführt habe:

gradlew sync -Pandroid.debug.obsoleteApi=true

im Terminal. Gehen Sie in Android Studio zu Ansicht -> Werkzeugfenster -> Terminal.


in Ubuntu, nicht in der Lage, diesen Befehl auszuführen, wie ich in Ubuntu tun kann. Ich frage nach der Installation des Pakets und ich installiere das Paket immer noch. Ich kann es nicht ausführen. Gibt es einen anderen Weg?
Vasudev Vyas

3
Ich habe gerade meinen gms google service auf 4.2 geändert und die Warnung ist dank verschwunden.
Endlosschleifen

2
@VasudevVyas Wenn Sie in Android Studio sind, fügen Sie einfach ./vor dem Befehl hinzu, dh wenn das Terminal auf das Stammverzeichnis Ihres Android-Projekts eingestellt ist. Andernfalls müssen Sie zum Stammverzeichnis des Projekts cd.
Racu

3
Warum sollte ich die Abhängigkeit von Google Services herabstufen? Es ist keine Lösung.
Ahamadullah Saikat

4
@AhamadullahSaikat Dies wird wahrscheinlich in zukünftigen Versionen behoben. Dann können Sie es erneut aktualisieren. Dies ist eine Problemumgehung, bis sie von Google behoben wurde.
Numan Karaaslan

34

Dies ist nur eine Warnung und wird wahrscheinlich vor 2019 mit Plugin-Updates behoben. Machen Sie sich also keine Sorgen. Ich würde Ihnen empfehlen, kompatible Versionen Ihrer Plugins und Gradle zu verwenden.

Sie können Ihre Plugin-Version und Gradle-Version hier überprüfen, um eine bessere Erfahrung und Leistung zu erzielen.

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

Versuchen Sie, die stabilen Versionen für einen reibungslosen und warnungs- / fehlerfreien Code zu verwenden.


24
Es ist tatsächlich heimtückischer als nur eine Warnung - es wirkt sich auf den Code-Editor aus und verhindert, dass Sie Verweise auf Klassen suchen.
IgorGanapolsky

Dies ist nicht nur in dev / canary Editionen, sondern auch in stabilen Fällen der Fall, aber ich denke, es ist eine Warnung, dass mit neueren Updates behoben wird.
Marlon López

1
@ HarshilShah Es gibt keine Garantie dafür, dass problematische Plugins jemals aktualisiert werden. Entwickler werden möglicherweise nie etwas über das Problem erfahren. Aus diesem Grund können wir am besten Folgendes tun: stackoverflow.com/a/54213973/304270
Ewoks

25

Ich stand auch vor dem gleichen Problem. Und nachdem ich eine Weile gesucht hatte, stellte ich fest, dass die Warnung aufgrund der Verwendung der neuesten Version des google-servicesPlugins (Version 4.3.0) auftrat. Ich habe dieses Plugin übrigens für Firebase-Funktionen in meiner Anwendung verwendet. Ich habe google-serviceslediglich mein Plugin in Buildscript in der Datei build.gradle (Project) wie folgt heruntergestuft :

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

1
Ich habe diese Lösung gemacht und der Fehler ist verschwunden. Vielen Dank
Wesley Franks

1
Arbeiten! Dank
Сергей

3
Ich habe ein Upgrade auf 4.3.2 durchgeführt, ohne dass diese Warnung zurückgegeben wurde.
Tagy22

10

Ändern Sie Ihre Google Services-Version von build.gradle:

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

1
Ich bin auf 4.3.0 und das Problem ist immer noch da.
Wesley Franks

@wesleyfranks das gleiche. Aber wenn ich zu
4.2.0 wechsle, habe

Ich bin auf 4.3.1 und das Problem ist immer noch da
pvalle

8

Dies ist aus zwei Gründen eine Warnung, die von Build-Tools ausgegeben wird.
1. Eines der Plugins basiert auf Task anstelle von TaskProvider. Wir können nicht viel tun.
2. Sie haben die Verwendung von Aufgaben konfiguriert, sofern diese TaskProvider unterstützen.

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

Achten Sie auf die folgenden Ausschnitte und aktualisieren Sie sie.

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

Ebenso finden Sie Verwendungen von 'variant.getJavaCompile()'oder 'variant.javaCompile', 'variant.getMergeResources()'oder 'variant.mergeResources'. Ersetzen Sie wie oben.

Weitere Informationen finden Sie unter Vermeidung von Aufgabenkonfigurationen


1
Dies geschieht in jedem Android Studio-Projekt. Nichts mit Schnipsel zu tun, die Sie erwähnt haben ...
IgorGanapolsky

2
@IgorGanapolsky, es würde auch im Terminal passieren. Versuchen Sie es auszuführen ./gradlew. Dies hat nichts mit AS zu tun, sondern mit Build-Tools. Upgrade / Downgrade auf com.android.tools.build:gradle:3.2.0& ausführen ./gradlew. Das wird nicht kommen.
VenomVendor

Haben Sie nicht gefunden variant.generateBuildConfig.enabledin meinem Projekt. Ich bekomme immer noch die obige Warnung
kbsbng

Haben Sie nicht gefunden variant.generateBuildConfig.enabledin meinem Projekt. Ich bekomme immer noch die obige Warnung
kbsbng

@VenomVendor Dies ist die nützlichste Antwort gemäß meinem Problem. Können Sie trotzdem mit diesem Code-Snippet helfen? codeshare.io/G6ogzk
Raghav Satyadev

5

Das Downgrade der Version von Gradle hat bei mir funktioniert:

classpath 'com.android.tools.build:gradle:3.2.0'

4
Herabstufung ist nie eine Option
Roshana Pitigala

Dies ist die Antwort, was ich will. Danke!
anKotliner

Herabstufung ist unter bestimmten Umständen in
Ordnung

5

1) Fügen Sie android.debug.obsoleteApi=trueIhrem hinzu gradle.properties. Es zeigt Ihnen, welche Module von Ihrem Warnprotokoll betroffen sind.

2) Aktualisieren Sie diese veralteten Funktionen.

  • variant.javaCompile zu variant.javaCompileProvider

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


5

Ein Upgrade der Kotlin- Version ( Plugin und stdLib ) auf 1.3.1 löste diese Warnung in meinem Fall. Aktualisieren Sie die Kotlin-Version im gesamten Projekt, indem Sie die vorhandene Kotlin-Version durch Folgendes ersetzen:

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10' oder '1.3.50'
Puschkin

Das war mein Problem. vorher war ext.kotlin_version = '1.2.71'.. änderte es auf die Antwort oben und es funktionierte gut! - Ich habe meine /androidund /iosOrdner gelöscht und bin dann gelaufen flutter create ., um die Flutter-App neu zu ext.kotlin_version = '1.2.71'build.gradle
erstellen,

4

Gehen Sie vom Klassenpfad 'com.android.tools.build:gradle:3.3.0-alpha13' zum Klassenpfad 'com.android.tools.build:gradle:3.2.0' zurück.

das hat bei mir funktioniert


6
Das ist nur eine zeitliche Problemumgehung, da Sie nicht für immer auf 3.2.0 bleiben können, besonders wenn Final 3.3.0 bereits veröffentlicht ist
Ewoks

Downgrade Gradle Version ist keine Option! .
Jorgesys

4

Aktualisieren Sie das Fabric-Plugin auf die neueste Gradle-Datei auf Projektebene (nicht auf App-Ebene). In meinem Fall hat diese Zeile das Problem gelöst

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

zu

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

3

In meinem Fall

build.gradle(Project)

war

ext.kotlin_version = '1.2.71'

aktualisiert auf

ext.kotlin_version = '1.3.0'

sieht aus Problem ist vorerst weg


2

In meinem Fall musste ich das com.google.firebase.firebase-crashPlugin auskommentieren:

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

Es ist ein Fehler seit Android Studio 3.3.0


2
Für mich passiert es, weil ich benutzeoss-licenses-plugin
Mikhail

2

Gradle auf Gradle aktualisieren: 3.3.0

Die Standardaufgabe 'Zusammenbauen' gilt nur für normale Varianten. Fügen Sie auch Testvarianten hinzu.

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

auch Kommentar Stoff anwenden

//apply plugin: 'io.fabric'

1
Was sind die "normalen" Varianten? Wofür ist android.testVariants.all {...} Code (wozu dient er?)? Woher kommt dieser zitierte Text? Können Sie bitte die Antwort aktualisieren?
Ewoks

Ich habe den Manifest-Pfad für Chrashlytics geändertcrashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI

1
@Ewoks normale Varianten sind Build-Varianten (Debug / Release), die bestimmte Regeln verwenden. Sie können viele verschiedene Varianten (Varianten) festlegen. Außerdem können Sie Testquellensätze erstellen, die auf bestimmte Build-Varianten abzielen.
Krste Moskov

Ich kenne Aromen, bin mir aber nicht sicher, ob dies hier zutrifft und wie es zusammenhängt. Deshalb habe ich gefragt, ob Sie die Antwort aktualisieren können, indem Sie klarstellen, welche Quelle Sie zitiert haben, und um die Formatierung
Ewoks

1
Es gibt keine Garantie dafür, dass der Stoff überhaupt die Ursache des Problems war. Tatsächlich haben wir mit dieser "Lösung" keine Ahnung, wo das Problem lag. Außerdem gibt es keine Erklärung, warum man etwas mit testVariants macht und wie hängt das zusammen?!? Aus diesem Grund ist die ursprüngliche Antwort von @KrsteMoskov irreführend und gilt nur für bestimmte Anwendungsfälle, wenn sie überhaupt etwas löst. Um Ihnen zu helfen, "an Bord" zu kommen, habe ich Ihre Antwort richtig formatiert und den Inhalt so belassen, wie Sie ihn geschrieben haben, damit andere entscheiden können, ob dies für sie nützlich ist
Ewoks

2

Wenn das Plugin feststellt, dass Sie eine API verwenden, die nicht mehr unterstützt wird, kann es jetzt detailliertere Informationen bereitstellen, mit denen Sie feststellen können, wo diese API verwendet wird. Um die zusätzlichen Informationen anzuzeigen, müssen Sie Folgendes in die gradle.properties-Datei Ihres Projekts aufnehmen:

android.debug.obsoleteApi=true

wo bauen, gradle oder app.gradle
Jithish PN

Suchen Sie einfach nach der Datei gradle.properties in Ihrem Projekt
Hamed Safari

2

wenn ich diese Zeile entferne aus application gradle:

apply plugin: 'io.fabric'

Fehler wird nicht mehr angezeigt.

Referenzlink Github


1
TUN SIE DAS NICHT, sonst funktioniert Crashlytics nicht mehr. Dies verbirgt nur das Problem.
Roger Oba

2

Migrieren Sie Ihr Projekt zu androidX.

Abhängigkeiten werden auf androidX aktualisiert. Wenn Sie also AndroidX-Inhalte verwenden möchten, migrieren Sie Ihr Projekt zu AndroidX.

Mit Android Studio 3.2 und höher können Sie ein vorhandenes Projekt schnell auf AndroidX migrieren, indem Sie in der Menüleiste Refactor> Auf AndroidX migrieren auswählen.

Das Herabstufen von Abhängigkeiten kann Ihr Problem dieses Mal beheben - wird jedoch nicht empfohlen


1
Ich habe AndroidX und bekomme immer noch die Nachricht.
Jorgesys

1

Dies hat mein Problem behoben. Alles, was ich tun musste, war, mein Google-Services-Plugin in Buildscript in der Datei build.gradle (Project) wie folgt herunterzustufen

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

Hier eine vorübergehende Problemumgehung: Wenn Sie Raum verwenden, aktualisieren Sie einfach auf 1.1.0 oder höher

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

es entfernt diese Warnung für mich.


Ja, wenn ich die Version aktualisiere, sind diese Warnungen weg
Sergio KS

0

Behalten Sie Ihr Projekt (nicht App) Build.gradle Abhängigkeiten Klassenpfad Versionscode ist neu

 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

Dies ist eine beliebte Frage. Wenn Sie diese Methoden nicht verwenden, aktualisiert die Lösung die Bibliotheken. Bitte aktualisieren Sie Ihre Kotlin-Version und alle Ihre Abhängigkeiten wie Fabric , Protobuf usw. Wenn Sie sicher sind, dass Sie alles aktualisiert haben, fragen Sie den Autor der Bibliothek.


0

Das Upgrade des Protobuf-Gradle-Plugins auf Version 0.8.10 hat mein Problem gelöst. Ersetzen Sie Ihren vorhandenen Protobuf durch

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

0

Das liegt hauptsächlich an veralteten Bibliotheken. Um manuell nach neuen Updates zu suchen, sollten Sie zu navigieren

Analysieren> "Inspektion nach Namen ausführen"

Führen Sie die Inspektion nach Namen Android-Ergebnis

Das sollte genug sein. Eine weitere Option besteht darin, ein Gradle-Abhängigkeits-Update mit auszuführen

./gradlew dependencyUpdates

das wird einen Bericht wie diesen erzeugen:

: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

Das Aktualisieren der Google-Dienste auf Projektebene hat build.gradlemein Problem gelöst.

Nach dem Upgrade:

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

Ich hatte das gleiche Problem und es wurde gelöst, indem die Version des Kotlin Gradle Plugins in der Datei build.gradle definiert wurde.

ändere das

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

zu

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

0

In meinem Fall folgte ich dies . Zusammenfassung in Gradle-App-Ebene: Ändern Sie dies:

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

zu

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.