ATTENZIONE: l'API 'variant.getJavaCompile ()' è obsoleta ed è stata sostituita con 'variant.getJavaCompileProvider ()'


199

Improvvisamente durante la sincronizzazione di Gradle, ottengo questo errore:

ATTENZIONE: l'API 'variant.getJavaCompile ()' è obsoleta ed è stata sostituita con 'variant.getJavaCompileProvider ()'. Sarà rimosso alla fine del 2019. Per ulteriori informazioni, consultare https://d.android.com/r/tools/task-configuration-avoidance Moduli interessati: app

Ho questo build.gradleper il modulo app:

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'

    [...]
}

Posso compilare l'app correttamente, ma è un po 'fastidioso e, a mio modo di vedere, qualcosa smetterà di funzionare alla fine del 2019. Qualche idea su cosa sia e come risolverla?


Proprio come una leggera scelta, un avvertimento non è un errore. Anche con un avviso, il codice dovrebbe essere compilato allo stesso modo, mentre un errore potrebbe causare il fallimento della compilazione. Si noti solo in anticipo che l'attuale modo di fare le cose potrebbe non funzionare in futuro e probabilmente verrà risolto con gli aggiornamenti dei plug-in. Hai anche dedicato del tempo a leggere la pagina collegata nell'errore ?
Michael Dodd,

2
La mia sensazione personale è che è stato causato da un plug-in che non è stato ancora aggiornato per utilizzare la nuova API Gradle, che dovrebbe risolversi in tempo.
Michael Dodd,



Risposte:


81

Questo problema è stato risolto ora con l'aggiornamento Fabric Gradle versione 1.30.0:

Rilascio dell'aggiornamento: 19 marzo 2019

Si prega di consultare questo link: https://docs.fabric.io/android/changelog.html#march-15-2019

Si prega di aggiornare la dipendenza del percorso di classe in Grado a livello di progetto:

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

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

2
Questa è anche una risposta corretta, il modo semplice per risolvere il problema di fronte.
M.Noman,

5
Ho adesso classpath 'io.fabric.tools:gradle:1.29.0'. Cosa dovrei fare?
Faizan Mubasher,

7
@FaizanMubasher prova a eseguire il downgrade del tuo servizio Google a 4.2
Infinite Loops

4
Il suggerimento di @InfiniteLoops per il downgrade a 4.2 sembra funzionare.
Honda

1
Aggiornamento di Fabric a 1.31.0 e downgrade di Google Services a 4.2.0 risolti
Mukeshkumar S

94

Devo affrontare questo problema dopo l'aggiornamento alla 3.3.0

