इंक्रीमेंटल एनोटेशन प्रोसेसिंग से अनुरोधित चेतावनी से कैसे छुटकारा पाएं?


150

मैंने अभी-अभी एंड्रॉइड डेवलपमेंट का उपयोग करना शुरू किया है और रूम लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं। कल से मैं इस चेतावनी संदेश का सामना कर रहा हूं

w: [kapt] वृद्धिशील एनोटेशन प्रसंस्करण का अनुरोध किया है, लेकिन समर्थन अक्षम है क्योंकि निम्न प्रोसेसर वृद्धिशील नहीं हैं: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx .room.oomProcessor (NON_INCREMENTAL)।

मैंने शोध करने और ठीक करने की कोशिश की है लेकिन इस त्रुटि से बचने में असमर्थ यहाँ मेरी grale.build फ़ाइल है। कृपया सुझाव / सलाह दें कि मैं क्या गलत कर रहा हूं।

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "ps.room.bookkeeper"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
            }
        }    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // life cycle dependencies
    def lifecycle_version = "2.0.0"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    kapt "android.arch.lifecycle:compiler:$lifecycle_version"

    //Room dependencies
    //def room_version = "2.1.0"
    implementation 'android.arch.persistence.room:runtime:2.1.0'
    kapt 'android.arch.persistence.room:compiler:2.1.0'
    //annotationProcessor 'android.arch.persistence.room:compiler:2.1.0'

//    implementation "android.arch.lifecycle:extensions:$room_version"
//    kapt "android.arch.persistence.room:compiler:$room_version"
//    androidTestImplementation "android.arch.persistence.room:testing:$room_version"

    //implementation 'androidx.room:room-runtime:2.1.0'
    //annotationProcessor 'androidx.room:room-compiler:2.1.0'
}

आपकी टिप्पणी क्यों टिप्पणी की गई है? क्या आपने उन्हें असहज करने और फिर प्रोजेक्ट बनाने की कोशिश की? (दोनों कमरे और जीवनचक्र के लिए)
फेरहट एर्गन

1
android.enableSeparateAnnotationProcessing जोड़ने की कोशिश = अपने gradle.properities में सच reddit.com/r/androiddev/comments/ai92pt/... इस पर पाया, यह आपकी समस्या से संबंधित हो सकती
Ferhat Ergün

7
आप अपने प्रोजेक्ट build.gradle फ़ाइल में kotlin-gradle-plugin को डाउनग्रेड कर सकते हैं। मुझे लगता है कि यह कपट से संबंधित एक बग है। अधिक जानकारी: youtrack.jetbrains.com/issue/KT-33515
Necrontyr

5
आप kapt.incremental.apt=falseसमस्या के समाधान के रूप में भी वर्णित के साथ libs / <अपने मॉड्यूल नाम> में एक gradle.properties फ़ाइल बना सकते हैं । इसने मेरे लिए काम किया।
Necrontyr

2
@Necrontyr, आपके सुझाव ने वास्तव में काम किया। बहुत बहुत धन्यवाद
Shax

जवाबों:


80

@Necrontyr के अनुसार 1.3.50 के kotlin-gradle-plugin संस्करण में एक बग है। बस 1.3.41 में build.gradle (प्रोजेक्ट) में kotlin_version को डाउनग्रेड करें।


71
@Necrontyr द्वारा उल्लिखित बग चेतावनी से असंबंधित है। चेतावनी वास्तव में अभिप्रेत है और 1.3.41 तक नीचे जाने से चेतावनी छिप जाती है, लेकिन समस्या अधिक न होने पर वही रहती है। लोगों को लगता है कि क्योंकि वे वृद्धिशील एनोटेशन प्रसंस्करण चालू कर सकते हैं इससे चीजें तेजी से बढ़ेंगी। लेकिन सच्चाई यह है कि अगर एनोटेशन प्रोसेसर में से कोई भी वृद्धिशील नहीं है, तो उनमें से किसी पर भी वृद्धि नहीं की जाएगी। यह एक अनुकूल अनुस्मारक है जो इंगित करेगा कि पुस्तकालय क्या अपराधी है।
एंटीमोनिट

15
एक पुराने पुस्तकालय संस्करण का उपयोग करना एक समाधान नहीं है।
एंड्रयू कोस्टर

5
क्या अब भी कोटलिन के साथ ऐसा ही है 1.3.70?
इगोरगानपोलस्की

2
मैं कोटलिन 1.3.72 का उपयोग कर रहा हूं और अभी भी इस समस्या का सामना कर रहा हूं?
अनबसेल्वन रॉकी

4
मैं भी इस मुद्दे का सामना कर रहा हूँ 1.3.72 किसी भी समाधान लोग?
hiashutoshsingh

174

बस इस लाइन को आपको gradle.properties में जोड़ें:

kapt.incremental.apt=true

