web-dev-qa-db-ja.com

Android St​​udioは、3.1.0更新後にデータバインディングを生成できません

今朝、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:言うことを忘れて、キャッシュをクリーン/リビルド/無効化してビルドフォルダを再起動/削除しました。

33
Marian Pavel

わかりましたので、私がこれをどのように修正したか疑問に思っている人。解決策は非常に簡単ですが、おそらくあなたはそれを気に入らないでしょう。

プロジェクトのルートパッケージでデータバインディングに使用されたすべてのクラスを移動しなければならず、その後再び動作を開始しました。

3
Marian Pavel

Android St​​udio 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/

14
Xavier

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

プロジェクトをビルドします。それは私のために働いた。

5
slenderm4n

これは最も役立つ答えではないかもしれませんが、私の場合、これは私のコードのcompletely無関係な問題が原因でした。

私は51個のerror: cannot find symbol: DataBindingComponentエラーを(データバインディングで生成されたすべてのクラスで)受け取っていましたが、何が原因でXMLおよびViewModelコードの変更を削除しようとしていたのです。

問題は実際に、部屋モデルを作成した無効な変更にありました。ルームエラーはすべてのデータバインディングエラーによって難読化された可能性がありますが、ターミナルのデバッグ/スキャンログはそれを指していませんでした。

したがって、この問題が発生した場合は、一見無関係な変更であっても、すべての最近のコードを確認してください。

Edit:これを参照してください SO post 他のkapt問題(Room/Daggerなど)を難読化するこれらのデータバインディングエラーについて

4
Squimon

Android St​​udio 3.0.1から3.1.0に更新する場合、3つのことを変更する必要があります。これは以下のとおりです

1)distributionUrlのgradle.wrapper-propertiesを変更する必要があります。 URLはdistributionUrl = https://services.gradle.org/distributions/gradle-4.4-all.Zipでなければなりません

enter image description here 宛先 enter image description here

2)アプリレベルのgradleファイルのデータバインディングの依存関係をkapt 'com.Android.databinding:compiler:3.0.1'からkapt 'com.Android.databinding:compiler:3.1.0'に更新する必要がある

enter image description here

そして、あなたが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依存関係。また、次の図に示すように、ビルドグラドルバージョンを更新できます。

enter image description here

上記のすべての手順の後、ビルドとプロジェクトを再構築するだけです。問題の解決に役立つことを願っています。

ありがとう!!ハッピーコーディング!!

3
Sagar Kacha

Javaプロジェクトのこのエラーを修正するには、supportLibraryVersionにロールバックする必要があります-27.0.2からの27.1.0 AndroidStudio 3.1およびcom.Android.tools.build:gradle:3.1.0で正常に動作します

Googleからの修正を待っています

2
Alex_297

@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
1
ddy214

これらのソリューションはどれも役に立たなかったので、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
}}

この後、同期、再構築、すべてを正しく実行します

1
Kebab Krabby

Grade.propertiesにこれらの行を追加すると、問題を保存できました

Android.enableExperimentalFeatureDatabinding = true
Android.databinding.enableV2=true
1
Moses Gitau

ルームエンティティクラスでいくつかの変更を行った後、このエラーが発生しました。したがって、このエラーはルームライブラリに何らかの形で関連していると感じています。 Roomクラスとエンティティの変更を元に戻すか、コメントしてエラーが修正されたかどうかを確認してください。

私の場合、挿入メソッドと更新メソッドからintを返していたため、エラーが発生しました。これらのメソッドは何も返しません。したがって、returnを削除するとエラーが修正されました。

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student):Int

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student)
1
Mohsen Hameed
  • Gradle.propertiesに以下を追加します。
    Android.databinding.enableV2=true

  • Build.gradle(module:app)ファイルに以下を追加します。
    dataBinding {enabled = true}

  • プロジェクトをクリーンにして、再構築します。

動作し始めます...

0
Gaurav1991

私は同じ問題を抱えていました。 Projectのbuild.gradleにgoogle()を追加して修正しました

allprojects {
    repositories {
        jcenter()
        **google()**
    }
}

必ずallProjectsに追加してください

0
sami qaiser

まず第一に
1。ルートレイアウトに「レイアウト」を追加する

  1. ビルド->プロジェクトの作成(「レイアウト」を追加した後の生成クラスの作成用)
  2. //プライベートなlateinit var binding:ActivityLoginBindingのバインド
  3. oncreateビュー//setContentView(R.layout.activity_login)binding = DataBindingUtil.setContentView(this @ LoginActivity、R.layout.activity_login)
0
Yudi karma

これは、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エンジニアはバグの作成に優れています!

0
Sergio

きれいなプロジェクト。

古いバージョンのgradleで生成されたクラスは、新しいバージョンでは使用できません。

https://issuetracker.google.com/issues/116541301#comment17

gradle 3.1.0の後、プラグイン生成クラスのキャッシュを導入しました。

https://developer.Android.com/studio/releases/gradle-plugin#behavior_changes_2

0
Shimon Doodkin

これは奇妙に思えるかもしれませんが、エラーに直面して数時間を無駄にし、最新の変更を調べた後、Roomデータベースのエラーに関連していることがわかりました。

Daoインターフェースの1つを宣言しましたが、@Daoで注釈を付けるのを忘れていました。

修正後、データバインディングエラーが修正されました。

これはAndroid studioのバグだと思います。

0
Ifta

データバインディングを使用している場合は、xmlファイルを確認してください。 1つのクラスの名前を変更し、Android St​​udioがxmlファイルに変更を加えることに決めたため、今日は1時間を無駄にしました。たとえば、LiveGameModelという名前のクラスがあり、LiveGameViewに名前を変更し、ASはこのビューに関係のないxmlファイルを変更することにしました。私は知っている、このバグは意味をなさない。

0
Nestor Lara