web-dev-qa-db-fra.com

Android Studio ne parvient pas à générer la liaison de données après la mise à jour 3.1.0

Ce matin, j'ai mis à jour Android studio de 3.0.1 à 3.1.0. Après la mise à jour de la version gradle vers la dernière version, l'erreur d'erreur de génération concernant la liaison de données persiste.

Mon gradle-wrapper.properties:

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

Toutes mes erreurs sont comme celle ci-dessous:

/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

Quelqu'un at-il une idée de la raison pour laquelle ma liaison de données ne serait pas générée après la mise à jour d'Android Studio 3.1? Merci d'avance

Edit 1: J'ai oublié de dire, j'ai essayé de nettoyer/reconstruire/invalider le cache et redémarrer/supprimer le dossier de construction.

28
Marian Pavel

Ok, donc ceux qui se demandent comment j'ai résolu ce problème ... La solution est assez simple mais vous ne l'aimerez probablement pas.

Je devais déplacer toutes mes classes utilisées dans la liaison de données dans le package racine du projet, puis elles ont recommencé à fonctionner.

3
Marian Pavel

Suite à la mise à jour vers Android Studio 3.2, cette ligne fonctionne pour moi. J'ai du code Java et Kotlin (compilateur) en cours d'exécution dans mon projet.

Ajoutez ce qui suit à votre gradle.properties:Android.databinding.enableV2 = false

Raison:

Liaison de données V2

La liaison de données V2 est maintenant activée par défaut et est compatible avec la version 1. Cela signifie que, si vous avez des dépendances de bibliothèque que vous avez compilées avec V1, vous pouvez les utiliser avec des projets utilisant Data Binding V2. Toutefois, notez que les projets utilisant V1 ne peuvent pas utiliser les dépendances compilées avec V2.

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

10
Xavier

Ce n'est peut-être pas la réponse la plus utile, mais dans mon cas, cela est dû à un problème complètement non lié dans mon code.

Je recevais 51 erreurs error: cannot find symbol: DataBindingComponent (dans chaque classe générée par Data Binding) et j'ai passé de nombreuses années à supprimer les modifications apportées à mon code XML et à mon code ViewModel pour essayer de trouver la cause.

Le problème réside en fait dans une modification non valide que j'ai faite un modèle Room. J'imagine qu'une erreur de salle a peut-être été obscurcie par toutes les erreurs de liaison de données, mais les journaux de débogage/analyse du terminal ne la pointaient pas.

Consultez donc tout le code récent, même des modifications apparemment indépendantes, si vous rencontrez ce problème.

Edit: See this SO post à propos de ces erreurs de liaison de données masquant d'autres problèmes de Kapt (comme Room/Dagger)

4
Squimon

si vous utilisez kotlin sur Android studio 3.2, remplacez le nom de distribution par cette ligne 

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

et il vous sera demandé de changer la version des outils de génération pour la version appropriée ... une fois que vous aurez terminé, supprimez cette ligne du fichier build.gradle au niveau de l'application.

kapt 'com.Android.databinding:compiler:3.0.1

et construire le projet. cela a fonctionné pour moi.

4
slenderm4n

Vous devez modifier trois éléments lors de la mise à jour d'Android Studio 3.0.1 à 3.1.0. Ceci est comme indiqué ci-dessous

1) Vous devez modifier gradle.wrapper-properties dans distributionUrl. Votre URL doit être distributionUrl = https: //services.gradle.org/distributions/gradle-4.4-all.Zip

 enter image description here À  enter image description here

2) Nécessité de mettre à jour la dépendance des liaisons de données dans le fichier de niveaux de niveau d'application de kapt 'com.Android.databinding: compilateur: 3.0.1' à kapt 'com.Android.databinding: compilateur: 3.1.0'

 enter image description here

Et si vous développez en utilisant Kotlin alors,

3) La troisième et dernière chose est de mettre à jour le plug-in kotlin gradle dans classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.30" vers classpath "org.jetbrains.kotlin: kotlin-gradle -plugin: 1.2.31 " dans la dépendance des niveaux au niveau du projet. Aussi, vous pouvez mettre à jour la version de construction comme indiqué dans l’image ci-dessous.

 enter image description here

après tout, il suffit de nettoyer les projets de construction et de reconstruction. J'espère que cela fonctionnera pour résoudre votre problème.

