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 & Rebuild
undInvalidate Caches / Restart
Es sieht so aus, als würde etwas @Deprecated in die nicht erkannte R.java-Datei injizieren.
Die build.gradle
Datei 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
Ich habe titleMargins
nirgendwo in meinem Projekt verwendet. Wenn ich eine Suche durchführe, werden die @Deprecated
Werte nur im Android SDK und in den darin com.google.android.material
enthaltenen 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
, Dagger
usw, 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.
Deprecated
in R.java?Antworten:
Ändere das:
Das sehr gut finden:
Und für
com.nextfaze.poweradapters
Sie müssten Sie den Jetifier aktivieren ingradle.properties
:quelle
Lösung:
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.
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
Das zu beheben und dann die Dummy-Schnittstelle zu entfernen, macht den Compiler wieder glücklich.
quelle