Android: Không dùng nữa không thể chuyển đổi thành Chú thích


11

Đi xuống lỗ thỏ di chuyển sang AndroidX ...

Tôi đã gần hoàn thành việc di chuyển, nhưng gặp phải một lỗi mà tôi dường như không thể vượt qua.

Đã thử Clean & RebuildInvalidate Caches / Restart

Có vẻ như một cái gì đó đang tiêm @Deprecated vào tệp R.java không được nhận dạng.

Tệp của ứng dụng build.gradledài nhưng đây là các phần có liên quan (có thể đăng thêm nếu có liên quan):


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'

        ...
    }
}


Tôi nhận được một loạt lỗi từ trình biên dịch 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

liên kết đến R.java

Ảnh chụp màn hình tệp R.java

Tôi đã không sử dụng titleMarginsbất cứ nơi nào trong dự án của tôi. Khi tôi thực hiện tìm kiếm, các @Deprecatedgiá trị chỉ hiển thị trong sdk và com.google.android.materialcác tạo phẩm của Android , có trong .gradle/caches/. Tôi đã thử xóa thư mục này và nó xuất hiện lại với mỗi lần biên dịch.

Tôi nghĩ rằng nó có liên quan đến cơ sở dữ liệu, nhưng tôi đã ở đó nhiều ngày và không thể tìm ra nguyên nhân.

Nguồn cho tệp bộ xử lý chú thích cụ thể mà tôi tìm thấy ở đây: ProcessDataBinding.java

Cập nhật 1

Bài viết tuyệt vời này về Thực tế di chuyển sang AndroidX giải thích rằng công cụ phản lực của Android X không xử lý mã được tạo . Tôi đã thấy bài viết SO liên quan khác đối phó với các vấn đề với ButterKnife, Dagger, vv, nhưng chúng tôi không sử dụng bất kỳ trong số này. Chúng tôi đang sử dụng một số thư viện dữ liệu và biên dịch, nhưng tôi không chắc cái nào là nguồn gốc của các tài liệu tham khảo xấu. Vì vậy, câu hỏi của tôi là làm thế nào để tôi tìm được nguồn của mã được tạo này và sửa nó?

Cập nhật 2

Quay trở lại dự án tiền AndroidX ban đầu, lỗi này thực sự xảy ra khi nâng cấp thư viện hỗ trợ lên 28. Chỉ cần thay đổi dòng

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

đến

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

sẽ kích hoạt lỗi biên dịch.

Lần theo dấu vết vụn vỡ, tôi đã bắt gặp trình theo dõi vấn đề này: Databinding v2 tạo ra lỗi khi một bộ xử lý chú thích khác có thể liên quan nhưng tôi vẫn không biết cách khắc phục.


Phiên bản nào của plugin gradle Android bạn đang sử dụng?
isaaaaame

Có một tuyên bố nhập khẩu cho Deprecatedtrong R.java?
clownba0t

@isaaaaame Gradle plugin 3.5.2, Phiên bản Gradle 5.6.3
Evelyn

Câu trả lời:


0

Thay đổi cai nay đi:

compileOptions {
    dataBinding {
        enabled = true
    }
}

Vào đây:

dataBinding {
    enabled = true
}
compileOptions {

}

Và đối với com.nextfaze.poweradaptersbạn, bạn cần kích hoạt Jetifier trong gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Thực hiện thay đổi. Và Jetifier được kích hoạt. Vẫn cùng một lỗi.
Evelyn

Và nếu bạn đọc Cập nhật 2, bạn sẽ thấy rằng nó không phải do AndroidX gây ra.
Evelyn

0

Giải pháp :

build.gradle chứa

dataBinding {
        enabled true
    }

gradle.properies chứa

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

Tôi đã chiến đấu với vấn đề này trong nhiều giờ và sau đó giải quyết nó như sau:

Tạm thời khai báo một giao diện trống cho DataBindingComponent trong Dự án của bạn.

package androidx.databinding;

public interface DataBindingComponent {
}

Hãy để nó biên dịch và lỗi sẽ biến mất. Nhưng bây giờ lỗi gốc thực sự sẽ được tiết lộ. Người thực sự gây ra tất cả rắc rối nhưng bằng cách nào đó đã bị nuốt chửng. Trong trường hợp của tôi, nó đến từ AutoValue chỉ ra rằng tôi đã sử dụng nó không đúng cách

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

sửa lỗi đó và sau đó loại bỏ giao diện giả làm cho trình biên dịch vui vẻ trở lại.


Ý kiến ​​hay, nhưng vẫn hiển thị lỗi cho tôi
Evelyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.