今朝、Android studio
を3.0.1から3.1.0に更新しました。 gradle
を最新バージョンに更新しても、データバインディングに関するビルドエラーが発生します。
私のgradle-wrapper.properties
:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.Zip
私のエラーはすべて次のようなものです:
/Users/mp/Documents/GitHub/projectx/app/build/generated/source/dataBinding/baseClasses/Staging/debug/me/projectx/asdasd/databinding/GridItemActivityTypeBinding.Java:57: error: cannot find symbol
@Nullable DataBindingComponent component) {
^
symbol: class DataBindingComponent
location: class GridItemActivityTypeBinding
Android studio 3.1の更新後にデータバインディングが生成されない理由は誰にもわかりませんか?前もって感謝します
編集1:言うことを忘れて、キャッシュをクリーン/リビルド/無効化してビルドフォルダを再起動/削除しました。
わかりましたので、私がこれをどのように修正したか疑問に思っている人。解決策は非常に簡単ですが、おそらくあなたはそれを気に入らないでしょう。
プロジェクトのルートパッケージでデータバインディングに使用されたすべてのクラスを移動しなければならず、その後再び動作を開始しました。
Android Studio 3.2への更新に続いて、この行が機能します。プロジェクトでJavaとKotlinコード(コンパイラー)の両方を実行しています。
Gradle.propertiesに次を追加します:Android.databinding.enableV2 = false
理由:
データバインディングV2
Data Binding V2はデフォルトで有効になり、V1と互換性があります。これは、V1でコンパイルしたライブラリの依存関係がある場合、Data Binding V2を使用するプロジェクトでそれらを使用できることを意味します。ただし、V1を使用するプロジェクトは、V2でコンパイルされた依存関係を使用できないことに注意してください。
ソース(リリースノート): https://developer.Android.com/studio/releases/
Android studio 3.2でkotlinを使用している場合、ディストリビューションURLをこの行に置き換えます
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.Zip
ビルドツールのバージョンを適切なバージョンに変更するよう求められます。完了したら、アプリレベルのbuild.gradleファイルからこの行を削除します
kapt 'com.Android.databinding:compiler:3.0.1
プロジェクトをビルドします。それは私のために働いた。
これは最も役立つ答えではないかもしれませんが、私の場合、これは私のコードのcompletely無関係な問題が原因でした。
私は51個のerror: cannot find symbol: DataBindingComponent
エラーを(データバインディングで生成されたすべてのクラスで)受け取っていましたが、何が原因でXMLおよびViewModelコードの変更を削除しようとしていたのです。
問題は実際に、部屋モデルを作成した無効な変更にありました。ルームエラーはすべてのデータバインディングエラーによって難読化された可能性がありますが、ターミナルのデバッグ/スキャンログはそれを指していませんでした。
したがって、この問題が発生した場合は、一見無関係な変更であっても、すべての最近のコードを確認してください。
Edit:これを参照してください SO post 他のkapt問題(Room/Daggerなど)を難読化するこれらのデータバインディングエラーについて
Android Studio 3.0.1から3.1.0に更新する場合、3つのことを変更する必要があります。これは以下のとおりです
1)distributionUrlのgradle.wrapper-propertiesを変更する必要があります。 URLはdistributionUrl = https://services.gradle.org/distributions/gradle-4.4-all.Zipでなければなりません
2)アプリレベルのgradleファイルのデータバインディングの依存関係をkapt 'com.Android.databinding:compiler:3.0.1'からkapt 'com.Android.databinding:compiler:3.1.0'に更新する必要がある
そして、あなたがkotlinを使用して開発している場合、
3)最後に、kotlin gradleプラグインclasspath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30"を更新する必要がありますclasspath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.31"プロジェクトレベルのgradle依存関係。また、次の図に示すように、ビルドグラドルバージョンを更新できます。
上記のすべての手順の後、ビルドとプロジェクトを再構築するだけです。問題の解決に役立つことを願っています。
ありがとう!!ハッピーコーディング!!
Javaプロジェクトのこのエラーを修正するには、supportLibraryVersionにロールバックする必要があります-27.0.2
からの27.1.0
AndroidStudio 3.1およびcom.Android.tools.build:gradle:3.1.0
で正常に動作します
Googleからの修正を待っています
@Marian Pavelと同じ問題がありました。ルートフォルダーにデータバインディングで使用されるクラスがない限り、プロジェクトはデータバインディングコンポーネントをコンパイルできませんでした。
これを行うことで問題を修正しました。
Android Studio:3.2.1安定版
**project build.gradle**
classpath 'com.Android.tools.build:gradle:3.2.1'
**module build.gradle**
apply plugin: 'kotlin-kapt'
kapt "androidx.databinding:databinding-compiler:3.2.1"
**gradle.properties**
Android.databinding.enableV2=false
これらのソリューションはどれも役に立たなかったので、Android studioの3.2ベータ4バージョンでバグを見つけました。
buildscript {
repositories {
...
}
dependencies {
//classpath "com.Android.tools.build:gradle:3.2.0-beta04" // buggy databinding
classpath "com.Android.tools.build:gradle:3.1.3" // working
}}
この後、同期、再構築、すべてを正しく実行します
Grade.propertiesにこれらの行を追加すると、問題を保存できました
Android.enableExperimentalFeatureDatabinding = true
Android.databinding.enableV2=true
ルームエンティティクラスでいくつかの変更を行った後、このエラーが発生しました。したがって、このエラーはルームライブラリに何らかの形で関連していると感じています。 Roomクラスとエンティティの変更を元に戻すか、コメントしてエラーが修正されたかどうかを確認してください。
私の場合、挿入メソッドと更新メソッドからint
を返していたため、エラーが発生しました。これらのメソッドは何も返しません。したがって、return
を削除するとエラーが修正されました。
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(student: Student):Int
に
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(student: Student)
Gradle.propertiesに以下を追加します。Android.databinding.enableV2=true
Build.gradle(module:app)ファイルに以下を追加します。dataBinding {enabled = true}
プロジェクトをクリーンにして、再構築します。
動作し始めます...
私は同じ問題を抱えていました。 Projectのbuild.gradleにgoogle()を追加して修正しました
allprojects {
repositories {
jcenter()
**google()**
}
}
必ずallProjectsに追加してください
まず第一に
1。ルートレイアウトに「レイアウト」を追加する
これは、Android studioとデータバインディングに関する非常に厄介なバグです!最終的にデータバインディングを少なくともコンパイルするために、提案されたすべてのソリューションと1日以上をテストする必要がありました。
したがって、gradle.properties
ファイルのすべてのdatabindind設定を無効にし、これらの行をコメントするか削除する必要がありました。
Android.databinding.enableV2 = true
Android.enableExperimentalFeatureDatabinding = true
build.gradle
からbuildToolsVersion
を削除し、次のSDKバージョンを使用します。
compileSdkVersion 27
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
さらに、キャッシュをさらにクリーン/リビルドして無効化し、再起動すると、最終的にコンパイルされます。 ASエンジニアはバグの作成に優れています!
きれいなプロジェクト。
古いバージョンのgradleで生成されたクラスは、新しいバージョンでは使用できません。
https://issuetracker.google.com/issues/116541301#comment17
gradle 3.1.0の後、プラグイン生成クラスのキャッシュを導入しました。
https://developer.Android.com/studio/releases/gradle-plugin#behavior_changes_2
これは奇妙に思えるかもしれませんが、エラーに直面して数時間を無駄にし、最新の変更を調べた後、Roomデータベースのエラーに関連していることがわかりました。
Daoインターフェースの1つを宣言しましたが、@Dao
で注釈を付けるのを忘れていました。
修正後、データバインディングエラーが修正されました。
これはAndroid studioのバグだと思います。
データバインディングを使用している場合は、xmlファイルを確認してください。 1つのクラスの名前を変更し、Android Studioがxmlファイルに変更を加えることに決めたため、今日は1時間を無駄にしました。たとえば、LiveGameModelという名前のクラスがあり、LiveGameViewに名前を変更し、ASはこのビューに関係のないxmlファイルを変更することにしました。私は知っている、このバグは意味をなさない。