webentwicklung-frage-antwort-db.com.de

Android Studio kann nach 3.1.0-Update keine Datenbindung erstellen

Heute morgen habe ich ein Update auf Android studio von 3.0.1 auf 3.1.0 vorgenommen. Nach dem Update der gradle auf die neueste Version erhalte ich immer noch einen Build-Fehler bezüglich der Datenbindung.

Mein gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.Zip

Alle meine Fehler sind wie die folgenden:

/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

Hat jemand eine Idee, warum meine Datenbindung nach dem Android Studio 3.1-Update nicht generiert wird? Danke im Voraus

Edit 1: Ich habe vergessen zu sagen, dass ich den Clean-Clean/Rebuild/Cache-Cache ausprobiert und den Build-Ordner neu gestartet/gelöscht habe.

28
Marian Pavel

Ok, also diejenigen, die sich fragen, wie ich das behoben habe ... Die Lösung ist ziemlich einfach, aber Sie werden es wahrscheinlich nicht mögen.

Ich musste alle meine Klassen, die bei der Datenbindung verwendet wurden, im Projektwurzelpaket verschieben und danach wieder funktionieren.

3
Marian Pavel

Nach dem Update auf Android Studio 3.2 funktioniert diese Linie für mich. Ich habe sowohl Java- als auch Kotlin-Code (Compiler) in meinem Projekt.

Fügen Sie Folgendes zu Ihren gradle.properties hinzu :Android.databinding.enableV2 = false

Grund:

Datenbindung V2

Data Binding V2 ist jetzt standardmäßig aktiviert und ist mit V1 kompatibel. Das heißt, wenn Sie Bibliotheksabhängigkeiten haben, die Sie mit V1 kompiliert haben, können Sie sie mit Projekten verwenden, die Data Binding V2 verwenden. Beachten Sie jedoch, dass Projekte mit V1 keine Abhängigkeiten verwenden können, die mit V2 kompiliert wurden.

source (Versionshinweise): https://developer.Android.com/studio/releases/

10
Xavier

Dies ist möglicherweise nicht die hilfreichste Antwort, aber in meinem Fall wurde dies durch ein vollständig nicht zusammenhängendes Problem in meinem Code verursacht.

Ich habe 51 error: cannot find symbol: DataBindingComponent-Fehler erhalten (in jeder einzelnen durch Data Binding generierten Klasse), und ich habe lange damit verbracht, Änderungen an meinem XML- und ViewModel-Code zu entfernen, um herauszufinden, was sie verursacht hat.

Das Problem lag tatsächlich in einer ungültigen Änderung, die ich an einem Raummodell vorgenommen hatte. Ich vermute, dass ein Room-Fehler möglicherweise durch alle Fehler der Datenbindung verschleiert wurde, aber die Debug/Scan-Protokolle im Terminal zeigten nicht darauf.

Überprüfen Sie daher den gesamten aktuellen Code und auch scheinbar nicht zusammenhängende Änderungen, wenn Sie auf dieses Problem stoßen.

Edit: Siehe diese SO post über diese Datenbindungsfehler, die andere kapt-Probleme verschleiern (wie Room/Dagger)

4
Squimon

wenn Sie Kotlin unter Android Studio 3.2 verwenden, ersetzen Sie den Distributionurl durch diese Zeile 

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.Zip

sie werden aufgefordert, die Version der Build-Tools in die genehmigte Version zu ändern. Wenn Sie dies getan haben, entfernen Sie diese Zeile aus der Build-Gradle-Datei auf App-Ebene

kapt 'com.Android.databinding:compiler:3.0.1

und baue das Projekt. es hat für mich funktioniert.

4
slenderm4n

Beim Update von Android Studio 3.0.1 auf 3.1.0 müssen Sie drei Dinge ändern. Dies ist wie nachstehend aufgeführt

1) Sie müssen gradle.wrapper-properties in distributionUrl ändern. Ihre URL muss distributionUrl = https: //services.gradle.org/distributions/gradle-4.4-all.Zip sein.

 enter image description here Zu  enter image description here

2) Datenbindungsabhängigkeit in Gradle-Datei auf App-Ebene von kapt 'com.Android.databinding: compiler: 3.0.1' bis kapt 'com.Android.databinding: compiler: 3.1.0' aktualisiert.

 enter image description here

Und wenn Sie mit Kotlin entwickeln, dann

3) Als drittes und letztes Ding muss kotlin gradle plug in classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.30" nach classpath "org.jetbrains.kotlin: kotlin-gradle aktualisiert werden -plugin: 1.2.31 " in Gradle-Abhängigkeit auf Projektebene. Sie können auch die Build Gradle-Version aktualisieren, wie in der Abbildung unten gezeigt.

 enter image description here

nach all dem oben genannten Schritt einfach das Projekt bereinigen und neu erstellen. Ich hoffe, es funktioniert, um Ihr Problem zu lösen.

Danke !! Viel Spaß beim Programmieren !!

3
Sagar Kacha

Kommentiere diese Zeilen einfach in graddle-wrapper.properties Datei hat mir geholfen, mein Problem zu lösen

#Android.enableExperimentalFeatureDatabinding = true
#Android.databinding.enableV2=true
1
stevebaros

