ADVERTENCIA: la API 'variant.getJavaCompile ()' está obsoleta y ha sido reemplazada por 'variant.getJavaCompileProvider ()'

199

De repente, cuando sincronizo Gradle, aparece este error:

ADVERTENCIA: la API 'variant.getJavaCompile ()' está obsoleta y ha sido reemplazada por 'variant.getJavaCompileProvider ()'. Se eliminará a fines de 2019. Para obtener más información, consulte https://d.android.com/r/tools/task-configuration-avoidance Módulos afectados: aplicación

Tengo esto build.gradlepara el módulo de la aplicación:

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'

    [...]
}

Puedo compilar la aplicación correctamente, pero es un poco molesto y, como lo veo, algo dejará de funcionar a fines de 2019. ¿Alguna idea de qué es y cómo resolverlo?

Arnyminer Z
fuente
Del mismo modo que una pequeña trampa, una advertencia no es un error. Incluso con una advertencia, su código debe compilarse de la misma manera, mientras que un error podría causar que su compilación falle. Es solo un aviso avanzado de que la forma actual de hacer las cosas puede no funcionar en el futuro y probablemente se solucionará con actualizaciones de complementos. ¿También se tomó el tiempo de leer la página vinculada en el error ?
Michael Dodd
2
Mi sensación personal es que está siendo causada por un complemento que aún no se ha actualizado para usar la nueva API de Gradle, que debería solucionarse a tiempo.
Michael Dodd
Mira esta respuesta. stackoverflow.com/questions/52412023/…
Rahul Kushwaha
Consulte stackoverflow.com/questions/52412023/…
David Figueroa el

Respuestas:

81

Este problema se solucionó ahora con la actualización de Fabric Gradle versión 1.30.0:

Lanzamiento de actualización: 19 de marzo de 2019

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

Actualice su dependencia de classpath en el nivel de proyecto Gradle:

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

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}
M.Noman
fuente
2
Esta también es una respuesta correcta, la manera fácil de resolver el problema de enfrentamiento.
M.Noman
55
Tengo ahora classpath 'io.fabric.tools:gradle:1.29.0'. ¿Qué tengo que hacer?
Faizan Mubasher
77
@FaizanMubasher intente degradar su servicio de Google a 4.2
Infinite Loops
44
La sugerencia de @InfiniteLoops para bajar a 4.2 parece funcionar.
HondaGuy
1
Fabric actualizado a 1.31.0 y servicios de Google degradados a 4.2.0 resuelto
Mukeshkumar S
94

Me enfrento a este problema después de actualizar a 3.3.0

Si no está haciendo qué estado de error en el archivo gradle, es un complemento que aún no se actualizó a la API más nueva que causa esto. Para averiguar qué complemento es, haga lo siguiente (como se explica en "Mejor información de depuración cuando se usa API obsoleta" del anuncio 3.3.0 ):

  • Agregue 'android.debug.obsoleteApi = true' a su archivo gradle.properties que registrará el error con más detalles
  • Intente nuevamente y lea los detalles del registro. Habrá un rastro de plugin "problemático"
  • Cuando se identifique, intente deshabilitarlo y vea si el problema desapareció, solo para asegurarse
  • vaya a la página de github del complemento y cree un problema que contendrá un registro detallado y una descripción clara, para ayudar a los desarrolladores a solucionarlo para todos más rápido
  • tenga paciencia mientras lo arreglan, o usted lo arregla y crea relaciones públicas para desarrolladores

Espero que ayude a otros

Ewoks
fuente
44
Esta es la respuesta más general y útil, en mi opinión. En mi caso, esta advertencia se emite debido al uso del complemento Groovy-Android (para pruebas de Spock).
AutonomousApps
2
Esta es la respuesta correcta. ¿Quién votó por la actualización de la versión de Gradle?
Pier Betos
Esto también funcionó para mí, ¿hay alguna novedad sobre este tema? Mientras tanto, se supone que no hay nada que podamos hacer, ¿verdad?
Billyjoker
1
De mucha ayuda. En mi caso fue el complemento de Hugo.
AlvaroSantisteban
66
después de agregar android.debug.obsoleteApi=true, Para leer los detalles registrados: Vaya a la pestaña Generar en la parte inferior y dentro de la ventana "Generar salida", haga clic en "Alternar vista". Cuando haces clic en que los colores bonitos desaparecen, desplázate hasta la parte superior donde dice WARNING: API 'variant.getAssemble()' is obsolete. Luego, debajo, se muestra REASON: Called from: ... en mi caso se debió a medium.com/@xabaras/…
Someone Somewhere
62

