AVISO: A API 'variant.getJavaCompile ()' está obsoleta e foi substituída por 'variant.getJavaCompileProvider ()'

199

De repente, ao sincronizar o Gradle, recebo este erro:

AVISO: A API 'variant.getJavaCompile ()' está obsoleta e foi substituída por 'variant.getJavaCompileProvider ()'. Ele será removido no final de 2019. Para obter mais informações, consulte https://d.android.com/r/tools/task-configuration-avoidance Módulos afetados: app

Eu tenho isso build.gradlepara o módulo de aplicativo:

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 compilar o aplicativo corretamente, mas é um pouco preocupante e, a meu ver, algo deixará de funcionar no final de 2019. Alguma idéia do que é e como resolvê-lo?

Arnyminer Z
fonte
Assim como uma ligeira escolha, um aviso não é um erro. Mesmo com um aviso, seu código deve ser compilado da mesma maneira, enquanto um erro pode causar falha na sua compilação. É apenas um aviso avançado de que a maneira atual de fazer as coisas pode não funcionar no futuro e provavelmente será corrigida com as atualizações do plug-in. Você também teve tempo para ler a página vinculada no erro ?
Michael Dodd
2
Meu sentimento pessoal é que ele está sendo causado por um plug-in que não foi atualizado para usar a nova API Gradle ainda, que deve se corrigir a tempo.
Michael Dodd
Veja esta resposta. stackoverflow.com/questions/52412023/…
Rahul Kushwaha
Por favor, veja stackoverflow.com/questions/52412023/…
David Figueroa

Respostas:

81

Esse problema foi corrigido agora com a atualização do Fabric Gradle versão 1.30.0:

Versão de atualização: 19 de março de 2019

Consulte este link: https://docs.fabric.io/android/changelog.html#march-15-2019

Atualize sua dependência do caminho de classe no nível do projeto Gradle:

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

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}
M.Noman
fonte
2
Essa também é uma resposta correta, a maneira mais fácil de resolver o problema enfrentado.
M.Noman
5
Eu tenho agora classpath 'io.fabric.tools:gradle:1.29.0'. O que devo fazer?
Faizan Mubasher
7
@FaizanMubasher tentar rebaixamento seu serviço Google para 4,2
Infinito Loops
4
A sugestão do @InfiniteLoops de fazer o downgrade para 4.2 parece funcionar.
HondaGuy
1
Atualizado Tecido de 1.31.0 & degradado Google Serviços para 4.2.0 Resolvido
Mukeshkumar S
94

Eu enfrento esse problema após atualizar para o 3.3.0

Se você não está fazendo o que afirma o erro no arquivo gradle, é um plug-in que ainda não foi atualizado para a API mais recente que causa isso. Para descobrir qual plugin é, faça o seguinte (conforme explicado em "Melhores informações de depuração ao usar a API obsoleta" do anúncio 3.3.0 ):

  • Adicione 'android.debug.obsoleteApi = true' ao seu arquivo gradle.properties que registrará o erro com mais detalhes
  • Tente novamente e leia os detalhes do log. Haverá um rastro de plugin "problemático"
  • Ao se identificar, tente desativá-lo e verifique se o problema desapareceu, apenas para ter certeza
  • vá para a página de plug-in do github e crie um problema que conterá log detalhado e descrição clara, para ajudar os desenvolvedores a corrigi-lo para todos mais rapidamente
  • seja paciente enquanto eles consertam, ou você conserta e cria PR para desenvolvedores

Espero que ajude os outros

Ewoks
fonte
4
Esta é a resposta mais geral e útil, na minha opinião. No meu caso, esse aviso é emitido devido ao uso do plug-in Groovy-Android (para testes de Spock).
AutonomousApps
2
Esta é a resposta certa. Quem votou na atualização da versão gradle?
Pier Betos
Isso também funcionou para mim, há alguma novidade sobre esse assunto? Enquanto isso, não devemos fazer nada, certo?
Billyjoker 6/03/19
1
Realmente util. No meu caso, foi o plugin Hugo.
AlvaroSantisteban 21/03/19
6
após adicionar android.debug.obsoleteApi=true, Para ler os detalhes registrados: Vá para a guia Build na parte inferior e na janela "Build Output", clique em "Toggle View". Quando você clicar que as cores bonitas desaparecem, role para o topo onde está escrito WARNING: API 'variant.getAssemble()' is obsolete. Então abaixo, ele mostra REASON: Called from: ... no meu caso, era devido a medium.com/@xabaras/…
Someone Somewhere
62

