एंड्रॉइड स्टूडियो 3.0.0 में डेटा बाइंडिंग और कोटलिन का उपयोग कैसे करें


99

मैंने अभी-अभी एंड्रॉइड स्टूडियो 3.0.0 का उपयोग करना शुरू किया है, लेकिन हर बार जब मैं अपनी परियोजना बनाने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है:

Error:Circular dependency between the following tasks:
:app:compileDebugKotlin
+--- :app:dataBindingExportBuildInfoDebug
|    \--- :app:compileDebugKotlin (*)
\--- :app:kaptDebugKotlin
     \--- :app:dataBindingExportBuildInfoDebug (*)
(*) - details omitted (listed previously)

मै इस्तेमाल कर रहा हूँ

kapt "com.android.databinding:compiler:2.2.0"

इससे पहले कि मैं उपयोग कर रहा था

androidProcessor "com.android.databinding:compiler:2.2.0"

और यह ठीक काम कर रहा था ... मैं क्या गलत कर रहा हूँ ??

धन्यवाद!


1
: एक बग, बनाया मुद्दा की तरह लगता है youtrack.jetbrains.com/issue/KT-17936
व्याचेस्लाव Gerasimov

यह बग बिना किसी डेटा बाइंडिंग के भी दिखाई देता है। आप बस कोटलिन के 1.1.2-4 संस्करण का उपयोग करें और प्लगइन लागू करें: 'कोटलिन-कप'। फिर आपको यह त्रुटि मिलेगी: निम्न कार्यों के बीच परिपत्र निर्भरता:: ऐप: compileDebugKotlin \ ---: ऐप: kaptDebugKotlin \ ---: ऐप: compileDebugKotlin ( ) ( - विवरण छोड़ा गया (पहले सूचीबद्ध)
Arsenius

इसके अलावा संबंधित मुद्दा: issuetracker.google.com/issues/38471980
मंडल

जवाबों:


20

ऐसा लगता है कि डेटा बाइंडिंग को जोड़ने के लिए आपको मॉड्यूल स्तर पर ऐप .gradle में 3 ग्रेडल प्रविष्टियों की आवश्यकता है

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }

ध्यान दें कि मैंने कंपाइलर संस्करण को प्रोजेक्ट लेवल बिल्ड ग्रेडेल में एक वैरिएबल बनाया है ताकि इसे एक ही स्थान से प्रबंधित किया जा सके

डिफ़ॉल्ट था: ext.kotlin_version = '1.1.3-2'

मैंने ब्रैकेट सिंटैक्स के साथ जोड़ा:

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}

1
कोटलिन-कप और उस निर्भरता रेखा को जोड़ने के लिए यह सही उत्तर है। शीर्ष उत्तर प्रासंगिक नहीं है
SpaceMonkey

संस्करण चर का उपयोग पसंद किया
Shirane85

मुझे मिल रहा है: - सभी संस्करणों के साथ [kapt] एक अपवाद हुआ: java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev मैंने कुछ समय में एंड्रॉइड स्टूडियो का उपयोग नहीं किया है
रबर बत्तख

78

UPD: यह एंड्रॉइड ग्रैगल प्लगइन 3.0.0-Alpha3 के लिए तय किया गया था, yout प्रोजेक्ट रूट में build.gradle, buildscript dependenciesउपयोग करने के लिए बदलें

classpath 'com.android.tools.build:gradle:3.0.0-alpha3'

यह वास्तव में कोटलिन ग्रेडल प्लग इन में एक बग है। 1.1.2-4 एंड्रॉइड ग्रैडल प्लगइन 3.0.0-अल्फा 1 के साथ इंटर-ऑपरेशन, इस वजह से कि कार्यों के इनपुट और आउटपुट कैसे सेट किए जाते हैं (और इस प्रकार कार्य कैसे जुड़े हैं पर निर्भर करता है)।

धन्यवाद @VyacheslavGerasimov KT-17936 मुद्दा बनाने के लिए ।


अस्थायी वर्कअराउंड के रूप में, आप कोटलिन ग्रेडल प्लगइन 1.1.2-2 पर वापस लौटने और वृद्धिशील संकलन को अक्षम करने का प्रयास कर सकते हैं:

अपनी परियोजना की जड़ में build.gradle, कोटलिन ग्रेड प्लगइन के संस्करण को बदलें:

buildscript {
    ...
    dependencies {
        ...
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-2'
    }
}

local.propertiesनिम्न पंक्ति के साथ, प्रोजेक्ट रूट में जोड़ें :

kotlin.incremental=false

यह एक ज्ञात मुद्दा है कि कोटलीन ग्रेडल प्लगइन 1.1.2-2 और नीचे नवीनतम एजीपी संस्करणों के साथ क्रैश होता है, और वृद्धिशील संकलन को अक्षम करना उस दुर्घटना को ठीक करता है।


मेरा मानना ​​है कि आप gradle.properties का मतलब है
Leandro Borges Ferreira

1
@LeandroBorgesFerreira, आप उनमें से किसी का भी उपयोग कर सकते हैं, क्योंकि ग्रैड local.propertiesआपकी परियोजनाओं में फ़ाइल का पता लगाता है और उसकी व्याख्या भी करता है। खैर, शायद स्थानीय मशीन गुणों local.propertiesके लिए अधिक उपयुक्त है ।
हॉटकी

1
यह इस त्रुटि की ओर जाता है: stackoverflow.com/questions/44056104/…
gderaco

6
वास्तव में 1.1.2-3 पर वापस जाना भी ठीक काम करता है। एंड्रॉइड स्टूडियो 2.3.2 के साथ एक ही मुद्दा और कोटलिन-kapt प्लगइन के साथ कोटलिन 1.1.2-4 का उपयोग करते समय 2.3.2 और ग्रेडिएल
Arsenius

1
जारीकर्ता पर आधारित @hotkey.google.com / issues / 38447344 यह एंड्रॉइड प्लगइन में एक मुद्दा है, कोटलीन ग्रेडल प्लगइन नहीं। एक फिक्स किया गया था और अगले 3.0.0 अल्फा रिलीज में रिलीज होने की योजना है।
निम्रोद दयान

17

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

2 जून 2017 को शुक्रवार है

हमने अभी-अभी एंड्रॉइड स्टूडियो 3.0 कैनरी 3 को कैनरी और देव चैनल पर रिलीज़ किया है। Maven.google.com के माध्यम से एंड्रॉइड ग्रैडल प्लगिन 3.0.0-अल्फा 3 भी जारी किया गया था। इस रिलीज़ में ग्रैडल , कोटलिन और कई अन्य फ़िक्सेस के फ़िक्सेस हैं। हम स्टूडियो 3.0 के सभी क्षेत्रों में कीड़े को ठीक करना जारी रखते हैं क्योंकि हम अपनी सुविधाओं को स्थिर करते हैं, इसलिए कृपया प्रतिक्रिया पर पास करना जारी रखें।

वर्किंग ग्रेडल कॉन्फ़िगरेशन:

build.gradle (परियोजना)

buildscript {
    ext.kotlin_version = '1.1.2-4'
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

build.gradle (मॉड्यूल)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'


android {
    dataBinding.enabled = true
}
dependencies {
    kapt "com.android.databinding:compiler:3.0.0-alpha3"
}

एंड्रॉइड स्टूडियो 2.3.2 में इस मुद्दे को कैसे ठीक करें?
आर्सेनियस

आप वृद्धिशील झूठे के साथ कोटलिन प्लगइन के पुराने संस्करण का उपयोग कर सकते हैं। पिछले उत्तर को "हॉटकी" द्वारा चेक करें
प्रोक्ता सरकार

1
नहीं, फिर 1.1.2-4भी काम नहीं करता है। एक को अभी 1.1.2-2भी अपने बिल्ड.gradle (मॉड्यूल) में kapt "com.android.databinding: compiler: 3.0.0-alp3" जोड़ना है या आपको Unresolved संदर्भ मिलेगा: डेटाबाइंडिंग।
0leg

1.1.2-5 के रूप में अच्छी तरह से तय नहीं है
डिवाइड

2

मैंने यहाँ कोटलिन के साथ डेटा बाइंडिंग एंड्रॉइड के लिए फिर से ब्लॉग लिखा है

Classpath का उपयोग करें

classpath 'com.android.tools.build:gradle:3.0.0-beta2'

निर्भरता

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ......
    kapt 'com.android.databinding:compiler:2.3.1'
}

अधिक विस्तार के लिए इस पोस्ट को देखें

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