support google dependency compiler annotationprocessor android dagger

google - inject class android



Daga 2 componente no generado (6)

¿Quizás olvidó anotar ModuleClass con @Module?

En mi módulo, en mi clase de aplicación base.

component = DaggerCompClassComponent.builder() .classModule(new ModuleClass()).build();

no puede encontrar DaggerCompClassComponent.

Tengo en el modulo 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''

y en el proyecto build.gradle,

classpath ''com.neenbedankt.gradle.plugins:android-apt:1.8''

He hecho construir / reconstruir / limpiar / reiniciar proyecto. Tengo una clase de componentes donde inyecto objetos y una clase de módulo donde proporciono objetos para inyectar.

¿Cuál puede ser la causa para no generar Dagger Component. clase ?

EDITAR:

Esta es mi clase de módulo, mencionada con @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); }

Y esta es mi clase de componentes:

@Component(modules = ModuleClass.class) @Singleton public interface ComponentClass { void inject(Interceptor o); void inject(OkHttpClient o); void inject(Retrofit o); void inject(WebServiceCall o); }


Al desarrollar en Kotlin, debe agregar las siguientes líneas junto a sus homólogos de annotationProcessor procesador:

kapt ''com.google.dagger:dagger-android-processor:2.15'' kapt ''com.google.dagger:dagger-compiler:2.15''

y agregue el apply plugin: ''kotlin-kapt'' al inicio del mismo archivo.

Esa sección se ve así para mí:

apply plugin: ''com.android.application'' apply plugin: ''kotlin-android'' apply plugin: ''kotlin-kapt'' // <- Add this line apply plugin: ''io.fabric''


Aquí está la solución para el nuevo proyecto Dagger.

Estas dos líneas son responsables de generar el marco de tiempo de compilación en Dagger 2.

compile ''com.google.dagger:dagger:2.14.1'' // genera el marco en el tiempo de compilaciónProcessor annotationProcessor ''com.google.dagger:dagger-compiler:2.14.1'' // genera el marco en el tiempo de compilación en función de las anotaciones que proporcionó .

Configuración completa daga

//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''

Nota : debe configurar el proceso de anotación como se indica en la captura de pantalla a continuación. Puede hacer este File>Other Settings>Default Settings> buscar "Annotation processor"


Hay algunos errores / fallas menores en su código de arriba, aquí hay una implementación que funciona:

Aplicación.java:

component = DaggerComponentClass.builder().classModule(new ModuleClass()).build();

La clase generada se llamará DaggerComponentClass , no DaggerCompClassComponent . Si no puede ejecutar su aplicación en Android Studio para compilarla, pruebe Build-> Clean project y Build-> Rebuild project en el menú. Si todo está bien, Dagger habrá compilado DaggerComponentClass que se ubicará en el mismo paquete que ComponentClass .

ComponentClass.java:

@Component(modules = ModuleClass.class) public interface ComponentClass { void inject(AClassThatShouldGetInstancesInjected instance); }

Un componente en Dagger2 tiene métodos llamados inject que reciben la instancia para obtener instancias inyectadas en él, y no al revés. En el código anterior, la clase AClassThatShouldGetInstancesInjected normalmente llamará componentClass.inject(this); para conseguir instancias inyectadas en si mismo.

ModuleClass.java:

@Module public class ModuleClass { @Provides @Singleton public Interceptor provideInterceptor() {/*code*/} //Your Providers... }

El módulo está correcto en su código, asegúrese de que esté anotado.


Si Dagger2 no puede generar sus componentes, significa que su código tiene algunos errores con Scopes / Modules. Revisa nuestros métodos @ @ Proporciona / Inyecta.

UPD:

Debe inyectar sus componentes en los casos en que necesite instancias de clases proporcionadas por el módulo.

me gusta

inject(MainActivity main);


Si tiene varios módulos en su AndroidStudio (módulos en términos de Android Studio, no Dagger), otra posible razón de falla es que se le olvidó colocar procesadores de anotación en el build.gradle todos los módulos.

Hemos dividido nuestra aplicación en varios módulos, hemos actualizado las dependencias desde el uso de la implementation hasta el uso de la api pero se olvidó de manejar los procesadores de anotación en consecuencia.

Entonces, puedes tener estas líneas solo en un módulo raíz:

api ''com.google.dagger:dagger-android:2.16'' // if you use the support libraries api ''com.google.dagger:dagger-android-support:2.16''

Pero estos deben especificarse en todas las dependencias de los módulos:

annotationProcessor ''com.google.dagger:dagger-compiler:2.16'' // if you use injections to Android classes annotationProcessor ''com.google.dagger:dagger-android-processor:2.16''