Pergi ke lubang kelinci migrasi ke AndroidX ...
Saya hampir menyelesaikan migrasi, tetapi mengalami satu kesalahan yang sepertinya tidak bisa saya lewati.
Sudah mencoba Clean & Rebuild
danInvalidate Caches / Restart
Sepertinya ada sesuatu yang menyuntikkan @Deprecated ke file R.java yang tidak dikenali.
File aplikasi build.gradle
panjang tetapi ini bagian yang relevan (dapat memposting lebih banyak jika relevan):
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'
...
}
}
Saya mendapatkan serangkaian kesalahan dari kompiler 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
yang terhubung ke R.java
Saya belum pernah menggunakan titleMargins
proyek saya di mana pun. Ketika saya melakukan pencarian, @Deprecated
nilai - nilai hanya muncul di SDK Android dan com.google.android.material
artefak, yang terkandung dalam .gradle/caches/
. Saya sudah mencoba menghapus folder ini dan muncul kembali dengan setiap kompilasi.
Saya pikir itu ada hubungannya dengan penyatuan data, tapi saya sudah melakukannya selama berhari-hari dan tidak dapat menemukan penyebabnya.
Sumber untuk file prosesor anotasi tertentu yang saya temukan di sini: ProcessDataBinding.java
Perbarui 1
Artikel hebat tentang Realitas Migrasi ke AndroidX ini menjelaskan bahwa alat jetifier Android X tidak menangani kode yang dihasilkan . Saya telah melihat posting SO terkait lainnya berurusan dengan masalah dengan ButterKnife
, Dagger
, dll, tapi kami tidak menggunakan ini. Kami menggunakan beberapa perpustakaan penyatuan data dan kompilasi, tapi saya tidak yakin yang mana yang merupakan sumber referensi buruk. Jadi pertanyaan saya adalah bagaimana cara menemukan sumber kode yang dihasilkan ini dan memperbaikinya?
Perbarui 2
Kembali ke proyek pra-AndroidX asli, kesalahan ini sebenarnya terjadi dalam memutakhirkan perpustakaan dukungan menjadi 28. Hanya mengubah garis
implementation "com.android.support:appcompat-v7:27.1.1"
untuk
implementation "com.android.support:appcompat-v7:28.0.0"
akan memicu kesalahan kompilasi.
Mengikuti jejak remah-remah, saya menemukan pelacak masalah ini: Penyatuan data v2 menghasilkan kesalahan ketika prosesor anotasi lain gagal yang mungkin terkait tetapi saya masih tidak yakin bagaimana cara memperbaikinya.
Deprecated
di R.java?Jawaban:
Ubah ini:
Ke dalam ini:
Dan untuk itu
com.nextfaze.poweradapters
Anda harus mengaktifkan Jetifier digradle.properties
:sumber
Solusi:
Saya telah melawan masalah ini selama berjam-jam dan kemudian menyelesaikannya sebagai berikut:
Secara sementara mendeklarasikan antarmuka kosong untuk DataBindingComponent di Proyek Anda.
Biarkan dikompilasi dan kesalahan akan hilang. Tapi sekarang kesalahan root yang sebenarnya akan terungkap. Yang benar-benar menyebabkan semua masalah tetapi entah bagaimana ditelan. Dalam kasus saya, itu berasal dari AutoValue yang menunjukkan bahwa saya salah menggunakannya
memperbaikinya dan kemudian menghapus antarmuka dummy membuat kompiler senang lagi.
sumber