web-dev-qa-db-fra.com

ne trouve pas la classe de symboles DaggerAppComponent ou ne trouve pas la classe de symboles DaggerActivityComponent

J'obtiens cette erreur après avoir ajouté inject sur ma classe, alors cela me donne une erreur de compilation. Si je supprime 

@Inject static ApiService mApiService;

ça marche bien

Et j'utilise la classe 2 Application qui sont étendues MultidexApplication parce que j'ai fusionné. La première application utilise dagger2 et la deuxième application est butterknife. Les deux structures de répertoires sont différentes et les deux applications fonctionnent parfaitement de manière interdépendante. Erreur!

Merci de nous aider à résoudre ma requête

Je suis la structure ci-dessous


@ActivityScope
@Component(dependencies = AppComponent.class)
public interface ActivityComponent extends AppComponent {
    void inject(SignInActivity activity);
}

@Singleton
@Component(modules = {ApplicationModule.class, ApiModule.class})
public interface AppComponent {
    Context appContext();
    Config config();
    ApiService apiService();    
}

@Module
public class ActivityModule {
    private final Activity mActivity;

    public ActivityModule(Activity activity){
        mActivity = activity;
    }

    @Provides
    public Context activityContext(){
        return mActivity;
    }
}

@Module
public class ApiModule {
    @Provides
    @Singleton
    public ApiService apiService(){
        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .build();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
        return new Retrofit.Builder()
                .baseUrl(Config.API_URL)
                .addConverterFactory(JacksonConverterFactory.create(mapper))
                .client(client)
                .build()
                .create(ApiService.class);
    }
}

@Module
public class ApplicationModule {
    private final App mApp;

    public ApplicationModule(App app) {
        mApp = app;
    }

    @Provides
    @Singleton
    public Context appContext() {
        return mApp;
    }

    @Provides
    @Singleton
    public Config config() {
        return new Config(mApp);
    }    
}

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}

public class App extends BrowserApp {
    private AppComponent mAppComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        mAppComponent = DaggerAppComponent.builder().applicationModule(new ApplicationModule(this)).build();

    }

    public AppComponent getAppAppComponent() {
        return mAppComponent;
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
4
mbpatel

Juste pour aider les personnes cherchant la solution à ce problème comme moi, incluez les lignes ci-dessous dans le module build.gradle de votre application (remplacez les dépendances dagger2 existantes).

// Dagger 2
implementation "com.google.dagger:dagger-Android-support:2.11"
implementation "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
5
Fio

Si vous ne trouvez pas la classe de symboles DaggerAppComponent, accédez au dossier:\app\build\généré et supprimez-le, puis reconstruisez le projet.

4
Ardit Zeza

Avait ce problème. Dans mon cas, j'ai oublié de mettre @Singelton avant toutes les classes de composants.

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
...
}
2
Janusz Waligóra

Dans mon cas j'ai essayé:

  • invalider le cache et nettoyer le projet
  • changer la version de dague
  • ajout de -Pandroid.incrementalJavaCompile = false dans gradle.properties
  • beaucoup plus.

La seule chose qui m'a aidé dans mon cas a été d'ouvrir la console " build ", cliquer sur " Basculer la vue " (à gauche de la console et sous le marteau) et corriger les erreurs qui apparaissent sur cet écran .

1
Julian Sanchez

Dans mon cas, DaggerAppComponent n'a pas été généré, car j'avais inclus les dépendances dagger2 dans mon sous-module . J'ai supprimé les dépendances à partir de là et les dans module principal de l'application ont résolu le problème.

1
NightFury

Avez-vous essayé cela?

@ActivityScope
@Component(modules = ActivityModule.class, dependencies = 
AppComponent.class)
public interface ActivityComponent extends AppComponent {
    void inject(SignInActivity activity);
}
1
AndroidRocks

Dans mon cas, j'ai ajouté à SomeModule quelque chose comme ceci dans le module Kotlin:

@SomeScope
@Provides
internal fun providesSomeService(activity: MainActivity): SomeServiceProvider {
    return SomeServiceProviderImpl(activity)
}

Supprimé et obtenu une autre erreur, puis corrigé. Alors, utilisez Git pour comprendre ce qui ne va pas. Dans Kotlin, vous devez séparer les méthodes @Binds et @Provides en différents modules.

0
CoolMind

J'ai ajouté ci-dessous dans gradle.properties:- 

-Pandroid.incrementalJavaCompile=false

Ça a fonctionné pour moi

0
sharma_kunal