Se non stai facendo ciò che indica l'errore nel file gradle, sono alcuni plug-in che ancora non si sono aggiornati all'API più recente a causare questo. Per capire quale plug-in è, procedi come segue (come spiegato in "Informazioni di debug migliori quando si utilizza un'API obsoleta" dell'annuncio 3.3.0 ):

  • Aggiungi 'android.debug.obsoleteApi = true' al tuo file gradle.properties che registrerà l'errore con maggiori dettagli
  • Riprova e leggi i dettagli del registro. Ci sarà una traccia del plugin "problematico"
  • Quando ti identifichi, prova a disabilitarlo e vedi se il problema è andato, solo per essere sicuri
  • vai alla pagina github del plug-in e crea un problema che conterrà un registro dettagliato e una descrizione chiara, in modo da aiutare gli sviluppatori a risolverlo più velocemente per tutti
  • sii paziente mentre lo risolvono, oppure lo aggiusti e crei PR per gli sviluppatori

Spero che aiuti gli altri


4
Questa è la risposta più generale e utile, secondo me. Nel mio caso, questo avviso viene emesso a causa dell'uso del plug-in Groovy-Android (per i test Spock).
AutonomousApps

2
Questa è la risposta esatta. Chi ha aggiornato l'aggiornamento della versione gradle?
Pier Betos,

Questo ha funzionato anche per me, ci sono novità su questo tema? Nel frattempo non si suppone che potremmo fare nulla, vero?
Billyjoker,

1
Davvero utile. Nel mio caso era il plugin Hugo.
AlvaroSantisteban

6
dopo aver aggiunto android.debug.obsoleteApi=true, Per leggere i dettagli registrati: Vai alla scheda Genera in basso e nella finestra "Genera output", fai clic su "Attiva / disattiva vista". Quando fai clic sul grazioso, i colori scompaiono, scorri verso l'alto dove dice WARNING: API 'variant.getAssemble()' is obsolete. Poi sotto, mostra REASON: Called from: ... nel mio caso era dovuto a medium.com/@xabaras/…
Someone Somewhere

62

Nel mio caso, è stato causato dai servizi gms 4.3.0. Quindi ho dovuto cambiarlo in:

com.google.gms:google-services:4.2.0

Ho trovato questo eseguendo:

gradlew sync -Pandroid.debug.obsoleteApi=true

nel terminale. Vai a visualizzare -> finestre degli strumenti -> Terminale in Android Studio.


in Ubuntu, incapace di eseguire questo comando come posso fare in Ubuntu. chiedendo di installare il pacchetto e installo quel pacchetto non sono ancora in grado di eseguire. c'è un altro modo?
Vasudev Vyas,

3
Ho appena cambiato il mio servizio gms google in 4.2 e l'avvertimento è scomparso grazie.
Infinite Loops

2
@VasudevVyas se in Android Studio, basta aggiungere ./prima del comando, ovvero se il terminale è impostato sulla radice del progetto Android. Altrimenti dovrai eseguire il cd alla radice del progetto.
Racu,

3
Perché dovrei effettuare il downgrade della dipendenza dai servizi Google. Non è una soluzione.
Ahamadullah Saikat,

4
@AhamadullahSaikat questo sarà probabilmente risolto nelle versioni future. Quindi puoi aggiornarlo di nuovo. Questa è una soluzione alternativa finché non viene risolta da Google.
Numan Karaaslan,

34

Questo è solo un avvertimento e probabilmente verrà risolto prima del 2019 con gli aggiornamenti dei plugin, quindi non preoccuparti. Ti consiglierei di utilizzare versioni compatibili dei tuoi plugin e gradle.

Puoi controllare la versione del tuo plug-in e la versione graduale qui per una migliore esperienza e prestazioni.

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

Prova a utilizzare le versioni stabili per un codice uniforme e privo di avvisi / errori.


24
In realtà è più insidioso di un semplice avvertimento: influisce sull'editor di codice e ti impedisce di cercare riferimenti alle classi.
IgorGanapolsky,

questo non è solo nelle edizioni dev / canary, anche in questo caso accade, ma, penso, sia un avvertimento che con gli aggiornamenti più recenti verranno corretti.
Marlon López,

1
@HarshilShah non vi è alcuna garanzia che il plugin problematico verrà mai aggiornato. Gli sviluppatori potrebbero non sapere nemmeno del problema. Per questo motivo, il meglio che possiamo fare è: stackoverflow.com/a/54213973/304270
Ewoks

25

Ho anche affrontato lo stesso problema. E dopo aver cercato per un po ', ho capito che l'avviso stava sorgendo a causa dell'utilizzo dell'ultima versione del google-servicesplugin (versione 4.3.0). A proposito, stavo usando questo plugin per le funzionalità di Firebase nella mia applicazione. Tutto quello che ho fatto è stato il downgrade del mio google-servicesplugin in buildscript nel file di livello build.gradle (Project) come segue:

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

1
Ho fatto questa soluzione e l'errore è scomparso. Grazie
Wesley affranca il

1
Lavorando! Grazie
Сергей

3
Ho aggiornato a 4.3.2 senza che questo avviso ritorni.
tagy22,

10

Modifica la versione dei tuoi servizi Google da build.gradle:

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

1
Sono su 4.3.0 e il problema è ancora lì.
Wesley affranca il

@wesleyfranks the same. Ma se passo a 4.2.0 non ho più il problema ...
diAz

Sono al 4.3.1 e il problema è ancora lì
pvalle

8

Questo è un avvertimento emesso dagli strumenti di costruzione per due motivi.
1. Uno dei plugin si basa su Task anziché su TaskProvider, non c'è molto che possiamo fare.
2. È stato configurato l'utilizzo dell'attività, in quanto supporta 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

Cerca i frammenti come di seguito e aggiorna.

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

Allo stesso modo, trova gli usi di 'variant.getJavaCompile()'o 'variant.javaCompile', 'variant.getMergeResources()'o 'variant.mergeResources'. Sostituisci come sopra.

Ulteriori informazioni su Evita configurazione attività


1
Questo succede in ogni progetto di Android Studio. Niente a che fare con i frammenti che hai citato ...
IgorGanapolsky,

2
@IgorGanapolsky, Succederebbe anche nel terminale. Prova a eseguire ./gradlew. Questo non ha nulla a che fare con AS, è negli strumenti di compilazione. Esegui l'upgrade / downgrade com.android.tools.build:gradle:3.2.0e l'esecuzione ./gradlew. Questo non verrà.
VenomVendor,

Non ho trovato variant.generateBuildConfig.enablednel mio progetto. Ricevo ancora l'avviso di cui sopra
kbsbng,

Non ho trovato variant.generateBuildConfig.enablednel mio progetto. Ricevo ancora l'avviso di cui sopra
kbsbng,

@VenomVendor Questa è la risposta più utile in base al mio problema, puoi ancora aiutarti con questo frammento di codice? codeshare.io/G6ogzk
Raghav Satyadev,


5

1) Aggiungi android.debug.obsoleteApi=trueal tuo gradle.properties. Ti mostrerà quali moduli sono interessati dal tuo registro degli avvisi.

