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?


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



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'
    }
}

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


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.


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.


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'
    }
}

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'
}

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


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

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


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'

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í


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'

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


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


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'

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

donde build, gradle o app.gradle
Jithish PN

solo busque el archivo gradle.properties en su proyecto
Hamed safari


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


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'
    }
}

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.


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
}

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.


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'

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]

...

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
}

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}"

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 { 
        ....
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.