Android Studio 3.0.0でデータバインディングとKotlinを使用する方法


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
Vyacheslav Gerasimov

このバグは、データバインディングがない場合でも発生します。1.1.2-4バージョンのkotlinを使用し、プラグイン「kotlin-kapt」を適用するだけです。次に、このエラーError:Circular dependency between the following tasks::app:compileDebugKotlin \ ---:app:kaptDebugKotlin \ ---:app:compileDebugKotlin()()-詳細を省略(前述)
Arsenius

また、関連する問題:issuetracker.google.com/issues/38471980
BoD

回答:


20

データバインディングを追加するには、アプリレベルのモジュール.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

バージョン変数の使用が
気に入りました

取得中:-すべてのバージョン[kapt]で例外が発生しました:java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev私はしばらくAndroidスタジオを使用していません
Rubber Duck

78

UPD:これはAndroid Gradleプラグイン3.0.0-alpha3で修正されました。プロジェクトルートでbuild.gradlebuildscript dependencies使用するように変更してください

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

これは実際には、Kotlin Gradleプラグイン1.1.2-4とAndroid Gradleプラグイン3.0.0-alpha1との相互運用のバグであり、タスクの入力と出力の設定方法(およびタスクの接続方法)が原因で発生します依存関係)。

問題KT- 17936を作成してくださった@VyacheslavGerasimovに感謝します。


一時的な回避策として、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適しています。
ホットキー2017年

1
これにより、次のエラーが発生します:stackoverflow.com/questions/44056104/…–
gderaco

6
実際に1.1.2-3に戻すことも問題なく機能します。Kotlin 1.1.2-4をkotlin-kaptプラグインと一緒に使用すると、Android Studio 2.3.2およびgradle 2.3.2で同じ問題
Arsenius

1
issuehoter.google.com/issues/38447344に基づく@hotkeyこれはAndroidプラグインの問題であり、kotlin gradleプラグインの問題ではありません。修正が行われ、次の3.0.0 alphaリリースでリリースされる予定です。
Nimrod Dayan

17

まだ適切なソリューションを探している人のために、GoogleはすでにAndroid Studio 3.0 Canary 3ビルドでこの問題を修正しています。

2017年6月2日金曜日

Android Studio 3.0 Canary 3をCanaryおよびDevチャンネルにリリースしました。Android Gradle Plugin 3.0.0-alpha3もmaven.google.comからリリースされました。このリリースでは、GradleKotlin、およびその他の多くの修正が修正されています。機能を安定させるため、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 2017

古いバージョンのKotlinプラグインを、増分falseで使用できます。以前の回答を「ホットキー」で確認してください
Prokash Sarkar

1
いいえ、1.1.2-4まだ機能しません。1.1.2-2build.gradle(モジュール)にkapt "com.android.databinding:compiler:3.0.0-alpha3" を使用して追加する必要があります。そうしないと、未解決の参照:databindingが取得されます。
0leg

1.1.2-5でも修正されていません
Daivid

2

ここに最近、Kotlinを使用したデータバインディングAndroidのブログを書いています

クラスパスを使用

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.