Android: nieaktualne nie można przekonwertować na adnotację

11

Minęła królicza nora migracji do AndroidaX ...

Prawie ukończyłem migrację, ale napotkałem jeden błąd, którego nie udało mi się przejść.

Już próbowałem Clean & RebuildiInvalidate Caches / Restart

Wygląda na to, że coś wstrzykuje @Deprecated do pliku R.java, który nie jest rozpoznawany.

Plik aplikacji build.gradlejest długi, ale tutaj są odpowiednie części (w razie potrzeby można opublikować więcej):


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'

        ...
    }
}


Otrzymuję serię błędów z kompilatora 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

który prowadzi do R.java

Zrzut ekranu pliku R.java

titleMarginsNigdzie nie korzystałem z mojego projektu. Kiedy przeprowadzam wyszukiwanie, @Deprecatedwartości pojawiają się tylko w sdk i com.google.android.materialartefaktach Androida zawartych w .gradle/caches/. Próbowałem usunąć ten folder i pokazuje się ponownie przy każdej kompilacji.

Myślę, że ma to coś wspólnego z wiązaniem danych, ale byłem przy tym od wielu dni i nie jestem w stanie znaleźć przyczyny.

Źródło tego konkretnego pliku procesora adnotacji znalazłem tutaj: ProcessDataBinding.java

Aktualizacja 1

Ten świetny artykuł na temat Rzeczywistości migracji do systemu AndroidX wyjaśnia, że ​​narzędzie do rozpylania systemu Android X nie obsługuje wygenerowanego kodu . Widziałem inne powiązane posty SO zajmujących się zagadnieniami z ButterKnife, Daggeritp, ale nie używamy żadnego z nich. Używamy kilku bibliotek do wiązania danych i bibliotek skompilowanych, ale nie jestem pewien, która z nich jest źródłem złych referencji. Więc moje pytanie brzmi: jak znaleźć źródło tego wygenerowanego kodu i go naprawić?

Aktualizacja 2

Wracając do pierwotnego projektu sprzed AndroidaX, ten błąd faktycznie występuje podczas aktualizacji biblioteki wsparcia do 28. Po prostu zmiana linii

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

do

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

wywoła błąd kompilacji.

Podążając śladami okruchów natknąłem się na ten moduł do śledzenia problemów: Databinding v2 powoduje błędy, gdy inny procesor adnotacji zawiedzie, co może być powiązane, ale nadal nie jestem pewien, jak to naprawić.

Evelyn
źródło
Jakiej wersji wtyczki gradowej Androida używasz?
isaaaaame
Czy Deprecatedw R.java istnieje instrukcja importu ?
clownba0t,
@isaaaaame Gradle plugin 3.5.2, wersja Gradle 5.6.3
Evelyn

Odpowiedzi:

0

Zmień to:

compileOptions {
    dataBinding {
        enabled = true
    }
}

Zaangażowany w to:

dataBinding {
    enabled = true
}
compileOptions {

}

A ponieważ com.nextfaze.poweradaptersmusisz włączyć Jetifier w gradle.properties:

android.useAndroidX=true
android.enableJetifier=true
Martin Zeitler
źródło
Dokonał zmiany. I Jetifier jest włączony. Wciąż ten sam błąd.
Evelyn
A jeśli przeczytasz aktualizację 2, zobaczysz, że nie jest to spowodowane AndroidX.
Evelyn
0

Rozwiązanie :

build.gradle zawiera

dataBinding {
        enabled true
    }

gradle.properties zawiera

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

Walczyłem z tym problemem od wielu godzin, a następnie rozwiązałem go w następujący sposób:

Tymczasowo zadeklaruj pusty interfejs dla DataBindingComponent w swoim projekcie.

package androidx.databinding;

public interface DataBindingComponent {
}

Niech się skompiluje, a błąd zniknie. Ale teraz ujawniony zostanie rzeczywisty błąd roota. Ten, który faktycznie powodował wszystkie kłopoty, ale jakoś został połknięty. W moim przypadku pochodziło z AutoValue wskazując, że używałem go niepoprawnie

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

naprawienie tego, a następnie usunięcie fikcyjnego interfejsu sprawia, że ​​kompilator znów jest szczęśliwy.

R.Desai
źródło
Dobry pomysł, ale wciąż pokazuje mi błąd 😭
Evelyn,