41 votes

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

Ce matin, j'ai fait une mise à jour de android studio de 3.0.1 à 3.1.0. Après avoir mis à jour le gradle à la dernière version, je reçois toujours une erreur de construction concernant la liaison de données.

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 a-t-il une idée de la raison pour laquelle mon data binding ne se génère pas après la mise à jour Android studio 3.1 ? Merci d'avance

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

0 votes

Avez-vous fait un nettoyage/reconstruction ?

0 votes

J'ai essayé de nettoyer/reconstruire/invalider le cache et de redémarrer/supprimer le dossier de construction.

21voto

Xavier Points 321

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

Ajoutez les éléments suivants à votre gradle.properties : Android.databinding.enableV2=false

Raison :

Liaison de données V2

Data Binding V2 est maintenant activé par défaut et est compatible avec V1. Cela signifie que, si vous avez des dépendances de bibliothèque que vous avez compilées avec la V1, vous pouvez les utiliser avec des projets utilisant Data Binding V2. Cependant, notez que les projets utilisant la V1 ne peuvent pas consommer les dépendances qui ont été compilées avec la V2.

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

0 votes

Cela m'a aidé. J'ai probablement commencé mon projet avec le databinding et plus tard j'ai ajouté la base de données Room. Mais comme les dépendances ont été compilées avec la V1 - y a-t-il un moyen de les recompiler ?

0 votes

J'ai obtenu cette erreur lorsque j'ai retiré androidExtensions { experimental = true }

1 votes

Cela a fonctionné pour moi dans la situation suivante : Je travaille sur un RAA qui dépend d'un RAA d'un autre groupe, et pour lequel je n'ai pas mon mot à dire ni d'influence. Mon RAA utilise V2 et le leur utilise V1. Je ne l'avais pas réalisé avant de voir votre réponse. Cela a fonctionné en utilisant ce commutateur.

4voto

slenderm4n Points 221

Si vous utilisez kotlin sur Android studio 3.2 , remplacez le distributionurl 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 construction à la version appropriée. Une fois que vous avez fait cela, 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 marché pour moi.

0 votes

J'ai eu le même problème lors de la mise à jour vers Android Studio 3.2 et cela fonctionne pour moi, merci beaucoup.

0 votes

Pourquoi avons-nous besoin kapt 'com.android.databinding:compiler ? Cela semble inutile

4voto

Squimon Points 393

Ce n'est peut-être pas la réponse la plus utile, mais dans mon cas, cela a été causé par une complètement problème non lié dans mon code.

Je recevais 51 error: cannot find symbol: DataBindingComponent (dans chacune des classes générées par Data Binding), et j'ai passé des siècles à supprimer les modifications apportées à mon code XML et ViewModel pour essayer de trouver la cause de ces erreurs.

Le problème réside en fait dans une modification invalide que j'ai apportée à un modèle de chambre. Je suppose qu'une erreur de Room aurait pu être masquée par toutes les erreurs de liaison de données, mais les journaux de débogage/analyse dans le terminal ne l'indiquaient pas.

Si vous rencontrez ce problème, passez donc en revue tout le code récent, même les changements apparemment sans rapport.

Edit : Voir ceci SO post sur ces erreurs de liaison de données qui obscurcissent d'autres problèmes de Kapt (comme Room / Dagger).

0 votes

Je suis confronté au même problème, chaque fois que j'apporte des modifications non valides aux composants liés à la pièce, cela me donne une erreur de liaison de données, donc je pensais le signaler, Avez-vous déjà signalé ce problème à issuetracker.google.com/issues ?

0 votes

C'est la pire expérience que j'ai eue avec Room. J'ai perdu deux jours à essayer de comprendre pourquoi il y avait tant d'erreurs de liaison.

2voto

Sagar Kacha Points 4093

Vous devez changer trois choses lorsque vous mettez à jour Android Studio 3.0.1 à 3.1.0. Il s'agit des éléments suivants

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

enter image description here A enter image description here

2) Il faut mettre à jour la dépendance de la liaison de données dans le fichier gradle au niveau de l'application de kapt 'com.Android.databinding:compiler:3.0.1' à kapt 'com.Android.databinding:compiler:3.1.0'.

enter image description here

Et si vous développez en utilisant kotlin alors,

3) Troisième et dernière chose, il faut mettre à jour le plug-in kotlin gradle. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30" (en anglais) à classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.31" (en anglais) dans la dépendance de gradle au niveau du projet. Vous pouvez également mettre à jour la version de gradle build comme indiqué dans l'image ci-dessous.

enter image description here

Après toutes les étapes ci-dessus, il suffit de nettoyer et de reconstruire le projet. J'espère que cela vous aidera à résoudre votre problème.

Merci ! Joyeux codage !

0 votes

Avez-vous trouvé une solution ? J'ai également essayé cette approche et cela n'a pas fonctionné L'erreur dans mon cas est cannot find symbol : DataBinderMapper

0 votes

Je cherche toujours une solution, désolé. Si je trouve quelque chose, je posterai la réponse ici.

0 votes

Oui, j'ai cette solution et cela fonctionne pour moi. Je suis également à la recherche d'autres solutions pour vous si je vais obtenir puis partager part avec vous.

2voto

Marian Pavel Points 1029

Ok, donc ceux qui se demandent comment j'ai réparé cela. La solution est assez simple mais vous ne l'aimerez probablement pas.

J'ai dû déplacer toutes mes classes qui étaient utilisées dans la liaison de données dans le paquet Root du projet et après, cela a recommencé à fonctionner.

20 votes

Cela n'a aucun sens.

1 votes

Je n'ai pas dit que ça avait un sens... C'est probablement juste un bug.

0 votes

En fait, cela a fonctionné pour moi avec mes classes dans différents modules également. J'avais un autre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X