Android: เลิกใช้แล้วไม่สามารถแปลงเป็นคำอธิบายประกอบ


11

ลงสู่ช่องกระต่ายของการย้ายไปยัง AndroidX ...

ฉันเกือบจะเสร็จสิ้นการโยกย้าย แต่พบข้อผิดพลาดเดียวที่ฉันไม่สามารถผ่านมาได้

ลองมาแล้วClean & RebuildและInvalidate Caches / Restart

ดูเหมือนว่ามีบางสิ่งที่กำลังฉีด @Deprecated ลงในไฟล์ R.java ซึ่งไม่รู้จัก

build.gradleไฟล์ของแอพยาว แต่นี่เป็นส่วนที่เกี่ยวข้อง (สามารถโพสต์ได้มากขึ้นถ้าเกี่ยวข้อง):


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'

        ...
    }
}


ฉันได้รับชุดข้อผิดพลาดจากคอมไพเลอร์ 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

ลิงก์ไปยัง R.java

ภาพหน้าจอของไฟล์ R.java

ฉันไม่ได้ใช้titleMarginsที่ใดก็ได้ในโครงการของฉัน เมื่อฉันทำการค้นหา@Deprecatedค่าจะปรากฏใน Android sdk และcom.google.android.materialส่วนที่มีอยู่.gradle/caches/เท่านั้น ฉันพยายามลบโฟลเดอร์นี้แล้วและจะปรากฏขึ้นอีกครั้งพร้อมกับคอมไพล์แต่ละไฟล์

ฉันคิดว่ามันมีบางอย่างที่เกี่ยวข้องกับ databinding แต่ฉันอยู่ที่นี่มาหลายวันแล้วและไม่สามารถหาสาเหตุได้

แหล่งที่มาสำหรับไฟล์ตัวประมวลผลคำอธิบายประกอบนั้นพบได้ที่นี่: ProcessDataBinding.java

อัปเดต 1

บทความนี้ดีในความเป็นจริงของการโยกย้ายไปยัง AndroidXอธิบายว่าเครื่องมือ jetifier Android เอ็กซ์ไม่ได้จัดการสร้างโค้ด ฉันได้เห็นโพสต์อื่น ๆ ที่เกี่ยวข้องเพื่อให้การจัดการกับปัญหาด้วยButterKnife, Daggerฯลฯ แต่เราไม่ได้ใช้ใด ๆ เหล่านี้ เรากำลังใช้ห้องสมุดข้อมูลที่รวบรวมและรวบรวมหลายแห่ง แต่ฉันไม่แน่ใจว่าแหล่งข้อมูลใดเป็นแหล่งอ้างอิงที่ไม่ดี ดังนั้นคำถามของฉันคือฉันจะค้นหาแหล่งที่มาของรหัสที่สร้างขึ้นและแก้ไขได้อย่างไร

อัปเดต 2

กลับไปที่โครงการ pre-AndroidX ดั้งเดิมข้อผิดพลาดนี้เกิดขึ้นจริงในการอัพเกรดไลบรารี่สนับสนุนเป็น 28 เพียงแค่เปลี่ยนสาย

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

ถึง

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

จะทำให้เกิดข้อผิดพลาดในการรวบรวม

ฉันได้พบกับตัวติดตามปัญหานี้: Databinding v2 สร้างข้อผิดพลาดเมื่อตัวประมวลผลคำอธิบายประกอบอื่นล้มเหลวซึ่งอาจเกี่ยวข้อง แต่ฉันยังไม่แน่ใจว่าจะแก้ไขได้อย่างไร


คุณกำลังใช้ปลั๊กอิน gradle ของ Android รุ่นใด
isaaaaame

มีคำสั่งนำเข้าสำหรับDeprecatedใน R.java หรือไม่
clownba0t

@isaaaaame Gradle plugin 3.5.2, Gradle เวอร์ชัน 5.6.3
Evelyn

คำตอบ:


0

เปลี่ยนสิ่งนี้:

compileOptions {
    dataBinding {
        enabled = true
    }
}

เป็นนี้

dataBinding {
    enabled = true
}
compileOptions {

}

และสำหรับcom.nextfaze.poweradaptersคุณจะต้องเปิดใช้งาน Jetifier ในgradle.properties:

android.useAndroidX=true
android.enableJetifier=true

ทำการเปลี่ยนแปลง และเปิดใช้งาน Jetifier ยังคงเป็นข้อผิดพลาดเดียวกัน
Evelyn

และถ้าคุณอ่าน Update 2 คุณจะเห็นว่ามันไม่ได้เกิดจาก AndroidX
Evelyn

0

สารละลาย :

build.gradle มี

dataBinding {
        enabled true
    }

gradle.properties มี

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

ฉันต่อสู้กับปัญหานี้มาหลายชั่วโมงแล้วก็แก้ไขมันได้ดังนี้:

ประกาศอินเทอร์เฟซที่ว่างเปล่าชั่วคราวสำหรับ DataBindingComponent ในโครงการของคุณ

package androidx.databinding;

public interface DataBindingComponent {
}

ปล่อยให้มันรวบรวมและข้อผิดพลาดจะหายไป แต่ตอนนี้ข้อผิดพลาดที่แท้จริงจะถูกเปิดเผย คนที่ทำให้เกิดปัญหาจริงๆ แต่ถูกกลืนไป ในกรณีของฉันมันมาจาก AutoValue แสดงว่าฉันใช้มันไม่ถูกต้อง

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

แก้ไขแล้วลบอินเทอร์เฟซดัมมี่ทำให้คอมไพเลอร์มีความสุขอีกครั้ง


ความคิดที่ดี แต่ยังคงแสดงข้อผิดพลาดสำหรับฉัน😭
Evelyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.