2) Aggiorna queste funzioni obsolete.

  • variant.javaCompile per variant.javaCompileProvider

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


5

L'aggiornamento della versione di Kotlin ( Plugin e stdLib ) alla 1.3.1 ha risolto questo avviso nel mio caso. Aggiorna la versione di Kotlin nell'intero progetto sostituendo la versione di Kotlin esistente con:

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10' o '1.3.50'
Pushkin il

questo era il mio problema. prima era ext.kotlin_version = '1.2.71'.. Modificato per la risposta sopra e ha funzionato bene! - ho cancellato my /androide le /ioscartelle e poi ho corso flutter create .per ricostruire l'app Flutter e questa è stata inserita ext.kotlin_version = '1.2.71'nella miabuild.gradle
MaylorTaylor

4

Torna da classpath 'com.android.tools.build:gradle:3.3.0-alpha13' a classpath 'com.android.tools.build:gradle:3.2.0'

questo ha funzionato per me


6
è solo una soluzione temporanea perché non puoi rimanere per sempre sulla 3.2.0, specialmente quando la 3.3.0 finale è già fuori uso
Ewoks

il downgrade della versione gradle non è un'opzione! .
Jorgesys,

4

Aggiorna il plug-in Fabric all'ultimo file Gradle a livello di progetto (non a livello di app). Nel mio caso, questa riga ha risolto il problema

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

per

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

3

Nel mio caso

build.gradle(Project)

era

ext.kotlin_version = '1.2.71'

aggiornato a

ext.kotlin_version = '1.3.0'

sembra che il problema sia andato per ora


2

Nel mio caso, ho dovuto commentare il com.google.firebase.firebase-crashplugin:

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

È un bug da Android Studio 3.3.0


2
Per me succede perché sto usandooss-licenses-plugin
Mikhail il

2

Aggiornamento da gradle a gradle: 3.3.0

Il task predefinito 'assemblare' si applica solo alle varianti normali. Aggiungi anche varianti di test.

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

anche commentare applicare tessuto

//apply plugin: 'io.fabric'

1
Quali sono le varianti "normali"? A cosa serve il codice android.testVariants.all {...} (a cosa serve)? Da dove viene questo testo citato? Potete per favore aggiornare la risposta?
Ewoks

Ho cambiato il percorso manifest per i chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI il

