Android: पदावनत को एनोटेशन में नहीं बदला जा सकता है


11

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'

        ...
    }
}


मुझे कोटलिन संकलक से त्रुटियों की एक श्रृंखला मिलती है

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मान केवल एंड्रॉइड एसडीके और com.google.android.materialकलाकृतियों में दिखाई देते हैं, जिसमें निहित होता है .gradle/caches/। मैंने इस फ़ोल्डर को हटाने की कोशिश की है और यह प्रत्येक संकलन के साथ फिर से दिखाई देता है।

मुझे लगता है कि डेटाबाइंडिंग के साथ इसका कुछ लेना-देना है, लेकिन मैं दिनों से इसके साथ हूं और इसका कारण नहीं खोज पा रहा हूं।

उस विशेष एनोटेशन प्रोसेसर फ़ाइल का स्रोत मुझे यहाँ मिला: ProcessDataBinding.java

अपडेट १

द रियलिटी ऑफ माइग्रेटिंग टू एंड्रॉइडएक्स का यह शानदार लेख बताता है कि एंड्रॉइड एक्स के जेटिफायर टूल जनरेट किए गए कोड को हैंडल नहीं करता है । मैं अन्य संबंधित एसओ के साथ मुद्दों से निपटने के पदों को देखा है ButterKnife, Dagger, आदि, लेकिन हम इनमें से किसी भी उपयोग नहीं कर रहे। हम कई डेटाबाइंडिंग और संकलित पुस्तकालयों का उपयोग कर रहे हैं, लेकिन मुझे यकीन नहीं है कि कौन से बुरे संदर्भों का स्रोत है। तो मेरा सवाल यह है कि मैं इस उत्पन्न कोड के स्रोत को कैसे ढूँढूं और इसे ठीक करूं?

अपडेट २

मूल प्री-एंड्रॉइड एक्स प्रोजेक्ट पर वापस जा रहे हैं, यह त्रुटि वास्तव में समर्थन लाइब्रेरी को 28 में अपग्रेड करने में होती है। बस लाइन बदल रही है

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

सेवा

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

संकलन त्रुटि को ट्रिगर करेगा।

टुकड़ों के निशान के बाद मैं इस मुद्दे पर नजर रखने के लिए आया था: डेटाबाइंडिंग v2 त्रुटि उत्पन्न करता है जब एक और एनोटेशन प्रोसेसर विफल हो जाता है जो संबंधित हो सकता है लेकिन मुझे अभी भी यकीन नहीं है कि इसे कैसे ठीक किया जाए।


आप किस एंड्रॉइड ग्रेडल प्लगइन का उपयोग कर रहे हैं?
.aaaaame

क्या DeprecatedR.java में आयात का कोई बयान है ?
clownba0t

@ आइसाआम ग्रैडल प्लगइन 3.5.2, ग्रेडल संस्करण 5.6.3
एवलिन

जवाबों:


0

इसे बदलो:

compileOptions {
    dataBinding {
        enabled = true
    }
}

इस मामले में:

dataBinding {
    enabled = true
}
compileOptions {

}

और इसके लिए com.nextfaze.poweradaptersआपको Jetifier को सक्षम करना होगा gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

परिवर्तन कर दिया। और Jetifier सक्षम है। फिर भी वही त्रुटि।
एवलिन

और यदि आप अपडेट 2 पढ़ते हैं, तो आप देखेंगे कि यह AndroidX के कारण नहीं है।
एवलिन

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

इसे ठीक करना और फिर डमी इंटरफ़ेस को हटाने से कंपाइलर फिर से खुश हो जाता है।


अच्छा विचार है, लेकिन अभी भी मेरे लिए त्रुटि दिखाता है but
एवलिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.