11
यह एक बेहतर विकल्प है जो स्वीकृत उत्तर है। उन लोगों के लिए जिन्हें समझने और अधिक जानकारी प्राप्त करने की आवश्यकता है, इस लिंक को देखें: medium.com/avast-engineering/…
अभिमन्यु

4
मेरे लिए भी असफल।
स्टीवन स्मिथ

किसी को भी यहाँ क्यों हो रहा है कारण है?
ओमेर

मैंने हाल ही में अपने एंड्रॉइड (कोटलिन) प्रोजेक्ट के लिए डेटा बाइंडिंग को सक्षम किया और इस चेतावनी को प्राप्त करना शुरू कर दिया। ऊपर बताई गई संपत्ति जोड़ना मेरे लिए काम कर गया। इसके अलावा सब कुछ के नवीनतम संस्करणों का उपयोग करते हुए, उदाहरण के लिए, सभी निर्भरताएं, संकलक, उपकरण का निर्माण, एसडीके, आदि
गेल

4
बस यही करना, मेरे काम नहीं आया। मुझे अपनी build.gradle फ़ाइल को भी संपादित करना था जैसा कि कमरे के पुस्तकालय के लिए प्रलेखन में वर्णित है ।
नेल्सन फेरगुट

121

वास्तविक समस्या यह है कि वृद्धिशील प्रसंस्करण चीजों को तेज करता है, लेकिन अगर एनोटेशन प्रोसेसर में कोई गैर-वृद्धिशीलता है, तो उनमें से कोई भी वास्तव में उस तरह से संसाधित नहीं होगा।

वृद्धिशील प्रसंस्करण का उद्देश्य क्या है?

से संस्करण 1.3.30+ , वृद्धिशील संसाधन अनुमति मॉड्यूल पूरी तरह से फिर से हर बार कोई परिवर्तन होता है संसाधित करने के लिए नहीं, निर्माण प्रक्रिया बेहतर कार्य-निष्पादन:

इस रिलीज के लिए मुख्य क्षेत्र कोटलिन / मूल, KAPT प्रदर्शन के साथ-साथ IntelliJ IDEA के लिए सुधार किए गए हैं।

से Kotlin प्रलेखन :

कोटेशन संकलक प्लगइन के साथ कोटेशन में एनोटेशन प्रोसेसर (जेएसआर 269 देखें) समर्थित हैं। संक्षेप में, आप अपनी कोटलिन परियोजनाओं में पुस्तकालयों जैसे डैगर या डेटा बाइंडिंग का उपयोग कर सकते हैं।

रूम इंक्रीमेंटल प्रोसेसिंग को कैसे ठीक करें?

और कक्ष वृद्धिशील एनोटेशन प्रोसेसर डिफ़ॉल्ट रूप से अक्षम है। यह एक ज्ञात मुद्दा है और यह यहाँ वर्णित है । वे 2.2.0 संस्करण पर इसे ठीक करने का इरादा रखते हैं। आप बस अपडेट का इंतजार कर सकते हैं या सेटिंग द्वारा चेतावनी से छुटकारा पाने के लिए सक्षम कर सकते हैं:

in gradle.properties फ़ाइल:

kapt.incremental.apt=true

(वैकल्पिक चरण)

डेटाबाइंडिंग को वृद्धिशील होने की अनुमति देने के लिए:

android.databinding.incremental=true

तेजी से बनाता है:

kapt.use.worker.api=true

यदि केवल कुछ परिवर्तन किए जाते हैं, तो निर्माण का समय बहुत कम हो जाता है:

kapt.include.compile.classpath=false

(विषय पर वापस)

अपनी परियोजना build.gradle में , आवश्यक निर्भरता (ग्रूवी) जोड़ें:

dependencies {
    ...
    implementation "androidx.room:room-runtime:2.2.0-rc01"
    annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}

तथा

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.incremental":"true"]
            }
        }
    }
}

Kotlin DSL संस्करण:

dependencies {
    ...
    implementation("androidx.room:room-runtime:2.2.0-rc01")
    kapt("androidx.room:room-compiler:2.2.0-rc01")
}

तथा

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    } 
}

संपादित करें:

9 अक्टूबर 2019

androidx.room:room-*:2.2.2.0 जारी किया गया है

ग्रैडल इंक्रीमेंटल एनोटेशन प्रोसेसर: रूम अब ग्रैडल आइसोलेटिंग एनोटेशन प्रोसेसर है और प्रोसेसर ऑप्शन रूम.incremental के माध्यम से इंक्रीमेंबिलिटी को सक्षम किया जा सकता है।


8
इसे किसी को kapt.incremental.apt = सच के रूप में स्वीकार किया जाना चाहिए जो आपके प्रोजेक्ट में कक्ष को शामिल करते समय गायब हो जाएगा। वह भी कमरे के
सेला

