[gradle] Android : 더 이상 사용되지 않음을 주석으로 변환 할 수 없습니다

AndroidX로 마이그레이션하는 토끼 구멍을 잃어 버렸습니다 …

마이그레이션을 거의 완료했지만 하나의 오류가 발생하여 지나칠 수 없습니다.

이미 시도 Clean & Rebuild하고Invalidate Caches / Restart

인식되지 않는 R.java 파일에 @Deprecated를 주입 한 것 같습니다.

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/. 이 폴더를 삭제하려고 시도 할 때마다 컴파일 할 때마다 다시 나타납니다.

데이터 바인딩과 관련이 있다고 생각하지만 며칠 동안 사용했는데 원인을 찾을 수 없습니다.

내가 찾은 특정 주석 프로세서 파일의 소스 : ProcessDataBinding.java

업데이트 1

AndroidX 로의 마이그레이션 현실대한 이 훌륭한 기사 는 Android X의 제트기 도구 가 생성 된 코드를 처리하지 않는다고 설명합니다 . 나는 문제를 다루는 다른 관련 SO 게시물 보았다 ButterKnife, Dagger등,하지만 우리는이 중 하나를 사용하지. 우리는 여러 데이터 바인딩 및 컴파일 된 라이브러리를 사용하고 있지만 어느 것이 나쁜 참조의 소스인지 확실하지 않습니다. 내 질문은이 생성 된 코드의 소스를 어떻게 찾아서 수정합니까?

업데이트 2

원래 Android 이전 프로젝트로 돌아가서이 오류는 실제로 지원 라이브러리를 28로 업그레이드 할 때 발생합니다.

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

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

컴파일 오류가 발생합니다.

부스러기의 흔적을 따라이 문제 추적기를 발견했습니다. 다른 주석 프로세서가 실패 할 때 Databinding v2에서 오류가 발생 하지만 관련 문제는 여전히 확실하지 않습니다.



답변

이것을 변경하십시오 :

compileOptions {
    dataBinding {
        enabled = true
    }
}

이것으로 :

dataBinding {
    enabled = true
}
compileOptions {

}

그리고 com.nextfaze.poweradapters다음에서 Jetifier를 활성화해야합니다 gradle.properties.

android.useAndroidX=true
android.enableJetifier=true


답변

해결책 :

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

그것을 수정하고 더미 인터페이스를 제거하면 컴파일러가 다시 행복해집니다.


답변