Android: obsolète ne peut pas être converti en annotation

11

Descendu le trou du lapin de la migration vers AndroidX ...

J'ai presque terminé la migration, mais j'ai rencontré une erreur que je n'arrive pas à surmonter.

Déjà essayé Clean & RebuildetInvalidate Caches / Restart

Il semble que quelque chose injecte @Deprecated dans le fichier R.java qui n'est pas reconnu.

Le build.gradlefichier de l'application est long, mais voici les parties pertinentes (vous pouvez en publier plus si nécessaire):


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'

        ...
    }
}


Je reçois une série d'erreurs du compilateur 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

qui relie à R.java

Capture d'écran du fichier R.java

Je ne l'ai utilisé titleMarginsnulle part dans mon projet. Lorsque je fais une recherche, les @Deprecatedvaleurs n'apparaissent que dans le SDK Android et les com.google.android.materialartefacts contenus dans .gradle/caches/. J'ai essayé de supprimer ce dossier et il réapparaît à chaque compilation.

Je pense que cela a quelque chose à voir avec la liaison de données, mais j'y travaille depuis des jours et je suis incapable de trouver une cause.

La source de ce fichier de processeur d'annotation particulier que j'ai trouvé ici: ProcessDataBinding.java

Mise à jour 1

Ce grand article sur la réalité de la migration vers AndroidX explique que l'outil de jetifier d'Android X ne gère pas le code généré . J'ai vu d' autres postes connexes de SO traitant des problèmes avec ButterKnife, Dagger, etc, mais nous n'utilisons aucune de ces derniers . Nous utilisons plusieurs bibliothèques de liaisons de données et compilées, mais je ne sais pas laquelle est la source des mauvaises références. Donc, ma question est de savoir comment trouver la source de ce code généré et le corriger?

Mise à jour 2

Pour revenir au projet d'origine pré-AndroidX, cette erreur se produit en fait lors de la mise à niveau de la bibliothèque de support vers 28. Il suffit de changer la ligne

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

à

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

déclenchera l'erreur de compilation.

Suite à une traînée de miettes, je suis tombé sur ce tracker de problème: Databinding v2 produit des erreurs lorsqu'un autre processeur d'annotation tombe en panne, ce qui peut être lié, mais je ne sais toujours pas comment le corriger.

Evelyn
la source
Quelle version du plugin Android Gradle utilisez-vous?
isaaaaame
Existe-t-il une déclaration d'importation pour Deprecateddans R.java?
clownba0t
@isaaaaame Gradle plugin 3.5.2, Gradle Version 5.6.3
Evelyn

Réponses:

0

Change ça:

compileOptions {
    dataBinding {
        enabled = true
    }
}

En cela:

dataBinding {
    enabled = true
}
compileOptions {

}

Et pour cela, com.nextfaze.poweradaptersvous devez activer le Jetifier dans gradle.properties:

android.useAndroidX=true
android.enableJetifier=true
Martin Zeitler
la source
J'ai fait le changement. Et Jetifier est activé. Toujours la même erreur.
Evelyn
Et si vous lisez la mise à jour 2, vous verrez qu'elle n'est pas causée par AndroidX.
Evelyn
0

Solution :

build.gradle contient

dataBinding {
        enabled true
    }

gradle.properties contient

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

Je lutte contre le problème depuis des heures, puis je l'ai résolu comme suit:

Déclarez temporairement une interface vide pour DataBindingComponent dans votre projet.

package androidx.databinding;

public interface DataBindingComponent {
}

Laissez-le compiler et l'erreur disparaîtra. Mais maintenant, l'erreur racine réelle sera révélée. Celui qui causait tous les ennuis mais qui a été avalé. Dans mon cas, cela provenait d'AutoValue indiquant que je ne l'utilisais pas correctement

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

corriger cela, puis supprimer l'interface factice rend le compilateur à nouveau heureux.

R.Desai
la source
Bonne idée, mais montre toujours l'erreur pour moi 😭
Evelyn