En mi caso, fue causado por los servicios gms 4.3.0. Así que tuve que cambiarlo a:

com.google.gms:google-services:4.2.0

He encontrado esto ejecutando:

gradlew sync -Pandroid.debug.obsoleteApi=true

en terminal. Vaya a ver -> ventanas de herramientas -> Terminal en Android Studio.

Numan Karaaslan
fuente
en Ubuntu, no puedo ejecutar este comando como puedo hacerlo en ubuntu. pidiendo instalar el paquete e instalo ese paquete todavía no puedo ejecutarlo. ¿Hay alguna otra manera?
Vasudev Vyas
3
Acabo de cambiar mi servicio de google gms a 4.2 y la advertencia desapareció gracias.
Infinite Loops
2
@VasudevVyas si está en Android Studio, solo agregue ./antes del comando, es decir, si el terminal está configurado en la raíz de su proyecto de Android. De lo contrario, tendrá que cd a la raíz del proyecto.
Racu
3
¿Por qué debería degradar la dependencia de google-services? No es una solucion.
Ahamadullah Saikat
44
@AhamadullahSaikat esto probablemente se solucionará en futuras versiones. Entonces puedes actualizarlo nuevamente. Esta es una solución hasta que Google la solucione.
Numan Karaaslan
34

Esto es solo una advertencia y probablemente se solucionará antes de 2019 con actualizaciones de complementos, así que no se preocupe. Le recomendaría que use versiones compatibles de sus complementos y gradle.

Puede verificar su versión de complemento y la versión de gradle aquí para obtener una mejor experiencia y rendimiento.

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

Intente usar las versiones estables para obtener un código fluido y libre de advertencia / error.

Harshil Shah
fuente
24
En realidad, es más insidioso que solo una advertencia: afecta al editor de código y le impide buscar referencias a clases.
IgorGanapolsky
esto no es solo en las ediciones dev / canary, sino también en el estable, pero creo que es una advertencia de que con las actualizaciones más nuevas se solucionarán.
Marlon López el
1
@HarshilShah no hay garantía de que alguna vez se actualice el complemento problemático. Es posible que los desarrolladores nunca sepan sobre el problema. Por eso, lo mejor que podemos hacer es: stackoverflow.com/a/54213973/304270
Ewoks el
25

También enfrenté el mismo problema. Y después de buscar por un tiempo, descubrí que surgía la advertencia debido al uso de la última versión del google-servicescomplemento (versión 4.3.0). Por cierto, estaba usando este complemento para las funcionalidades de Firebase en mi aplicación. Todo lo que hice fue degradar mi google-servicesplugin en buildscript en el archivo de nivel build.gradle (Proyecto) de la siguiente manera:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}
Fahad Javed
fuente
1
Hice esta solución y el error desapareció. Gracias
wesley franks
1
¡Trabajando! Gracias
Сергей
3
Actualicé a 4.3.2 sin que esta advertencia vuelva.
tagy22
10

Cambie su versión de Servicios de Google desde su build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}
Omidipour de Bahman
fuente
1
Estoy en 4.3.0 y el problema sigue ahí.
wesley franks
@wesleyfranks lo mismo. Pero si cambio a 4.2.0 ya no tengo el problema ...
diAz
Estoy en 4.3.1 y el problema sigue ahí
pvalle
8

Esta es una advertencia emitida por las herramientas de compilación por dos razones.
1. Uno de los complementos depende de Task en lugar de TaskProvider, no hay mucho que podamos hacer.
2. Ha configurado el uso de la tarea, donde es compatible con 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

Esté atento a los fragmentos como a continuación y actualice.

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

Del mismo modo, encuentre usos de 'variant.getJavaCompile()'o 'variant.javaCompile', 'variant.getMergeResources()'o 'variant.mergeResources'. Reemplace como arriba.