No meu caso, foi causado por serviços gms 4.3.0. Então eu tive que mudar para:

com.google.gms:google-services:4.2.0

Eu encontrei isso executando:

gradlew sync -Pandroid.debug.obsoleteApi=true

no terminal. Vá para exibir -> janelas de ferramentas -> terminal no Android Studio.

Numan Karaaslan
fonte
no Ubuntu, incapaz de executar este comando como eu posso fazer no ubuntu. pedindo para instalar o pacote e eu instalo esse pacote ainda não consigo executar. existe alguma outra maneira?
Vasudev Vyas
3
Acabei de alterar meu serviço gms google para 4.2 e o aviso desapareceu, obrigado.
Infinite Loops
2
@VasudevVyas, se estiver no Android Studio, basta adicionar ./antes do comando, ou seja, se o terminal estiver definido como a raiz do seu projeto Android. Caso contrário, você precisará fazer o cd na raiz do projeto.
Racu
3
Por que devo fazer o downgrade da dependência de serviços do google. Não é uma solução.
Ahamadullah Saikat 06/07/19
4
@AhamadullahSaikat, isso provavelmente será corrigido nas versões futuras. Então você pode atualizá-lo novamente. Esta é uma solução alternativa até que seja corrigida pelo Google.
Numan Karaaslan
34

Este é apenas um aviso e provavelmente será corrigido antes de 2019 com atualizações de plugins, por isso não se preocupe. Eu recomendo que você use versões compatíveis de seus plugins e gradle.

Você pode verificar a versão do plug-in e a versão gradle aqui para obter melhor experiência e desempenho.

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

Tente usar as versões estáveis ​​para obter um código suave e sem aviso / erro.

Harshil Shah
fonte
24
Na verdade, é mais insidioso do que apenas um aviso - afeta o editor de código e impede que você procure referências a classes.
IgorGanapolsky
isso não é apenas nas edições dev / canary, também está estável, mas acho que é um aviso de que com as atualizações mais recentes serão corrigidas.
Marlon López
1
@HarshilShah, não há garantia de que um plugin problemático será atualizado. Os desenvolvedores talvez nunca saibam sobre o problema. Por causa de que o melhor que podemos fazer é seguir: stackoverflow.com/a/54213973/304270
Ewoks
25

Eu também enfrentei o mesmo problema. E depois de pesquisar por um tempo, percebi que o aviso estava surgindo por causa do uso da versão mais recente do google-servicesplugin (versão 4.3.0). A propósito, eu estava usando este plugin para funcionalidades do Firebase em meu aplicativo. Tudo o que fiz foi fazer o downgrade do meu google-servicesplug-in no buildscript no arquivo de nível build.gradle (Project) da seguinte maneira:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}
Fahad Javed
fonte
1
Eu fiz essa solução e o erro foi embora. Obrigado
wesley franks
1
Trabalhando! Obrigado
Сергей
3
Atualizei para 4.3.2 sem que este aviso volte.
tagy22
10

Altere sua versão dos Serviços do Google de build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}
Bahman Omidipour
fonte
1
Estou no 4.3.0 e o problema ainda está lá.
wesley franks
@wesleyfranks o mesmo. Mas se eu mudar para 4.2.0 Eu não tenho mais o problema ...
Diaz
Eu estou em 4.3.1 e o problema ainda está lá
pvalle
8

Este é um aviso emitido pelas ferramentas de construção por dois motivos.
1. Um dos plug-ins é confiar em tarefas em vez de em TaskProvider; não há muito o que possamos fazer.
2. Você configurou o uso da tarefa, onde ela suporta o 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

Procure trechos como abaixo e atualize.

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

Da mesma forma, encontre usos de 'variant.getJavaCompile()'ou 'variant.javaCompile', 'variant.getMergeResources()'ou 'variant.mergeResources'. Substitua como acima.

Mais informações em Prevenção de configuração de tarefas

