Android: obsoleto non può essere convertito in annotazione


11

Andato giù nella tana del coniglio durante la migrazione ad AndroidX ...

Ho quasi completato la migrazione, ma ho riscontrato un errore che non riesco a superare.

Già provato Clean & RebuildeInvalidate Caches / Restart

Sembra che qualcosa stia iniettando @Deprecated nel file R.java che non è riconosciuto.

Il build.gradlefile dell'app è lungo ma qui ci sono parti pertinenti (puoi pubblicare di più se pertinente):


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'

        ...
    }
}


Ricevo una serie di errori dal compilatore di 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

che collega a R.java

Schermata del file R.java

Non ho usato da titleMarginsnessuna parte nel mio progetto. Quando eseguo una ricerca, i @Deprecatedvalori vengono visualizzati solo in Android sdk e com.google.android.materialartefatti, contenuti in .gradle/caches/. Ho provato a eliminare questa cartella e si presenta di nuovo con ogni compilazione.

Penso che abbia qualcosa a che fare con il databinding, ma ci provo da giorni e non riesco a trovare una causa.

La fonte per quel particolare file del processore di annotazione che ho trovato qui: ProcessDataBinding.java

Aggiornamento 1

Questo fantastico articolo su La realtà della migrazione ad AndroidX spiega che lo strumento Jetifier di Android X non gestisce il codice generato . Ho visto altri post SO correlati che si occupano di problemi con ButterKnife, Dagger, ecc, ma non si sta usando uno di questi. Stiamo usando diverse librerie di database e compilate, ma non sono sicuro di quale sia la fonte dei riferimenti errati. Quindi la mia domanda è: come posso trovare l'origine di questo codice generato e risolverlo?

Aggiornamento 2

Tornando al progetto pre-AndroidX originale, questo errore si verifica in realtà durante l'aggiornamento della libreria di supporto a 28. Basta cambiare la linea

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

per

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

attiverà l'errore di compilazione.

Seguendo una scia di briciole mi sono imbattuto in questo tracker di problemi: Databinding v2 produce errori in caso di errore di un altro processore di annotazione che potrebbe essere correlato ma non sono ancora sicuro di come risolverlo.


Quale versione del plug-in Android Gradle stai usando?
isaaaaame,

Esiste una dichiarazione di importazione per Deprecatedin R.java?
clownba0t

@isaaaaame Gradle plugin 3.5.2, Gradle Versione 5.6.3
Evelyn

Risposte:


0

Cambia questo:

compileOptions {
    dataBinding {
        enabled = true
    }
}

In questo:

dataBinding {
    enabled = true
}
compileOptions {

}

E perché com.nextfaze.poweradaptersavresti bisogno di abilitare Jetifier in gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Fatto il cambiamento. E Jetifier è abilitato. Ancora lo stesso errore.
Evelyn,

E se leggi l'aggiornamento 2 vedrai che non è causato da AndroidX.
Evelyn,

0

Soluzione:

build.gradle contiene

dataBinding {
        enabled true
    }

contiene gradle.properties

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

Ho combattuto il problema per ore e poi l'ho risolto come segue:

Dichiarare temporaneamente un'interfaccia vuota per DataBindingComponent nel progetto.

package androidx.databinding;

public interface DataBindingComponent {
}

Lascialo compilare e l'errore sparirà. Ma ora verrà rivelato il vero errore di root. Quello che stava effettivamente causando tutti i problemi, ma è stato in qualche modo ingoiato. Nel mio caso veniva da AutoValue a indicare che lo stavo usando in modo errato

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

risolverlo e quindi rimuovere l'interfaccia fittizia rende di nuovo felice il compilatore.


Buona idea, ma mostra ancora l'errore per me 😭
Evelyn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.