Merci !! Joyeux codage !!

3
Sagar Kacha

Aucune de ces solutions ne fonctionnait pour moi alors j'ai découvert son bug dans la version 3.2 beta 4 du studio Android:

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

après cela, je synchronise, reconstruit et exécute chaque chose correctement

1
Kebab Krabby

Pour corriger cette erreur dans un projet Java, vous devez restaurer la version suivante: supportLibraryVersion - 27.0.2 à partir de 27.1.0 fonctionne parfaitement avec AndroidStudio 3.1 et com.Android.tools.build:gradle:3.1.0.

En attente d'une solution de Google

1
Alex_297

L'ajout de ces lignes dans grade.properties m'a aidé à sauver le problème

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

J'ai eu cette erreur après avoir apporté quelques modifications aux classes Room Entity. Je pense donc que cette erreur est en quelque sorte liée à la bibliothèque de pièces. Essayez de revenir sur les modifications apportées aux classes et entités de la pièce ou commentez-les pour voir si l'erreur est corrigée.

Dans mon cas, l'erreur est apparue car je renvoyais int à partir des méthodes insert et update. Ces méthodes ne devraient rien renvoyer. Donc, supprimer return corrige l'erreur.

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

à

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

J'ai eu le même problème que @Marian Pavel, où mon projet ne pouvait pas compiler les composants de liaison de données à moins de disposer de la classe utilisée dans la liaison de données dans le dossier racine.

J'ai résolu le problème en faisant ceci:

Android Studio: 3.2.1 stable

**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
  • Dans le fichier gradle.properties, ajoutez:
    Android.databinding.enableV2=true

  • Dans le fichier build.gradle (module: app), ajoutez:
    dataBinding {enabled = true}

  • Nettoyer le projet et le réactiver.

Il va commencer à travailler ...

0
Gaurav1991

J'avais le même problème. Corrigé en ajoutant google () à Project build.gradle 

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

assurez-vous que vous ajoutez dans tous les projets

0
sami qaiser

TOUT D'ABORD
1. ajoutez "layout" à votre layout racine

  1. Build -> Make Project (pour créer une classe de génération après ajouter "layout")
  2. // liaison private lateinit var binding: ActivityLoginBinding
  3. dans la vue oncreate //setContentView(R.layout.activity_login) binding = DataBindingUtil.setContentView (this @ LoginActivity, R.layout.activity_login)
0
Yudi karma

Celui-ci est un bug très délicat avec Android studio et databinding! Je devais tester toutes les solutions proposées et certaines autres pendant une journée entière pour enfin compiler au moins la liaison de données.

Je devais donc désactiver tous les paramètres databindind dans le fichier gradle.properties. Il suffit de commenter ces lignes ou de les supprimer:

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

supprimez buildToolsVersion de build.gradle et disposez des versions de sdk suivantes:

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

De plus, un couple plus propre/reconstruit invalide les caches et redémarre, et il est FINALEMENT compilé. Les ingénieurs sont géniaux pour la création de bugs!

0
Sergio

projet propre.

les classes générées avec gradle ancienne version ne peuvent pas être utilisées avec une version plus récente.

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

après la version 3.1.0, ils ont introduit le cache pour les classes générées par plugin.

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

0
Shimon Doodkin

Cela peut sembler étrange, mais j’ai perdu quelques heures à faire face à l’erreur. Après une inspection de mes dernières modifications, j’ai découvert qu’elle était liée à une erreur dans la base de données Room. 

J'ai déclaré l'une des interfaces Dao, mais j'ai oublié de l'annoter avec @Dao.

Après avoir résolu le problème, l'erreur de liaison des données a été corrigée. 

Je suppose que c'est un bug du studio Android. 

0
Ifta

Vérifiez vos fichiers XML si vous utilisez la liaison de données. J'ai perdu une heure aujourd'hui parce que j'ai renommé une classe et qu'Android Studio a décidé d'apporter des modifications à mes fichiers xml. Par exemple, j'avais une classe appelée LiveGameModel et j'ai renommé LiveGameView et AS a décidé d'apporter des modifications aux fichiers xml qui ne sont pas liés à cette vue. Je sais, ce bug n'a pas de sens.

0
Nestor Lara