Cách sử dụng Data Binding và Kotlin trong Android Studio 3.0.0


99

Tôi mới bắt đầu sử dụng Android Studio 3.0.0, nhưng mỗi khi tôi cố gắng xây dựng dự án của mình, tôi đều gặp lỗi này:

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

tôi đang dùng

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

Trước khi tôi sử dụng

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

Và nó đã hoạt động tốt ... Tôi đang làm gì sai ??

Cảm ơn!


1
Có vẻ như một lỗi, đã tạo ra sự cố: youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov

Lỗi này xuất hiện ngay cả khi không có bất kỳ ràng buộc dữ liệu nào. Bạn chỉ cần sử dụng phiên bản 1.1.2-4 của kotlin và áp dụng plugin: 'kotlin-kapt'. Sau đó, bạn sẽ gặp lỗi này Lỗi: Sự phụ thuộc vòng giữa các tác vụ sau:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - chi tiết bị bỏ qua (đã liệt kê trước đó)
Arsenius

Vấn đề cũng liên quan: Issuetracker.google.com/issues/38471980
BoD

Câu trả lời:


20

Có vẻ như bạn cần 3 mục nhập gradle trong ứng dụng .gradle ở cấp độ mô-đun để thêm liên kết dữ liệu

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

Lưu ý rằng tôi đã đặt phiên bản trình biên dịch thành một biến trong lớp xây dựng cấp độ dự án để nó có thể được quản lý từ một nơi duy nhất

mặc định là: ext.kotlin_version = '1.1.3-2'

Tôi đã thêm bằng cú pháp ngoặc:

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

1
Đây là câu trả lời chính xác, để thêm kotlin-kapt và dòng phụ thuộc đó. Đầu câu trả lời là không phù hợp nữa
SpaceMonkey

Thích việc sử dụng các biến phiên bản
Shirane85

Tôi nhận được: - với tất cả các phiên bản [kapt] Một ngoại lệ đã xảy ra: java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev Tôi đã không sử dụng android studio trong một thời gian
Rubber Duck

78

UPD: Điều này đã được khắc phục cho plugin Android Gradle 3.0.0-alpha3, trong gốc của dự án yout build.gradle, hãy thay đổi buildscript dependenciesđể sử dụng

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

Đây thực sự là một lỗi trong hoạt động tương tác giữa plugin Kotlin Gradle 1.1.2-4 với plugin Android Gradle 3.0.0-alpha1, gây ra bởi cách thiết lập đầu vào và đầu ra của các tác vụ (và do đó, cách các tác vụ được kết nối với quan hệ phụ thuộc).

Cảm ơn @VyacheslavGerasimov đã tạo vấn đề KT-17936 .


Như một giải pháp tạm thời, bạn có thể thử hoàn nguyên về plugin Kotlin Gradle 1.1.2-2 và tắt biên dịch gia tăng:

Trong thư mục gốc của dự án build.gradle, hãy thay đổi phiên bản của plugin Kotlin Gradle:

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

Thêm local.propertiesvào thư mục gốc của dự án, với dòng sau:

kotlin.incremental=false

Có một vấn đề đã biết là plugin Kotlin Gradle 1.1.2-2 trở xuống gặp sự cố với các phiên bản AGP mới nhất và việc tắt biên dịch gia tăng dường như sẽ khắc phục được sự cố đó.


Tôi tin rằng bạn muốn nói đến gradle.properties
Leandro Borges Ferreira

1
@LeandroBorgesFerreira, bạn có thể sử dụng bất kỳ tệp nào trong số chúng, vì Gradle cũng phát hiện và thông dịch local.propertiestệp trong các dự án của bạn. Chà, có lẽ local.propertiesphù hợp hơn với thuộc tính máy cục bộ .
phím nóng

1
Điều này dẫn đến lỗi này: stackoverflow.com/questions/44056104/…
gderaco

6
Trên thực tế để hoàn nguyên về 1.1.2-3 cũng hoạt động tốt. Vấn đề tương tự với Android Studio 2.3.2 và gradle 2.3.2 khi sử dụng Kotlin 1.1.2-4 cùng với plugin kotlin-kapt
Arsenius

1
@hotkey dựa trên Issuetracker.google.com/issues/38447344, đây là sự cố trong plugin Android, không phải plugin kotlin gradle. Một bản sửa lỗi đã được thực hiện và dự kiến ​​sẽ được phát hành trong bản phát hành alpha 3.0.0 tiếp theo.
Nimrod Dayan

17

Đối với những người vẫn đang tìm kiếm giải pháp thích hợp, Google đã khắc phục sự cố này trong bản dựng Android Studio 3.0 Canary 3 .

Thứ sáu, ngày 02 tháng sáu năm 2017

Chúng tôi vừa phát hành Android Studio 3.0 Canary 3 cho các kênh Canary và Dev. Android Gradle Plugin 3.0.0-alpha3 cũng đã được phát hành thông qua maven.google.com. Bản phát hành này có các bản sửa lỗi cho Gradle , Kotlin và nhiều bản sửa lỗi khác. Chúng tôi tiếp tục sửa lỗi trong tất cả các lĩnh vực của Studio 3.0 khi chúng tôi ổn định các tính năng của mình, vì vậy hãy tiếp tục gửi phản hồi.

Cấu hình gradle làm việc:

build.gradle (dự án)

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 (mô-đun)

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

Làm cách nào để khắc phục sự cố này trong Android Studio 2.3.2?
Arsenius

Bạn có thể sử dụng phiên bản cũ hơn của plugin Kotlin với sai số tăng dần. Đánh dấu vào câu trả lời trước bằng "phím nóng"
Prokash Sarkar

1
Không, 1.1.2-4vẫn không hoạt động. Người ta vẫn phải sử dụng 1.1.2-2và cũng có thể thêm kapt "com.android.databinding: compiler: 3.0.0-alpha3" vào build.gradle (mô-đun) của bạn hoặc bạn sẽ nhận được tham chiếu chưa được giải quyết: databinding.
0leg

Không cố định trên 1.1.2-5 cũng
Daivid

2

Tôi đã thường xuyên viết Blog về Data Binding android với Kotlin tại đây

Sử dụng Classpath

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

Sự phụ thuộc

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

để biết thêm chi tiết, hãy xem bài đăng này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.