1
इस उत्तर ने मुझे मदद की क्योंकि मैं androidx.lifecycle:lifecycle-extensions2.1.0 संस्करण में उपयोग कर रहा था और 2.2.0-बीटा 01 पर स्विच करने के बाद चेतावनी चली गई!
simne7

2
@ simne7 अंत में मेरे संपादन की जाँच करें। संस्करण 2.2.0 जारी किया गया है =) आप वृद्धिशील प्रसंस्करण सुविधा तक पहुंचने और अपने निर्माण को बढ़ावा देने के लिए इसे पहले से ही अपग्रेड कर सकते हैं।
दीमास मेंडेस

सक्षम android.buildcache=trueकरने से यह तेज हो जाएगा?
इगोरगानापोलस्की

1
Google डेवलपर वेबसाइट के अनुसार @IgorGanapolsky, Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache)। अतः इसे सक्षम करने का कोई मतलब नहीं है क्योंकि यह डिफ़ॉल्ट रूप से सक्षम है।
डिमास मेंडेस

37

से कमरे का प्रलेखन :

"कक्ष में निम्नलिखित एनोटेशन प्रोसेसर विकल्प हैं ... Room.incremental: ग्रैडल वृद्धिशील एनोटेशन प्रोसेसर को सक्षम करता है।"

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

2.2.x या अधिक के कमरे के संस्करण को अपडेट करना सुनिश्चित करें।


3
यदि आप वृद्धिशील प्रसंस्करण रखना चाहते हैं, तो सही उत्तर दें। आपको ऊपर दिए गए स्कीमा लोकेशन या एक्सपेंशनप्रोजेक्शन के तर्क की आवश्यकता नहीं हो सकती है। Room.incremental suffice।
बाजीकुसको

1
Developer.android.com/jetpack/androidx/releases/room के अनुसार , अभी भी 2.2.0-rc01 संस्करण है।
कूलमाइंड


कमरे के संस्करण को 2.2.0 में अपडेट करें यह मेरे लिए काम करता है
DivideBy0

25

यहां उन चीजों की एक सूची दी गई है जिन्हें आप इसे ठीक करने के लिए कर सकते हैं और अपने निर्माण के समय में काफी कमी कर सकते हैं।

आपकी build.gradle(मॉड्यूल) फ़ाइल में:

android {
    ...
    defaultConfig {
        ...
        kapt {
            arguments {
                 arg("room.schemaLocation", "$projectDir/schemas".toString())
                 arg("room.incremental", "true")
                 arg("room.expandProjection", "true")
            }
        }
    }
    ...
}

आपकी gradle.propertiesफ़ाइल में:

kapt.incremental.apt=true            // enabled by default on 1.3.50+
kapt.use.worker.api=true             // faster builds
kapt.include.compile.classpath=false // near instant builds when there are few changes

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
//add your specific library if it supports incremental kapt 

18

Kapt इंक्रीमेंटल एनोटेशन प्रोसेसिंग अनुरोध सक्षम करें

जारी किए गए कोटलिन 1.3.31 या नए कोटलिन 1.3.30 का उपयोग करें

अपने Android kotlin प्रोजेक्ट gradle.properties फ़ाइल में

# Enable Kapt Incremental annotation processing requeste
kapt.incremental.apt=true

# Enable android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC)
android.databinding.incremental=true

# Decrease gradle builds time 
kapt.use.worker.api=true

# turn off AP discovery in compile path, and therefore turn on Compile Avoidance
kapt.include.compile.classpath=false

# Enable In Logcat to determine Kapt
kapt.verbose=true

किस बारे में android.lifecycleProcessor.incremental=true?
इगोरगानापोलस्की

10

यहां बहुत सारे अन्य उत्तर त्रुटि को कवर करते हैं या वृद्धिशील प्रसंस्करण को अक्षम करते हैं, वास्तव में यह आपके इच्छित तरीके से काम करता है।

आप gradle.propertiesफ़ाइल में अपने विशिष्ट पुस्तकालय के लिए वृद्धिशील प्रसंस्करण को सक्षम कर सकते हैं । बस इन सेटिंग्स को जोड़ें, या जो भी उस लाइब्रेरी से मेल खाता है जो त्रुटि फेंकता है:

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true

2
मुझे इतना यकीन नहीं है android.lifecycleProcessor.incremental=true, यह कहीं भी प्रलेखित नहीं लगता है
डैनियल विल्सन

मुझे यकीन नहीं है, लेकिन मैंने इसे एक कूबड़ पर आज़माया और संकलक ने मुझे बताना बंद कर दिया कि लाइफ़ साइकिलप्रोसेसर लाइब्रेरी में वृद्धिशील प्रसंस्करण सक्षम नहीं था।
जैक्स।

5