1
Le varianti normali di @Ewok sono varianti di build (debug / release) che usano un set specifico di regole .. è possibile impostare molte varianti (flavours) diverse. Inoltre, è possibile creare set di sorgenti di test destinati a varianti di build specifiche.
Krste Moskov,

Conosco i sapori ma non sono sicuro che questo si applichi qui e come sia correlato. Ecco perché ti ho chiesto se puoi aggiornare la risposta chiarendo quale fonte hai citato e per correggere la formattazione (indovina che hai combinato la formattazione del codice con il commento)
Ewoks

1
Non vi è alcuna garanzia che il tessuto sia stato la fonte del problema. In realtà con questa "soluzione" non abbiamo idea di dove fosse il problema. Inoltre, non vi è alcuna spiegazione del perché fare qualcosa con testVariants e in che modo è correlato?!? Ecco perché la risposta originale di @KrsteMoskov è fuorviante e si applica solo al caso d'uso specifico se risolve qualcosa. Per aiutarti a ottenere "a bordo" ho formattato correttamente la tua risposta e ho lasciato il contenuto mentre lo scrivevi, così gli altri possono decidere se questo è utile per loro
Ewoks

2

Quando il plug-in rileva che stai utilizzando un'API non più supportata, ora può fornire informazioni più dettagliate per aiutarti a determinare dove viene utilizzata l'API. Per visualizzare le informazioni aggiuntive, è necessario includere quanto segue nel file gradle.properties del progetto:

android.debug.obsoleteApi=true

dove build, gradle o app.gradle
Jithish PN il

basta cercare il file gradle.properties nel tuo progetto
Hamed safari


2

Migra il tuo progetto su androidX.

le dipendenze vengono aggiornate ad androidX. quindi se vuoi usare i contenuti di androidX migra il tuo progetto su androidX.

Con Android Studio 3.2 e versioni successive, puoi migrare rapidamente un progetto esistente per utilizzare AndroidX selezionando Refactor> Migra su AndroidX dalla barra dei menu.

Il downgrade delle dipendenze può risolvere il problema questa volta, ma non è consigliato


1
Ho AndroidX e sto ancora ricevendo il messaggio.
Jorgesys,

1

Questo risolto il mio problema. Tutto quello che dovevo fare era eseguire il downgrade del mio plug-in Google Services in buildscript nel file di livello build.gradle (Progetto) come segue

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

Ecco una soluzione temporanea, se si utilizza room basta eseguire l'aggiornamento alla versione 1.1.0 o successiva

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

rimuove questo avviso per me.


sì, quando aggiorno la versione, queste avvertenze spariscono
Sergio KS,

0

mantieni Project (non app) Build.gradle dependncies classpath version code è nuovo

 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

Questa è una domanda popolare Se non si utilizzano questi metodi, la soluzione sta aggiornando le librerie. Aggiorna la tua versione di kotlin e tutte le tue dipendenze come fabric , protobuf ecc. Se sei sicuro di aver aggiornato tutto, prova a chiedere all'autore della libreria.


0

L'aggiornamento del protobuf-gradle-plugin alla versione 0.8.10 ha risolto il mio problema. Sostituisci il tuo protobuf esistente con

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

0

Ciò è dovuto principalmente alle biblioteche obsolete. Per verificare manualmente la presenza di nuovi aggiornamenti, è necessario accedere a

Analizza> "Esegui ispezione per nome"

eseguire l'ispezione per nome risultato Android

Questo dovrebbe essere abbastanza. Un'altra opzione è eseguire un aggiornamento della dipendenza gradle utilizzando

./gradlew dependencyUpdates

che produrrà un rapporto come questo:

: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

l'aggiornamento dei servizi di Google a livello di progetto ha build.gradlerisolto il mio problema.

Dopo l'aggiornamento:

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

Ho avuto lo stesso problema e ho risolto definendo la versione del plugin gradle di kotlin nel file build.gradle.

cambia questo

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

per

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

0

Nel mio caso ho seguito questo . Riepilogo, a livello di app Gradle: cambia questo:

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

per

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.