Más información en Evitar configuración de tareas

VenomVendor
fuente
1
Esto sucede en todos los proyectos de Android Studio. Nada que ver con fragmentos que mencionaste ...
IgorGanapolsky
2
@IgorGanapolsky, también sucedería en la terminal. Intenta ejecutar ./gradlew. Esto no tiene nada que ver con AS, está en las herramientas de compilación. Actualizar / degradar a com.android.tools.build:gradle:3.2.0y ejecutar ./gradlew. Esto no vendrá.
VenomVendor
No lo encontré variant.generateBuildConfig.enableden mi proyecto. Todavía recibo la advertencia anterior
kbsbng
No lo encontré variant.generateBuildConfig.enableden mi proyecto. Todavía recibo la advertencia anterior
kbsbng
@VenomVendor Esta es la respuesta más útil según mi problema, ¿aún puede ayudarme con este fragmento de código? codeshare.io/G6ogzk
Raghav Satyadev
5

La degradación de la versión de Gradle funcionó para mí:

classpath 'com.android.tools.build:gradle:3.2.0'
Naimish Verma
fuente
44
la degradación nunca es una opción
Roshana Pitigala
Esta es la respuesta que quiero. ¡Gracias!
anKotliner
degradación está muy bien en ciertas circunstancias
martinseal1987
5

1) Añadir android.debug.obsoleteApi=truea tu gradle.properties. Le mostrará qué módulos está afectado por su registro de advertencia.

2) Actualice estas funciones obsoletas.

  • variant.javaCompile a variant.javaCompileProvider

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

Morgan Koh
fuente
5

La actualización de la versión Kotlin ( Plugin y stdLib ) a 1.3.1 resolvió esa advertencia en mi caso. Actualice la versión de Kotlin en todo el proyecto reemplazando la versión de Kotlin existente con:

ext.kotlin_version = '1.3.50'
erluxman
fuente
ext.kotlin_version = '1.3.10' o '1.3.50'
Pushkin el
Este fue mi problema. antes fue ext.kotlin_version = '1.2.71'... Cambié a la respuesta anterior y funcionó bien! - Eliminé mi /androidy las /ioscarpetas y luego corrí flutter create .para reconstruir la aplicación Flutter y la coloqué ext.kotlin_version = '1.2.71'en mibuild.gradle
MaylorTaylor
4

Regrese de classpath 'com.android.tools.build:gradle:3.3.0-alpha13' a classpath 'com.android.tools.build:gradle:3.2.0'

esto funcionó para mí

Eben Watts
fuente
66
eso es solo una solución temporal porque no puedes quedarte para siempre en 3.2.0, especialmente cuando la versión final 3.3.0 ya está fuera
Ewoks
¡La versión downgradle de gradle no es una opción! .
Jorgesys
4

Actualice el complemento de fabric a lo último en el archivo Gradle de nivel de proyecto (no a nivel de aplicación). En mi caso, esta línea resolvió el problema

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

a

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

En mi caso

build.gradle(Project)

estaba

ext.kotlin_version = '1.2.71'

actualizado a

ext.kotlin_version = '1.3.0'

parece que el problema se ha ido por ahora

Sam
fuente
2

En mi caso, tuve que comentar el com.google.firebase.firebase-crashcomplemento:

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

Es un error desde Android Studio 3.3.0

Anggrayudi H
fuente
2
Para mí sucede porque estoy usandooss-licenses-plugin
Mikhail
2

Actualización de gradle a gradle: 3.3.0

La tarea predeterminada 'ensamblar' solo se aplica a las variantes normales. Agregue variantes de prueba también.

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

también comentar aplicar tela

