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!

Leandro Borges Ferreira
sumber
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
Juga terkait masalah: Issuetracker.google.com/issues/38471980
BoD

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'
}
Bebek karet
sumber
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.

hotkey
sumber
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"
}
Prokash Sarkar
sumber
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

Imtiyaz Khalani
sumber