web-dev-qa-db-fra.com

DataBindingComponent non généré lors de l'utilisation de dagger2

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 

7
Jason Ridge

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

1
Eduardo Martinez

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.

1
vitorefo