J'utilise Android Studio pour mes Android projets. J'ai rencontré un problème lorsque les builds se bloquent avec une étrange trace de pile, comme ceci:
Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'.
Java.lang.RuntimeException: failure, see logs for details.
cannot generate view binders Java.lang.NullPointerException
at Android.databinding.tool.reflection.ModelMethod.isBoxingConversion(ModelMethod.Java:155)
at Android.databinding.tool.store.SetterStore.isBetterParameter(SetterStore.Java:946)
at Android.databinding.tool.store.SetterStore.getBestSetter(SetterStore.Java:838)
et il a semblé que la liaison de données a été rompue dans son ensemble.
J'ai fait du refactoring avant et déplacé les classes entre les packages.
Dans mon cas, je me suis appuyé sur Android Studio pour renommer et déplacer des classes entre les packages. Mais il n'a pas procédé à la correction des XML des dispositions où se trouvaient des références sur les classes refactorisées dans le type
attribut de l'élément variable
dans data
.
Donc, la valeur de mon type précédent pointait vers des fichiers non existants et la construction s'est bloquée.
C'est une simple erreur mais cela peut prendre plus de temps pour trouver la source. J'espère que cela aiderait quelqu'un.
Assurez-vous d'importer toutes les classes référencées dans les liaisons xml
J'avais du code quelque chose comme:
Android:visible="@{obj instanceof A}"
J'obtenais cette même erreur.
Il s'avère que la classe A
n'a pas été importée en haut. Ajouter <import type="com.company.A">
tag a résolu le problème.
P.S. Android: visible est un adaptateur de liaison personnalisé que j'ai.
dans mon cas, mon problème était dans un LongClickListener
que la méthode pour cet écouteur doit avoir renvoyé un boolean
mais ma méthode a renvoyé void
donc quand j'ai ajouté la bonne déclaration de retour, cela a fonctionné ça va.
gardez à l'esprit que si vous utilisez une méthode de liaison de données, vous devez renvoyer la valeur correcte, sinon l'erreur qu'elle génère n'est pas du tout utile.
Vous êtes peut-être tombé sur cette question après avoir migré vers Android X. Si tel est le cas, et que vous êtes certain que vos fichiers XML sont corrects, mais cela ne fonctionne toujours pas, vous devriez commencer à regarder les bibliothèques qui génèrent du code.
Les bibliothèques qui génèrent du code ne peuvent pas être facilement converties par le Jettifyer. Quelques informations ici - https://blog.danlew.net/2018/11/14/the-reality-of-migrating-to-androidx/
Dans mon cas, j'ai mis à jour les plus évidents, mais il me manquait encore quelque chose. Donc, ce que j'ai fait, c'est aller dans ma branche de développement (ce n'était pas Android X), j'ai exécuté une build et creusé dans le dossier de build pour voir toutes les bibliothèques qui ont généré du code. J'ai fait cela, j'ai pu examiner les suspects un par un jusqu'à ce que je trouve la dépendance à l'origine de ce problème. Vous pouvez soit le mettre à jour, soit, dans mon cas, le supprimer et cette erreur a été résolue. :)
La fonction getter pour toute instance que vous référez à partir de votre fichier xml peut ne pas avoir été définie ou la fonction getter peut ne pas avoir public spécificateur d'accès.
Je suis confronté à ce problème lorsque je définis une variable comme celle-ci (Android Studio ne prévient rien)
<data>
<variable
name="onGlobalLayoutA"
type="ViewTreeObserver.OnGlobalLayoutListener"/>
<import type="Android.view.ViewTreeObserver"/>
</data>
Et je résoudre par
<data>
<variable
name="onGlobalLayoutA"
type="Android.view.ViewTreeObserver.OnGlobalLayoutListener"/>
</data>
J'espère que cela aiderait quelqu'un.
Dans mon cas, la raison était que j'ai utilisé un type pour une variable qui est un autre module et que ce module est ajouté en tant que "implémentation" dans le script de construction. Le passage à "api" a résolu le problème.
Clairement pas le même problème que celui publié par atlascoder mais je le mentionne malgré tout, peut-être que quelqu'un a gits cet article avec le même problème que moi.
Rétrograder Android Gradle Plugin to 3.5.1 a résolu le problème pour moi
Comme @ hiddeneyes02 l'a mentionné, cela a commencé à se produire lors de la mise à niveau de Android Gradle Plugin de 3.5.1 à 3.5.2, cela semble être le bogue: https://issuetracker.google .com/issues/143778134
Lorsque j'ai construit le projet avec l'outil de commande, j'ai eu les mêmes erreurs que dans cet article: lors de la construction Android projet avec Android Gradle Plugin v 3.5.2 mes builds échouent