未生成Dagger 2组件

ghi*_*ita 35 android dagger

在我的模块中,在我的基础Application类中

component = DaggerCompClassComponent.builder()
                .classModule(new ModuleClass()).build();
Run Code Online (Sandbox Code Playgroud)

它找不到DaggerCompClassComponent.

我有模块build.gradle

apply plugin: 'com.neenbedankt.android-apt'
.........................
apt 'com.google.dagger:dagger-compiler:2.8'
compile 'com.google.dagger:dagger:2.8'
provided 'javax.annotation:jsr250-api:1.0'
Run Code Online (Sandbox Code Playgroud)

在Project build.gradle中,

 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Run Code Online (Sandbox Code Playgroud)

我已经完成了build/rebuild/clean/restart项目.我有一个Component类,我在其中注入对象和一个ModuleClass,我提供了要注入的对象.

不生成Dagger组件的原因是什么.上课?

编辑:

这是我的ModuleClass,用@Module注释:

@Provides
@Singleton
public Interceptor provideInterceptor() {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request.Builder builder = chain.request().newBuilder();

            builder.addHeader("AppName-Android", BuildConfig.VERSION_NAME + "-" + BuildConfig.VERSION_CODE)
                    .addHeader("Content-Type", "application/json");

            return chain.proceed(builder.build());
        }
    };
}

@Provides
@Singleton
OkHttpClient provideOkHttpClient(Interceptor interceptor) {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.interceptors().add(interceptor);
    return builder.build();
}

@Provides
@Singleton
Retrofit provideRetrofit(OkHttpClient client) {
    return new Retrofit.Builder()
            .baseUrl(BaseApplication.getRes().getString(R.string.api_base_url))
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
}

@Provides
@Singleton
WebServiceCall provideWebService(Retrofit retrofit) {
    return retrofit.create(WebServiceCall.class);
}
Run Code Online (Sandbox Code Playgroud)

这是我的组件类:

@Component(modules = ModuleClass.class)
@Singleton
public interface ComponentClass {

    void inject(Interceptor o);
    void inject(OkHttpClient o);
    void inject(Retrofit o);
    void inject(WebServiceCall o);

}
Run Code Online (Sandbox Code Playgroud)

Gon*_*alo 82

在Kotlin上进行开发时,您应该在其annotationProcessor对应项旁边添加以下行:

kapt 'com.google.dagger:dagger-android-processor:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'
Run Code Online (Sandbox Code Playgroud)

apply plugin: 'kotlin-kapt'在同一文件的开头添加.

那部分对我来说是这样的:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' // <- Add this line
apply plugin: 'io.fabric'
Run Code Online (Sandbox Code Playgroud)


Udd*_*tam 27

这是新鲜Dagger项目的解决方案.

这两行负责在Dagger 2中生成编译时框架.

compile 'com.google.dagger:dagger:2.14.1'//在编译时 annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'生成框架//根据您提供的注释在编译时生成框架.

完全设置匕首

        //dagger 2
        compile 'com.google.dagger:dagger:2.14.1'
        annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'

        //to enable DaggerActivity, DaggerBroadcastReceiver, DaggerFragment etc classes
        compile 'com.google.dagger:dagger-android:2.14.1'
        annotationProcessor 'com.google.dagger:dagger-android-processor:2.14.1'

        //support libraries with dagger 2
        compile 'com.google.dagger:dagger-android-support:2.14.1'
Run Code Online (Sandbox Code Playgroud)

注意:您需要配置注释过程,如下面的屏幕截图所示.你可以做这个File>Other Settings>Default Settings>搜索"Annotation processor" 在此输入图像描述

  • 在Windows上允许“注释处理器”的正确路径是文件-&gt;其他设置-&gt;新项目的设置... (2认同)

Ale*_*tov 6

也许你忘了用@Module注释ModuleClass?


Gak*_*ket 5

如果您的 AndroidStudio 中有多个模块(Android Studio 中的模块,而不是 Dagger),另一个可能的失败原因是您忘记将注释处理器放入所有模块的build.gradle.

我们将我们的应用程序分成几个模块,更新了从使用implementation到使用的依赖关系,api但忘记相应地处理注释处理器。

因此,您只能在根模块中使用此行:

api 'com.google.dagger:dagger-android:2.16'
// if you use the support libraries
api 'com.google.dagger:dagger-android-support:2.16'
Run Code Online (Sandbox Code Playgroud)

但是应该在所有模块依赖项中指定这些:

annotationProcessor 'com.google.dagger:dagger-compiler:2.16'
// if you use injections to Android classes
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'
Run Code Online (Sandbox Code Playgroud)