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.
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.
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/
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)
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.
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
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'
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.
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 !!
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
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
L'ajout de ces lignes dans grade.properties m'a aidé à sauver le problème
Android.enableExperimentalFeatureDatabinding = true
Android.databinding.enableV2=true
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)
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
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 ...
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
TOUT D'ABORD
1. ajoutez "layout" à votre layout racine
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!
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
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.
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.