Lors de la compilation de mon application, l'erreur suivante s'affiche sur toutes mes classes WhateverFragmentOrActivityBinding générées:
error: cannot find symbol
protected WhateverFragmentOrActivityBinding(DataBindingComponent _bindingComponent, View _root,
^
symbol: class DataBindingComponent
location: class WhateverFragmentOrActivityBinding
La classe DataBindingComponent
ne semble pas être générée.
En consultant la documentation de DataBindingComponent
, nous voyons:
Si vous utilisez Dagger 2, le développeur doit étendre cette interface et annoter l'interface étendue en tant que composant.
J'utilise effectivement Dagger 2, donc je suppose que cela pourrait être pertinent. J'ai essayé de le faire moi-même, en vain, et je ne l'ai pas trouvé implémenté sur Internet. C'est ce que j'ai essayé:
@Component(dependencies = [AppComponent::class], modules = [(AppModule::class), (AndroidInjectionModule::class), (ActivityBuilderModule::class)])
interface BindingComponent : DataBindingComponent
Cependant, la classe DaggerBindingComponent n'est jamais générée à cause de l'impossibilité de trouver les erreurs de symbole que j'avais déjà. Cela ressemble à un problème de poulet et d’œufs, donc je ne suis pas sûr que ce soit la solution à mon problème.
Le composant DataBindingComponent semble être responsable de la gestion des BindingAdapters. J'ai des adaptateurs de liaison personnalisés pour lier une propriété ImageView src, mais même commenter ces adaptateurs n'aide pas, je ne suis donc pas sûr qu'ils soient liés.
J'ai essayé de supprimer complètement Dagger de l'application et le problème ne s'est pas dissipé. Je ne sais pas quoi d'essayer
u_u
J'avais le même problème il y a quelques jours, j'utilisais des variantes de produit et l'un d'entre eux (celui sur lequel je travaillais actuellement) n'avait pas accès à une classe requise, cela entraînait l'échec de TOUTES les classes de liaison. obtenir plusieurs erreurs sur chaque classe de liaison Activity ou Fragment.
J'utilisais aussi Dagger2 et l'un de mes modules n'avait pas accès à une classe (CustomBroadcastReceiver)
@Module
abstract class BroadcasReceiverModule {
@ContributesAndroidInjector
internal abstract fun contributePhoneStateBroadcastReceiver(): CustomBroadcastReceiver
}
cette erreur n'a jamais été affichée après le processus de génération, BroadcastReceiverModule faisait partie de mes ressources "principales" mais n'était pas nécessaire pour la version sur laquelle je travaillais alors que CustomBroadcastReceiver n'existait pas.
même si cela n’était pas nécessaire, il générait tout un tas d’erreurs qui disparaissaient après que j’ai retiré BroadcastReceiverModule des ressources "principales" et que je le plaçais uniquement sur les goûts qui étaient réellement nécessaires
J'avais les mêmes messages d'erreur.
Ensuite, j'ai découvert que Studio affichait des erreurs lorsque DataBinding était utilisé/construit, la sortie de génération n'affichant pas plus de 100 lignes d'erreur par défaut, de sorte
https://github.com/google/dagger/issues/306
Ajouté ceci à build.gradle:
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "500" // or whatever number you want
}
}
Puis j'ai trouvé l'erreur réelle:
https://github.com/google/dagger/issues/1245
https://issuetracker.google.com/issues/115738511
La solution pour moi était de rétrograder Dagger 2.19 à Dagger 2.16.