Як використовувати прив’язку даних та Kotlin в Android Studio 3.0.0


99

Я тільки почав використовувати 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
В’ячеслав Герасимов

Ця помилка з'являється навіть без прив'язки даних. Ви просто використовуєте версію 1.1.2-4 kotlin і застосовуєте плагін: 'kotlin-kapt'. Тоді ви отримаєте цю помилку: помилка циклічну залежність між наступними завданнями :: Додаток: compileDebugKotlin \ ---: додаток: kaptDebugKotlin \ ---: додаток: compileDebugKotlin ( ) ( ) - подробиці опущені (перераховані вище)
Арсеніус

Також пов'язаний з цим питання: issuetracker.google.com/issues/38471980
Рада директорів

Відповіді:


20

Здається, вам потрібно 3 записи gradle у додатку .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
Павло Зайцев

@PavelZaitsev Я давно не користувався андроїд-студією
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

Це відома проблема , що Котлин Gradle плагін 1.1.2-2 і нижче аварій з новітніми версіями AGP, і відключити інкрементні компіляції , здається, виправити цю аварію.


Я вважаю, ви мали на увазі gradle.properties
Леандро Борхес Феррейра

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 при використанні Котлин 1.1.2-4 разом з Котлін-kapt плагін
Арсенієм

1
@hotkey на основі issueetracker.google.com/issues/38447344, це проблема в плагіні Android, а не в плагіні kotlin gradle. Було зроблено виправлення, яке планується випустити в наступному альфа-випуску 3.0.0.
Німрод Даян

17

Для тих, хто все ще шукає належного рішення, Google уже виправив цю проблему в Android Studio 3.0 Canary 3 build.

П'ятниця, 2 червня 2017 року

Щойно ми випустили Android Studio 3.0 Canary 3 на Canary та Dev Channels. Плагін Android Gradle 3.0.0-alpha3 також був випущений через maven.google.com. Цей випуск містить виправлення для Gradle , Kotlin та багато інших виправлень. Ми продовжуємо виправляти помилки у всіх областях Studio 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"
}

Як виправити цю проблему в Android Studio 2.3.2?
Арсеній

Ви можете використовувати стару версію плагіна Kotlin з додатковим значенням false. Перевірте попередню відповідь "
гарячою клавішею

1
Ні, 1.1.2-4все одно не працює. Ще потрібно скористатися, 1.1.2-2а також додати kapt "com.android.databinding: compiler: 3.0.0-alpha3" до вашого build.gradle (модуля), або ви отримаєте невирішене посилання: прив'язка даних.
0leg

Також не встановлено на 1.1.2-5
Дайвід

2

У мене є recenly запис Блог для прив'язки даних Android з Котлін тут

Використовуйте 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.