วิธีใช้ Data Binding และ Kotlin ใน Android Studio 3.0.0


100

ฉันเพิ่งเริ่มใช้ Android Studio 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
Vyacheslav Gerasimov

จุดบกพร่องนี้ปรากฏขึ้นแม้ไม่มีการผูกข้อมูลใด ๆ คุณเพียงแค่ใช้ kotlin เวอร์ชัน 1.1.2-4 และใช้ปลั๊กอิน: 'kotlin-kapt' จากนั้นคุณจะได้รับข้อผิดพลาดนี้: การพึ่งพาแบบวงกลมระหว่างงานต่อไปนี้: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - ละเว้นรายละเอียด (แสดงรายการก่อนหน้านี้)
Arsenius

ยังมีปัญหาที่เกี่ยวข้อง: issuetracker.google.com/issues/38471980
คณะกรรมการ บริษัท

คำตอบ:


21

ดูเหมือนว่าคุณต้องมีรายการ gradle 3 รายการในแอป. gradle ที่ระดับโมดูลเพื่อเพิ่มการผูกข้อมูล

  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
นี่คือคำตอบที่ถูกต้องเพื่อเพิ่ม kotlin-kapt และเส้นอ้างอิงนั้น คำตอบยอดนิยมไม่เกี่ยวข้องอีกต่อไป
SpaceMonkey

ชอบการใช้ตัวแปรเวอร์ชัน
Shirane85

ฉันได้รับ: - ทุกเวอร์ชัน [kapt] เกิดข้อยกเว้น: java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev ฉันไม่ได้ใช้ android studio มาสักพักแล้ว
Rubber Duck

78

UPD:สิ่งนี้ได้รับการแก้ไขสำหรับปลั๊กอิน Android Gradle 3.0.0-alpha3 ในรูทโปรเจ็กต์ yout build.gradleให้เปลี่ยนการbuildscript dependenciesใช้

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

นี่เป็นข้อบกพร่องในปลั๊กอิน Kotlin Gradle 1.1.2-4 ระหว่างการทำงานกับปลั๊กอิน Android Gradle 3.0.0-alpha1 ซึ่งเกิดจากวิธีการตั้งค่าอินพุตและเอาต์พุตของงาน (และวิธีการเชื่อมต่อกับงาน ขึ้นอยู่กับความสัมพันธ์)

ขอบคุณ@VyacheslavGerasimovสำหรับการสร้างปัญหาKT-17936


ในการแก้ปัญหาชั่วคราวคุณสามารถลองเปลี่ยนกลับเป็นปลั๊กอิน Kotlin Gradle 1.1.2-2 และปิดใช้งานการคอมไพล์ส่วนเพิ่ม:

ในรูทของโปรเจ็กต์ของคุณbuild.gradleให้เปลี่ยนเวอร์ชันของปลั๊กอิน Kotlin Gradle:

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

เพิ่มlocal.propertiesลงในรูทโปรเจ็กต์ด้วยบรรทัดต่อไปนี้:

kotlin.incremental=false

เป็นปัญหาที่ทราบแล้วว่าปลั๊กอิน Kotlin Gradle 1.1.2-2 และด้านล่างขัดข้องกับ AGP เวอร์ชันใหม่ล่าสุดและการปิดใช้งานการคอมไพล์ส่วนเพิ่มดูเหมือนจะแก้ไขข้อขัดข้องนั้นได้


ฉันเชื่อว่าคุณหมายถึง gradle.properties
Leandro Borges Ferreira

1
@LeandroBorgesFerreira คุณสามารถใช้อะไรก็ได้เพราะ Gradle ตรวจพบและตีความlocal.propertiesไฟล์ในโปรเจ็กต์ของคุณด้วย อาจlocal.propertiesจะเหมาะกับคุณสมบัติของเครื่องในท้องถิ่นมากกว่า
ฮอต

1
สิ่งนี้นำไปสู่ข้อผิดพลาดนี้: stackoverflow.com/questions/44056104/…
gderaco

6
จริงๆแล้วการเปลี่ยนกลับเป็น 1.1.2-3 ก็ใช้ได้เช่นกัน ปัญหาเดียวกันกับ Android Studio 2.3.2 และ gradle 2.3.2 เมื่อใช้ Kotlin 1.1.2-4 ร่วมกับปลั๊กอิน kotlin-kapt
Arsenius

1
@hotkey อ้างอิงจากissueetracker.google.com/issues/38447344นี่เป็นปัญหาในปลั๊กอิน Android ไม่ใช่ปลั๊กอิน kotlin gradle มีการแก้ไขและมีแผนจะออกในรุ่น 3.0.0 อัลฟาถัดไป
Nimrod Dayan

17

สำหรับผู้ที่ยังคงมองหาวิธีแก้ปัญหาที่เหมาะสม Google ได้แก้ไขปัญหานี้แล้วในAndroid Studio 3.0 Canary 3 build

วันศุกร์ที่ 2 มิถุนายน 2560

เราเพิ่งเปิดตัว Android Studio 3.0 Canary 3 ไปยัง Canary และ Dev Channels Android Gradle Plugin 3.0.0-alpha3 ได้รับการเผยแพร่ผ่าน maven.google.com รุ่นนี้มีการแก้ไขGradle , Kotlinและการแก้ไขอื่น ๆ อีกมากมาย เรายังคงแก้ไขข้อบกพร่องในทุกพื้นที่ของ Studio 3.0 ในขณะที่เราทำให้คุณสมบัติของเราคงที่ดังนั้นโปรดส่งความคิดเห็นต่อไป

การกำหนดค่าการทำงานของ gradle:

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"
}

จะแก้ไขปัญหานี้ใน Android Studio 2.3.2 ได้อย่างไร
Arsenius

คุณสามารถใช้ปลั๊กอิน Kotlin เวอร์ชันเก่าที่มีเท็จเพิ่มขึ้น ตรวจสอบคำตอบก่อนหน้าโดย "ปุ่มลัด"
Prokash Sarkar

1
ไม่1.1.2-4ยังไม่ทำงาน ยังคงต้องใช้1.1.2-2และเพิ่ม kapt "com.android.databinding: compiler: 3.0.0-alpha3" ใน build.gradle (module) ของคุณมิฉะนั้นคุณจะได้รับ Unresolved reference: databinding
0leg

ไม่ได้รับการแก้ไขใน 1.1.2-5 เช่นกัน
Daivid

2

ฉันได้เขียน Blog for Data Binding android กับ Kotlin ที่นี่อีกครั้ง

ใช้ 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'
}

สำหรับรายละเอียดเพิ่มเติมโปรดดูโพสต์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.