Cara menggunakan Data Binding dan Kotlin di Android Studio 3.0.0


99

Saya baru saja mulai menggunakan Android Studio 3.0.0, tetapi setiap kali saya mencoba membangun proyek saya, saya mendapatkan kesalahan ini:

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

saya menggunakan

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

Sebelum saya menggunakan

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

Dan itu bekerja dengan baik ... Apa yang saya lakukan salah ??

Terima kasih!


1
Sepertinya bug, menciptakan masalah: youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov

Bug ini muncul bahkan tanpa pengikatan data apa pun. Anda cukup menggunakan kotlin versi 1.1.2-4 dan menerapkan plugin: 'kotlin-kapt'. Kemudian Anda akan mendapatkan kesalahan ini Kesalahan: Ketergantungan melingkar antara tugas-tugas berikut:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - detail dihilangkan (tercantum sebelumnya)
Arsenius

Jawaban:


20

Tampaknya Anda memerlukan 3 entri gradle di aplikasi .gradle pada tingkat modul untuk menambahkan data binding

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

Perhatikan bahwa saya membuat versi compiler sebagai variabel dalam build gradle level project sehingga dapat dikelola dari satu tempat

defaultnya adalah: ext.kotlin_version = '1.1.3-2'

Saya menambahkan dengan sintaks braket:

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

1
Ini jawaban yang benar, untuk menambahkan kotlin-kapt dan baris dependensi tersebut. Jawaban teratas sudah tidak relevan lagi
SpaceMonkey

Menyukai penggunaan variabel versi
Shirane85

Saya mendapatkan: - dengan semua versi [kapt] Terjadi pengecualian: java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev Saya sudah lama tidak menggunakan studio android
Rubber Duck

78

UPD: Ini telah diperbaiki untuk Android Gradle plugin 3.0.0-alpha3, di root proyek Anda build.gradle, ubah buildscript dependenciesuntuk digunakan

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

Ini sebenarnya adalah bug di plugin Kotlin Gradle 1.1.2-4 yang saling berhubungan dengan plugin Android Gradle 3.0.0-alpha1, yang disebabkan oleh bagaimana input dan output tugas ditetapkan (dan juga cara tugas dihubungkan dengannya hubungan ketergantungan).

Terima kasih @VyacheslavGerasimov karena telah membuat masalah KT-17936 .


Sebagai solusi sementara, Anda dapat mencoba kembali ke Kotlin Gradle plugin 1.1.2-2 dan menonaktifkan kompilasi inkremental:

Di root project Anda build.gradle, ubah versi plugin Kotlin Gradle:

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

Tambahkan local.propertieske root proyek, dengan baris berikut:

kotlin.incremental=false

Ini adalah masalah yang diketahui bahwa Kotlin Gradle Plugin 1.1.2-2 dan di bawah crash dengan versi AGP terbaru, dan melumpuhkan kompilasi tambahan tampaknya untuk memperbaiki kecelakaan itu.


Saya yakin yang Anda maksud adalah gradle.properties
Leandro Borges Ferreira

1
@LeandroBorgesFerreira, Anda dapat menggunakan salah satunya, karena Gradle mendeteksi dan menafsirkan local.propertiesfile dalam proyek Anda juga. Mungkin local.propertieslebih cocok untuk properti mesin lokal .
hotkey

1
Ini mengarah ke kesalahan ini: stackoverflow.com/questions/44056104/…
gderaco

6
Sebenarnya untuk kembali ke 1.1.2-3 juga berfungsi dengan baik. Masalah yang sama dengan Android Studio 2.3.2 dan gradle 2.3.2 saat menggunakan Kotlin 1.1.2-4 bersama dengan plugin kotlin-kapt
Arsenius

1
@hotkey berdasarkan issuetracker.google.com/issues/38447344 ini merupakan masalah di plugin Android, tidak Kotlin Gradle Plugin. Perbaikan telah dibuat dan direncanakan akan dirilis pada rilis alfa 3.0.0 berikutnya.
Nimrod Dayan

17

Bagi mereka yang masih mencari solusi yang tepat, Google telah memperbaiki masalah ini di Android Studio 3.0 Canary 3 build.

Jumat, 2 Juni 2017

Kami baru saja merilis Android Studio 3.0 Canary 3 ke Canary dan Dev Channels. Android Gradle Plugin 3.0.0-alpha3 juga dirilis melalui maven.google.com. Rilis ini memiliki perbaikan untuk Gradle , Kotlin , dan banyak perbaikan lainnya. Kami terus memperbaiki bug di semua area Studio 3.0 saat kami menstabilkan fitur kami, jadi terus berikan masukan.

Bekerja dengan konfigurasi gradle:

build.gradle (proyek)

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 (modul)

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

Bagaimana cara memperbaiki masalah ini di Android Studio 2.3.2?
Arsenius

Anda dapat menggunakan plugin Kotlin versi lama dengan incremental false. Periksa jawaban sebelumnya dengan "hotkey"
Prokash Sarkar

1
Tidak, 1.1.2-4tetap tidak berhasil. Seseorang masih harus menggunakan 1.1.2-2dan juga menambahkan kapt "com.android.databinding: compiler: 3.0.0-alpha3" ke build.gradle (modul) Anda atau Anda akan mendapatkan referensi yang belum terselesaikan: databinding.
0leg

Tidak tetap pada 1.1.2-5 juga
Daivid

2

Saya baru-baru ini menulis Blog untuk Mengikat Data android dengan Kotlin di sini

Gunakan Classpath

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

Ketergantungan

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

untuk lebih jelasnya lihat posting ini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.