//apply plugin: 'io.fabric'
Krste Moskov
fuente
1
¿Cuáles son las variantes "normales"? ¿Para qué sirve el código android.testVariants.all {...} (para qué sirve)? ¿De dónde es este texto citado? ¿Puedes por favor actualizar la respuesta?
Ewoks el
He cambiado la ruta del Manifiesto para los chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI
1
Las variantes normales de @Ewoks son variantes de compilación (depuración / liberación) que utilizan un conjunto específico de reglas ... puede establecer muchas variantes diferentes (sabores). Además, puede crear conjuntos de origen de prueba que se dirigen a variantes de compilación específicas.
Krste Moskov
Sé sobre sabores, pero no estoy seguro de que esto se aplique aquí y cómo se relaciona. Es por eso que le pregunté si puede actualizar la respuesta aclarando qué fuente citó y corregir el formato (supongo que mezcló el formato del código con el comentario)
Ewoks
1
No hay garantía de que la tela fuera la fuente del problema. En realidad, con esta "solución" no tenemos idea de dónde estaba el problema. Además, no hay explicación de por qué hacer algo con testVariants y cómo se relaciona eso. Es por eso que la respuesta original de @KrsteMoskov es engañosa y se aplica solo a un caso de uso específico si resuelve algo. Para ayudarlo a "incorporarse", formateé su respuesta correctamente y dejé el contenido tal como lo escribió, para que otros puedan decidir si esto es útil para ellos
Ewoks,
2

Cuando el complemento detecta que está utilizando una API que ya no es compatible, ahora puede proporcionar información más detallada para ayudarlo a determinar dónde se está utilizando esa API. Para ver la información adicional, debe incluir lo siguiente en el archivo gradle.properties de su proyecto:

android.debug.obsoleteApi=true
Safari de hamed
fuente
donde build, gradle o app.gradle
Jithish PN
solo busque el archivo gradle.properties en su proyecto
Hamed safari
2

si elimino esta fila de application gradle:

apply plugin: 'io.fabric'

El error ya no aparecerá.

Enlace de referencia github

Muhammad Waleed
fuente
1
NO HAGA ESTO, de lo contrario, Crashlytics dejará de funcionar. Esto solo está ocultando el problema.
Roger Oba
2

Migra tu proyecto a androidX.

las dependencias se actualizan a androidX. así que si quieres usar contenido de androidX, migra tu proyecto a androidX.

Con Android Studio 3.2 y superior, puede migrar rápidamente un proyecto existente para usar AndroidX seleccionando Refactor> Migrar a AndroidX desde la barra de menú.

La reducción de dependencias puede solucionar su problema esta vez, pero no se recomienda

Adarsh ​​Vijayan P
fuente
1
Tengo AndroidX y sigo recibiendo el mensaje.
Jorgesys
1

Esto solucionó mi problema. Todo lo que tenía que hacer era degradar mi complemento de servicios de google en buildscript en el archivo de nivel build.gradle (Proyecto) de la siguiente manera

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
fuente
0

Aquí una solución temporal, si está utilizando la habitación, simplemente actualice a 1.1.0 o superior

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

me quita esta advertencia.

Sergio KS
fuente
Sí, cuando actualizo la versión, estas advertencias se han ido
Sergio KS
0

mantener su proyecto (no aplicación) Build.gradle dependences classpath version code es nuevo

 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
fuente
0

Esta es una pregunta popular. Si no utiliza estos métodos, la solución es actualizar las bibliotecas. Actualice su versión de kotlin y todas sus dependencias, como fabric , protobuf , etc. Si está seguro de haber actualizado todo, intente preguntar al autor de la biblioteca.

monyag
fuente
0

La actualización de protobuf-gradle-plugin a la versión 0.8.10 resolvió mi problema. Reemplace su protobuf existente con

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

Eso se debe principalmente a las bibliotecas que están obsoletas. Para buscar nuevas actualizaciones manualmente, debe navegar a

Analizar> "Ejecutar inspección por nombre"

ejecutar inspección por nombre resultado de Android

Eso debería bastar. Otra opción es ejecutar una actualización de dependencia de Gradle usando

./gradlew dependencyUpdates

eso producirá un informe 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
fuente
0

actualizar los servicios de google a nivel de proyecto build.gradleresolvió mi problema.

Después de actualizar:

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
fuente
0

Tuve el mismo problema y se resolvió definiendo la versión del complemento kotlin gradle en el archivo build.gradle.

cambia esto

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

a

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

En mi caso seguí esto . Resumen, en el nivel de la aplicación gradle: cambie esto:

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

a

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