VenomVendor
fonte
1
Isso acontece em todos os projetos do Android Studio. Nada a ver com trechos que você mencionou ...
IgorGanapolsky 28/09
2
@IgorGanapolsky, também aconteceria no terminal. Tente executar ./gradlew. Isso não tem nada a ver com o AS, está nas ferramentas de construção. Faça upgrade / downgrade para com.android.tools.build:gradle:3.2.0e execute ./gradlew. Isso não virá.
VenomVendor
Não encontrou variant.generateBuildConfig.enabledno meu projeto. Ainda recebo o aviso acima #
kbsbng 13/02/19
Não encontrou variant.generateBuildConfig.enabledno meu projeto. Ainda recebo o aviso acima #
kbsbng 13/02/19
@VenomVendor Esta é a resposta mais útil de acordo com o meu problema. Você ainda pode ajudar com este trecho de código? codeshare.io/G6ogzk
Raghav Satyadev
5

O downgrade da versão do Gradle funcionou para mim:

classpath 'com.android.tools.build:gradle:3.2.0'
Naimish Verma
fonte
4
desclassificação nunca é uma opção
Roshana Pitigala
Esta é a resposta que eu quero. Obrigado!
AnKotliner 18/07/19
desclassificação é bom em certas circunstâncias
martinseal1987
5

1) Adicione android.debug.obsoleteApi=trueao seu gradle.properties. Ele mostrará quais módulos são afetados pelo seu log de aviso.

2) Atualize essas funções obsoletas.

  • variant.javaCompile para variant.javaCompileProvider

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

Morgan Koh
fonte
5

Atualizar a versão do Kotlin ( Plugin e stdLib ) para a 1.3.1 resolveu esse aviso no meu caso. Atualize a versão do Kotlin em todo o projeto substituindo a versão existente do Kotlin por:

ext.kotlin_version = '1.3.50'
erluxman
fonte
ext.kotlin_version = '1.3.10' ou '1.3.50'
Pushkin
esse foi o meu problema. antes foi ext.kotlin_version = '1.2.71'.. Alterado para a resposta acima e funcionou bem! - Eu apaguei o meu /androide /iospastas e, em seguida, correu flutter create .para reconstruir o aplicativo Flutter e colocou ext.kotlin_version = '1.2.71'na minhabuild.gradle
MaylorTaylor
4

Volte do caminho de classe 'com.android.tools.build:gradle:3.3.0-alpha13' para o caminho de classe 'com.android.tools.build:gradle:3.2.0'

isso funcionou para mim

Eben Watts
fonte
6
isso é apenas solução temporal, porque você não pode ficar para sempre em 3.2.0, especialmente quando última 3.3.0 já está fora
Ewoks
versão degradê gradle não é uma opção! .
Jorgesys 19/02/19
4

Atualize o plug-in de malha para o arquivo Gradle mais recente no nível do projeto (não no nível do aplicativo). No meu caso, essa linha resolveu o problema

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

para

classpath 'io.fabric.tools:gradle:1.29.0'
Bibaswann Bandyopadhyay
fonte
3

No meu caso

build.gradle(Project)

foi

ext.kotlin_version = '1.2.71'

atualizado para

ext.kotlin_version = '1.3.0'

parece problema se foi por enquanto

Sam
fonte
2

No meu caso, eu tive que comentar o com.google.firebase.firebase-crashplugin:

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

É um bug desde o Android Studio 3.3.0

Anggrayudi H
fonte
2
Para mim é acontece porque eu estou usandooss-licenses-plugin
Mikhail
2

Atualizando gradle para gradle: 3.3.0

A tarefa padrão 'montar' se aplica apenas a variantes normais. Adicione variantes de teste também.

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

também comentar aplicar tecido