यदि यह शिकायत कर रहा है कि "इंक्रीमेंटल एनोटेशन प्रोसेसिंग का अनुरोध किया गया है, लेकिन समर्थन अक्षम है क्योंकि निम्नलिखित प्रोसेसर वृद्धिशील नहीं हैं", तो "kapt.incremental.apt" को "true" (एक अलग उत्तर में उल्लिखित) में सेट करना। gradle.properties काउंटर है- सहज ज्ञान युक्त। आपको इसे "झूठे" पर सेट करने की आवश्यकता है। वो मेरे लिए किया गया।


1
यह वास्तव में काम किया। इसे FALSE लोगों के लिए सेट करें! धन्यवाद
सकीबॉय

ओर क्या होता हे? क्या यह तेजी से संकलन करेगा या बस चेतावनी छिपाएगा?
कूलमाइंड

@CoolMind आप वृद्धिशील एनोटेशन प्रसंस्करण को अक्षम कर देंगे, कुछ ऐसा जो वैसे भी नहीं होने वाला है यदि आपका कोई भी आश्रित इसका समर्थन नहीं करता है। इसलिए, चेतावनी दूर हो जाती है और निर्माण प्रक्रिया में पहले से कोई बदलाव नहीं हुआ है।
डीसी क्रिस्टोफर

2
आश्चर्यजनक रूप से सेटिंग से kapt.incremental.apt=falseमुझे मदद मिली, मुझे और कोई त्रुटि नहीं मिली
राखी धवले

2
आपके पास कोई और त्रुटि नहीं है, लेकिन अब आपके पास कोई वृद्धिशील प्रसंस्करण नहीं है :)
JustAnotherCoder

2

मैं AndroidX का उपयोग कर रहा हूं , लेकिन ऐसा लगता है कि यह समान है android.arch.lifecycle। मेरे लिए यह बस इसे बदलने में मदद की:

kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

... इसके साथ:

implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

इसलिए यदि आप android.arch.lifecycleइसका उपयोग कर रहे हैं तो इसका प्रभाव समान हो सकता है:

kapt "android.arch.lifecycle:compiler:$lifecycle_version"

... इसके साथ:

implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

ध्यान रखें कि यह केवल तभी काम करता है जब आप जावा 8 का उपयोग कर रहे हैं और आपको कक्षाओं के OnLifecycleEventलिए एनोटेशन को भी हटा देना चाहिए LifecycleObserverऔर उन पर्यवेक्षकों को लागू करने देना चाहिएDefaultLifecycleObserver इसके बजाय करने चाहिए।

इस विधि को बदलने के लिए भी यहाँbuild.gradle दिखाए गए डिपॉजिट में अनुशंसित किया गया है


आप क्यों छुटकारा पा रहे हैं kapt?
इगोरगानापोलस्की

@IgorGanapolsky जो कि AndroidX Lifecycle द्वारा सुझाया गया है यदि आप जावा 8 का उपयोग कर रहे हैं तो यहाँ और देखें: developer.android.com/jetpack/androidx/releases/…
Anigif


1
केवल तभी जब आवश्यकता होती है। इस पृष्ठ के अनुसार एंड्रॉइड पर जावा 8 को अधिक मुख्यधारा मिलते ही एनोटेशन को हटा दिया जाएगा, इसलिए वे common-java8यदि संभव हो तो सलाह देते हैं: developer.android.com/reference/androidx/lifecycle/Lifecycle
Anigif

दिलचस्प। वे उल्लेख नहीं करतेkaptहालांकि विशेष रूप से ...
इगोरगानापोलस्की

2

आपको वास्तव में क्या करना चाहिए कोड की इन पंक्तियों को अपने buildConfigटैग में अपने build.gradleमॉड्यूल मॉड्यूल में लागू करना है :

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }

0

उपरोक्त उत्तर उपयोगी हो सकते हैं, लेकिन जो मुझे मदद कर रहा है वह कम कर रहा kotlin_versionहैbuild.gradle(Project) करने के लिए1.3.41 प्रोजेक्ट और बनाने । यह आपको यह देखने की अनुमति देगा कि क्या आपके इकाई मॉडल के साथ कोई समस्या है।

मेरा था, मैं एनोटेट करना भूल गया @PrimaryKey। आपका कुछ अलग हो सकता है। कोटलिन 1.3.41उन मुद्दों को देखने की अनुमति देता है। उन मुद्दों को ठीक करें और अपने kotlin_versionपिछले एक पर वापस जाएं।


-1

यह भी इस तरह के "के रूप में चरित्र समस्याओं के कारण हो सकता İ " पर डेटा बाइंडिंग ओर जब सिस्टम भाषा एक गैर-अंग्रेज़ी भाषा है। ऐसे मामले में, अंग्रेजी में कंप्यूटर सिस्टम भाषा का उपयोग करने से समस्या हल हो जाएगी।

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