Android:已弃用的不能转换为注释

时间:2019-10-31 20:32:59

标签: gradle data-binding androidx android-jetifier

放弃了迁移到AndroidX的烦恼...

我几乎完成了迁移,但是遇到一个错误,我似乎无法逾越。

已经尝试过ifin

似乎将@Deprecated注入​​到无法识别的R.java文件中。

该应用的Clean & Rebuild文件很长,但这是相关部分(如果相关,可以发布更多内容):

Invalidate Caches / Restart

我从Kotlin编译器中得到了一系列错误

build.gradle

链接到R.java

R.java file screenshot

我在项目的任何地方都没有使用过 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' ... } } 。当我进行搜索时,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 值仅显示在titleMargins中包含的Android sdk和@Deprecated中。我尝试删除此文件夹,并且每次编译时它都会再次出现。

我认为这与数据绑定有关,但是我已经使用了几天,并且无法找到原因。

我在这里找到的特定注释处理器文件的来源:ProcessDataBinding.java

更新1

这篇关于The Reality of Migrating to AndroidX的出色文章解释说,Android X的过滤器工具不处理生成的代码。我已经看到其他相关的SO帖子处理com.google.android.material.gradle/caches/等问题,但是我们没有使用其中的任何一个。我们正在使用几个数据绑定和编译库,但是我不确定哪个是错误引用的来源。所以我的问题是如何找到此生成代码的源并进行修复?

更新2

回到原始的AndroidX之前的项目,此错误实际上是在将支持库升级到28时发生的。只是更改了行

ButterKnife

Dagger

将触发编译错误。

在发现碎屑的过程中,我遇到了一个与此相关的问题跟踪器:Databinding v2 produces errors when another annotation processor fails,但我仍然不确定如何解决它。

2 个答案:

答案 0 :(得分:0)

更改此:

compileOptions {
    dataBinding {
        enabled = true
    }
}

对此:

dataBinding {
    enabled = true
}
compileOptions {

}

对于com.nextfaze.poweradapters,您需要在gradle.properties中启用Jetifier:

android.useAndroidX=true
android.enableJetifier=true

答案 1 :(得分: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

修复此问题,然后删除虚拟接口使编译器再次感到高兴。