//apply plugin: 'io.fabric'
Krste Moskov
fonte
1
Quais são as variantes "normais"? Para que serve o código android.testVariants.all {...} (qual é o objetivo dele)? De onde é esse texto citado? Você pode atualizar a resposta?
Ewoks
Eu mudei o caminho do manifesto para chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI
1
As variantes normais do @Ewoks são variantes de compilação (depuração / release), elas usam um conjunto específico de regras ... você pode definir muitas variantes diferentes (tipos). Além disso, você pode criar conjuntos de fontes de teste que têm como alvo variantes de compilação específicas.
Krste Moskov
Eu sei sobre sabores, mas não sei se isso se aplica aqui e como ele está relacionado. É por isso que eu perguntei se você pode atualizar a resposta esclarecendo que fonte você cita e para corrigir a formatação (acho que você misturado formatação de código com comentários)
Ewoks
1
Não há garantia de que o tecido tenha sido a fonte do problema. Na verdade, com essa "solução", não temos idéia de onde estava o problema. Além disso, não há explicação para por que fazer algo com testVariants e como isso está relacionado?!? É por isso que a resposta original de @KrsteMoskov é enganosa e se aplica apenas a casos de uso específicos, se resolver alguma coisa. Para ajudá-lo a "embarcar", formatei sua resposta corretamente e deixei o conteúdo como você o escreveu, para que outros possam decidir se isso é útil para eles.
Ewoks
2

Quando o plug-in detecta que você está usando uma API que não é mais suportada, agora pode fornecer informações mais detalhadas para ajudar a determinar onde essa API está sendo usada. Para ver informações adicionais, você precisa incluir o seguinte no arquivo gradle.properties do seu projeto:

android.debug.obsoleteApi=true
Safari de Hamed
fonte
onde build, gradle ou app.gradle
Jithish PN 26/12/19
basta procurar pelo arquivo gradle.properties em seu projeto
Hamed safari
2

se eu remover esta linha a partir de application gradle:

apply plugin: 'io.fabric'

erro não aparecerá mais.

Link de referência github

Muhammad Waleed
fonte
1
NÃO FAÇA ISTO, caso contrário, o Crashlytics deixará de funcionar. Isso está apenas escondendo o problema.
Roger Oba
2

Migrar seu projeto para androidX.

as dependências são atualizadas para androidX. portanto, se você quiser usar o conteúdo do androidX, migre seu projeto para o androidX.

Com o Android Studio 3.2 e superior, você pode migrar rapidamente um projeto existente para usar o AndroidX, selecionando Refatorar> Migrar para AndroidX na barra de menus.

Fazer o downgrade de dependências pode resolver seu problema neste momento - mas não é recomendado

Adarsh ​​Vijayan P
fonte
1
Eu tenho o AndroidX e ainda estou recebendo a mensagem.
Jorgesys 20/08/19
1

Isso corrigiu o meu problema. Tudo o que eu precisava fazer era fazer o downgrade do meu plug-in do google-services em buildscript no arquivo de nível build.gradle (Project) da seguinte maneira

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'
    }
}
Ali Sampson
fonte
0

Aqui está uma solução temporária: Se você estiver usando a sala, atualize para 1.1.0 ou superior

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

remove esse aviso para mim.

Sergio KS
fonte
sim, quando eu atualizar a versão, teses aviso se foram
Sergio KS
0

mantê-lo Projeto (não aplicativo) Depende do Build.gradle o código da versão do caminho de classe é novo

 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
}
Ven Ren
fonte
0

Esta é uma pergunta popular. Se você não usar esses métodos, a solução está atualizando as bibliotecas. Atualize sua versão do kotlin e todas as suas dependências, como fabric , protobuf etc. Se você tiver certeza de que atualizou tudo, tente perguntar ao autor da biblioteca.

monyag
fonte
0

A atualização de protobuf-gradle-plugin para a versão 0.8.10 resolveu meu problema. Substitua seu protobuf existente por

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'
Nejweti
fonte
0

Isso se deve principalmente às bibliotecas obsoletas. Para verificar se há novas atualizações manualmente, navegue até

Analisar> "Executar inspeção por nome"

executar inspeção pelo nome resultado android

Isso deve ser o suficiente. Outra opção é executar uma atualização de dependência gradle usando

./gradlew dependencyUpdates

que produzirá um relatório como este:

: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]

...
Dimas Mendes
fonte
0

a atualização dos serviços do google no nível do projeto build.gradleresolveu meu problema.

Após a atualização:

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
}
Riddhi
fonte
0

Eu tive o mesmo problema e resolveu definindo a versão do plugin kotlin gradle no arquivo build.gradle.

mude isso

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

para

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

No meu caso, eu segui isso . Resumo, no nível do aplicativo gradle: altere isso:

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

para

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Atef Farouk
fonte