Keine dieser Lösungen funktionierte für mich. Daher fand ich den Fehler in der 3.2 Beta 4-Version von Android Studio heraus:

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

danach synchronisiere, neu aufbauen und alles richtig ausführen

1
Kebab Krabby

Um diesen Fehler in Java-Projekten zu beheben, sollten Sie ein Rollback durchführen, um LibraryVersion zu unterstützen - 27.0.2 von 27.1.0Works funktioniert gut mit AndroidStudio 3.1 und com.Android.tools.build:gradle:3.1.0.

Warten auf einen Fix von Google

1
Alex_297

Das Hinzufügen dieser Zeilen in grade.properties half mir, das Problem zu retten

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

Ich habe diesen Fehler erhalten, nachdem ich einige Änderungen in den Room Entity-Klassen vorgenommen habe. Ich habe das Gefühl, dass dieser Fehler irgendwie mit der Raumbibliothek zusammenhängt. Versuchen Sie, Änderungen in Raumklassen und Entitäten rückgängig zu machen oder sie zu kommentieren, um festzustellen, ob der Fehler behoben ist.

In meinem Fall ist der Fehler aufgetreten, weil ich int von Einfüge- und Aktualisierungsmethoden zurückgegeben habe. Diese Methoden sollten nichts zurückgeben. Das Entfernen von return hat den Fehler behoben.

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

zu

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student)
1
Mohsen Hameed

Ich hatte das gleiche Problem wie @Marian Pavel, bei dem mein Projekt die Datenbindungskomponenten nur kompilieren konnte, wenn ich nicht die Klasse hatte, die für die Datenbindung im Stammordner verwendet wird.

Ich habe das Problem dadurch behoben:

Android Studio: 3.2.1 stabil

**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
0
ddy214
  • In den gradle.properties hinzufügen:
    Android.databinding.enableV2=true

  • In der build.gradle (module: app) Datei fügen Sie hinzu:
    dataBinding {enabled = true}

  • Projekt bereinigen und neu aufbauen.

Es wird anfangen zu arbeiten ...

0
Gaurav1991

Ich hatte das gleiche Problem. Behebung des Problems durch Hinzufügen von google () zu Project build.gradle 

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

stellen Sie sicher, dass Sie allProjects hinzufügen

0
sami qaiser

Ich habe dies während der Aktualisierung von Gradle auf 3.4.2. Sie müssen lediglich die import-Anweisung von Java.lang entfernen. Unten ist ein Bildschirmauszug aus Google Text & Tabellen

enter image description here

0
GSK

ZUERST
1. Fügen Sie Ihrem Stammlayout "Layout" hinzu

  1. Build -> Make Project (zum Erzeugen einer Klasse nach dem Hinzufügen eines "Layouts")
  2. // private lateinit var Bindung binden: ActivityLoginBinding
  3. in der Ansicht oncreate //setContentView(R.layout.activity_login) binding = DataBindingUtil.setContentView (this @ LoginActivity, R.layout.activity_login)
0
Yudi karma

Dies ist ein sehr kniffliger Fehler mit Android Studio und Datenbindung! Ich musste all diese vorgeschlagenen Lösungen und einige weitere einen ganzen Tag lang testen, um das Datenbinden zumindest kompilieren zu können.

Ich musste also alle Datenbindind-Einstellungen in der gradle.properties-Datei deaktivieren, diese Zeilen einfach kommentieren oder löschen:

Android.databinding.enableV2 = true
Android.enableExperimentalFeatureDatabinding = true

buildToolsVersion aus build.gradle entfernen und folgende sdk-Versionen haben:

compileSdkVersion 27
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}

Plus ein paar weitere Clean/Rebuilder machen Caches ungültig und starten sie neu, und es wird ENDLICH kompiliert. Die Ingenieure von AS sind großartig beim Erstellen von Fehlern!

0
Sergio

sauberes Projekt.

klassen, die mit einer älteren Version erstellt wurden, können nicht mit einer neueren Version verwendet werden.

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

nach Gradle 3.1.0 wurde ein Cache für durch Plugins generierte Klassen eingeführt.

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

0
Shimon Doodkin

Dies mag seltsam erscheinen, aber ich habe ein paar Stunden mit dem Fehler verschwendet und nach einer Überprüfung meiner letzten Änderungen habe ich festgestellt, dass dies mit einem Fehler in der Raumdatenbank zusammenhängt. 

Ich habe eine der Dao-Benutzeroberflächen deklariert, aber vergessen, sie mit @Dao zu kommentieren.

Nachdem der Fehler behoben wurde, wurde der Datenbindungsfehler behoben. 

Ich denke, das ist ein Fehler von Android Studio. 

0
Ifta

Überprüfen Sie Ihre XML-Dateien, wenn Sie Datenbindung verwenden. Ich habe heute eine Stunde verschwendet, weil ich eine Klasse umbenannt habe und Android Studio beschlossen hat, Änderungen an meinen XML-Dateien vorzunehmen. Zum Beispiel hatte ich eine Klasse mit dem Namen LiveGameModel und ich habe sie in LiveGameView umbenannt. AS hat beschlossen, Änderungen in XML-Dateien vorzunehmen, die nicht mit dieser Ansicht zusammenhängen. Ich weiß, dieser Fehler macht keinen Sinn.

0
Nestor Lara