Android: Veraltet kann nicht in Annotation konvertiert werden

11

Das Kaninchenloch der Migration auf AndroidX ist verschwunden ...

Ich habe die Migration fast abgeschlossen, aber es tritt ein Fehler auf, an dem ich scheinbar nicht vorbeikomme.

Schon ausprobiert Clean & RebuildundInvalidate Caches / Restart

Es sieht so aus, als würde etwas @Deprecated in die nicht erkannte R.java-Datei injizieren.

Die build.gradleDatei der App ist lang, aber hier sind relevante Teile (kann bei Bedarf mehr posten):


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'

        ...
    }
}


Ich erhalte eine Reihe von Fehlern vom Kotlin-Compiler

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

welches Links zu R.java

Screenshot der R.java-Datei

Ich habe titleMarginsnirgendwo in meinem Projekt verwendet. Wenn ich eine Suche durchführe, werden die @DeprecatedWerte nur im Android SDK und in den darin com.google.android.materialenthaltenen Artefakten angezeigt .gradle/caches/. Ich habe versucht, diesen Ordner zu löschen, und er wird bei jeder Kompilierung erneut angezeigt.

Ich denke, es hat etwas mit Datenbindung zu tun, aber ich bin schon seit Tagen dabei und kann keine Ursache finden.

Die Quelle für diese bestimmte Annotationsprozessordatei habe ich hier gefunden: ProcessDataBinding.java

Update 1

In diesem großartigen Artikel über die Realität der Migration auf AndroidX wird erklärt, dass das Jetifier-Tool von Android X keinen generierten Code verarbeitet . Ich habe andere damit zusammenhängende SO Beiträge mit Fragen gesehen mit ButterKnife, Daggerusw, aber wir sind nicht davon verwenden. Wir verwenden mehrere Datenbindungs- und kompilierte Bibliotheken, aber ich bin mir nicht sicher, welche die Ursache für die schlechten Referenzen ist. Meine Frage ist also, wie ich die Quelle dieses generierten Codes finde und behebe.

Update 2

Zurück zum ursprünglichen Projekt vor AndroidX: Dieser Fehler tritt tatsächlich beim Upgrade der Support-Bibliothek auf 28 auf. Ändern Sie einfach die Zeile

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

zu

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

löst den Kompilierungsfehler aus.

Nach einer Reihe von Krümeln bin ich auf diesen Problem-Tracker gestoßen : Die Datenbindung v2 führt zu Fehlern, wenn ein anderer Anmerkungsprozessor ausfällt, was möglicherweise damit zusammenhängt, aber ich bin mir immer noch nicht sicher, wie ich das Problem beheben kann.

Evelyn
quelle
Welche Version des Android Gradle Plugins verwenden Sie?
isaaaaame
Gibt es eine Importanweisung für Deprecatedin R.java?
Clownba0t
@isaaaaame Gradle Plugin 3.5.2, Gradle Version 5.6.3
Evelyn

Antworten:

0

Ändere das:

compileOptions {
    dataBinding {
        enabled = true
    }
}

Das sehr gut finden:

dataBinding {
    enabled = true
}
compileOptions {

}

Und für com.nextfaze.poweradaptersSie müssten Sie den Jetifier aktivieren in gradle.properties:

android.useAndroidX=true
android.enableJetifier=true
Martin Zeitler
quelle
Die Änderung vorgenommen. Und Jetifier ist aktiviert. Immer noch der gleiche Fehler.
Evelyn
Und wenn Sie Update 2 lesen, werden Sie feststellen, dass es nicht durch AndroidX verursacht wird.
Evelyn
0

Lösung:

build.gradle enthält

dataBinding {
        enabled true
    }

gradle.properties enthält

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

Ich habe stundenlang gegen das Problem gekämpft und es dann wie folgt gelöst:

Deklarieren Sie vorübergehend eine leere Schnittstelle für DataBindingComponent in Ihrem Projekt.

package androidx.databinding;

public interface DataBindingComponent {
}

Lassen Sie es kompilieren und der Fehler wird verschwunden sein. Aber jetzt wird der eigentliche Grundfehler aufgedeckt. Derjenige, der tatsächlich den ganzen Ärger verursachte, aber irgendwie verschluckt wurde. In meinem Fall kam es von AutoValue und zeigte an, dass ich es falsch verwendet habe

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

Das zu beheben und dann die Dummy-Schnittstelle zu entfernen, macht den Compiler wieder glücklich.

R. Desai
quelle
Gute Idee, zeigt aber immer noch den Fehler für mich 😭
Evelyn