Android: en desuso no se puede convertir a Anotación

11

Se fue por la madriguera del conejo de migrar a AndroidX ...

Casi he completado la migración, pero me encuentro con un error que parece que no puedo superar.

Ya probé Clean & RebuildyInvalidate Caches / Restart

Parece que algo está inyectando @Deprecated en el archivo R.java que no se reconoce.

El build.gradlearchivo de la aplicación es largo, pero aquí hay partes relevantes (puede publicar más si es relevante):


android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 29
    }
    compileOptions {

        dataBinding {
            enabled = true
        }

    }
    dependencies {

        ...

        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        implementation 'com.google.android.material:material:1.2.0-alpha01'


        def rxlifecycleVersion = "3.1.0"
        implementation "io.reactivex.rxjava3:rxjava:3.0.0-RC4"
        implementation "com.trello.rxlifecycle3:rxlifecycle:$rxlifecycleVersion"
        implementation "com.trello.rxlifecycle3:rxlifecycle-kotlin:$rxlifecycleVersion"
        implementation "com.trello.rxlifecycle3:rxlifecycle-android:$rxlifecycleVersion"
        implementation "com.trello.rxlifecycle3:rxlifecycle-components:$rxlifecycleVersion"

        implementation(name: 'SectionCursorAdapter-3.0.0', ext: 'aar')

        implementation 'com.nextfaze.poweradapters:power-adapters:0.24.1'
        implementation 'com.nextfaze.poweradapters:power-adapters-data:0.24.1'
        implementation 'com.nextfaze.poweradapters:power-adapters-recyclerview-v7:0.24.1'
        implementation 'com.nextfaze.poweradapters:power-adapters-support-v4:0.24.1'

        ...
    }
}


Recibo una serie de errores del compilador de Kotlin

e: /.../R.java:6187: error: incompatible types: Deprecated cannot be converted to Annotation
    @Deprecated
     ^
e: /.../R.java:28468: error: incompatible types: Deprecated cannot be converted to Annotation
    @Deprecated
     ^
e: /.../R.java:28882: error: incompatible types: Deprecated cannot be converted to Annotation
    @Deprecated
     ^
e: java.lang.IllegalStateException: failed to analyze: java.lang.NullPointerException
    at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:56)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:182)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:164)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:54)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1558)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at android.databinding.annotationprocessor.ProcessDataBinding.getSupportedOptions(ProcessDataBinding.java:219)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.getSupportedOptions(incrementalProcessors.kt)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.createDependencyCollector(incrementalProcessors.kt:44)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.access$createDependencyCollector(incrementalProcessors.kt:22)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor$dependencyCollector$1.invoke(incrementalProcessors.kt:24)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor$dependencyCollector$1.invoke(incrementalProcessors.kt:22)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.getRuntimeType(incrementalProcessors.kt:69)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalAptCache.updateCache(IncrementalAptCache.kt:26)
    at org.jetbrains.kotlin.kapt3.base.incremental.JavaClassCacheManager.updateCache(cache.kt:22)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:87)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:35)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:230)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:188)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:99)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:96)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:106)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:81)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:555)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:82)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:546)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:177)
    ... 23 more

que enlaza con R.java

Captura de pantalla del archivo R.java

No he usado titleMarginsen ninguna parte de mi proyecto. Cuando hago una búsqueda, los @Deprecatedvalores solo se muestran en el sdk y los com.google.android.materialartefactos de Android contenidos en .gradle/caches/. Intenté eliminar esta carpeta y aparece de nuevo con cada compilación.

Creo que tiene algo que ver con la vinculación de datos, pero he estado trabajando durante días y no puedo encontrar una causa.

La fuente de ese archivo de procesador de anotaciones en particular que encontré aquí: ProcessDataBinding.java

Actualización 1

Este excelente artículo sobre La realidad de migrar a AndroidX explica que la herramienta de chorro de Android X no maneja el código generado . He visto otros mensajes tan relacionados que se ocupan de los problemas con ButterKnife, Dagger, etc, pero no estamos utilizando cualquiera de estos. Estamos utilizando varias bibliotecas de enlace de datos y compiladas, pero no estoy seguro de cuál es la fuente de las referencias incorrectas. Entonces, mi pregunta es ¿cómo encuentro la fuente de este código generado y lo soluciono?

Actualización 2

Volviendo al proyecto original anterior a AndroidX, este error realmente ocurre al actualizar la biblioteca de soporte a 28. Simplemente cambiando la línea

implementation "com.android.support:appcompat-v7:27.1.1"

a

implementation "com.android.support:appcompat-v7:28.0.0"

activará el error de compilación.

Siguiendo un rastro de migajas me encontré con este rastreador de problemas: Databinding v2 produce errores cuando falla otro procesador de anotaciones que puede estar relacionado, pero todavía no estoy seguro de cómo solucionarlo.

Evelyn
fuente
¿Qué versión de Android Gradle Plugin estás usando?
isaaaaame
¿Hay una declaración de importación para Deprecateden R.java?
clownba0t
@isaaaaame Gradle plugin 3.5.2, Gradle Versión 5.6.3
Evelyn

Respuestas:

0

Cambia esto:

compileOptions {
    dataBinding {
        enabled = true
    }
}

Dentro de esto:

dataBinding {
    enabled = true
}
compileOptions {

}

Y para com.nextfaze.poweradaptersque necesite habilitar el Jetifier en gradle.properties:

android.useAndroidX=true
android.enableJetifier=true
Martin Zeitler
fuente
Hizo el cambio. Y Jetifier está habilitado. Sigue siendo el mismo error.
Evelyn
Y si lee la Actualización 2, verá que no está causada por AndroidX.
Evelyn
0

Solución:

build.gradle contiene

dataBinding {
        enabled true
    }

gradle.properties contiene

android.useAndroidX=true
android.enableJetifier=true
android.databinding.enableV2=true

He estado luchando contra el problema durante horas y luego lo resolví de la siguiente manera:

Declare temporalmente una interfaz vacía para DataBindingComponent en su proyecto.

package androidx.databinding;

public interface DataBindingComponent {
}

Deja que se compile y el error desaparecerá. Pero ahora se revelará el error raíz real. El que en realidad estaba causando todos los problemas, pero de alguna manera fue tragado. En mi caso, provenía de AutoValue, lo que indica que lo estaba usando incorrectamente

error: Parameter type java.lang.Boolean of setter method should be boolean to match getter

arreglar eso y luego quitar la interfaz ficticia hace que el compilador vuelva a ser feliz.

R.Desai
fuente
Buena idea, pero aún muestra el error para mí Eve
Evelyn