Android: Sudah usang tidak dapat dikonversi ke Anotasi

11

Pergi ke lubang kelinci migrasi ke AndroidX ...

Saya hampir menyelesaikan migrasi, tetapi mengalami satu kesalahan yang sepertinya tidak bisa saya lewati.

Sudah mencoba Clean & RebuilddanInvalidate Caches / Restart

Sepertinya ada sesuatu yang menyuntikkan @Deprecated ke file R.java yang tidak dikenali.

File aplikasi build.gradlepanjang 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

Tangkapan layar file R.java

Saya belum pernah menggunakan titleMarginsproyek saya di mana pun. Ketika saya melakukan pencarian, @Deprecatednilai - nilai hanya muncul di SDK Android dan com.google.android.materialartefak, 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.

Evelyn
sumber
Plugin Android gradle versi apa yang Anda gunakan?
isaaaaame
Apakah ada pernyataan impor untuk Deprecateddi R.java?
clownba0t
@isaaaaame Gradle plugin 3.5.2, Gradle Versi 5.6.3
Evelyn

Jawaban:

0

Ubah ini:

compileOptions {
    dataBinding {
        enabled = true
    }
}

Ke dalam ini:

dataBinding {
    enabled = true
}
compileOptions {

}

Dan untuk itu com.nextfaze.poweradaptersAnda harus mengaktifkan Jetifier di gradle.properties:

android.useAndroidX=true
android.enableJetifier=true
Martin Zeitler
sumber
Buat perubahan. Dan Jetifier diaktifkan. Masih kesalahan yang sama.
Evelyn
Dan jika Anda membaca Pembaruan 2 Anda akan melihat bahwa itu bukan disebabkan oleh AndroidX.
Evelyn
0

Solusi:

build.gradle berisi

dataBinding {
        enabled true
    }

gradle.properties berisi

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

Saya telah melawan masalah ini selama berjam-jam dan kemudian menyelesaikannya sebagai berikut:

Secara sementara mendeklarasikan antarmuka kosong untuk DataBindingComponent di Proyek Anda.

package androidx.databinding;

public interface DataBindingComponent {
}

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

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

memperbaikinya dan kemudian menghapus antarmuka dummy membuat kompiler senang lagi.

Selesai
sumber
Ide bagus, tetapi masih menunjukkan kesalahan untuk saya 😭
Evelyn