support para inyección dependencias con android android-gradle build.gradle dagger-2

android - para - Dagger 2 no está generando mi clase de componente



dagger android support (1)

Estoy trabajando con Dagger 2 para crear mi inyección de dependencia. Funcionó hace unas horas pero ahora los componentes ya no se generan.

Aquí es donde estoy creando los componentes:

public class App extends Application { CacheComponent mCacheComponent; ApiComponent mApiComponent; DataBaseComponent mDataBaseComponent; @Override public void onCreate() { super.onCreate(); mCacheComponent = DaggerCacheComponent.builder() .cacheModule(new CacheModule(getApplicationContext())) .build(); mApiComponent = DaggerApiComponent.builder() .apiModule(new ApiModule()) .build(); mDataBaseComponent = DaggerDataBaseComponent.builder() .dataBaseModule(new DataBaseModule(getApplicationContext())) .build(); } public CacheComponent getCacheComponent(){ return mCacheComponent;} public ApiComponent getApiComponent() { return mApiComponent; } public DataBaseComponent getDataBaseComponent() { return mDataBaseComponent;} }

Esto estaba funcionando pero ahora recibo errores:

E:/AndroidProject/JoinTV/app/src/main/java/com/myproject/jointv/utils/App.java:7: error: cannot find symbol import com.myproject.jointv.component.DaggerApiComponent; ^ symbol: class DaggerApiComponent location: package com.myproject.jointv.component E:/AndroidProject/JoinTV/app/src/main/java/com/myproject/jointv/utils/App.java:8: error: cannot find symbol import com.myproject.jointv.component.DaggerCacheComponent; ^ symbol: class DaggerCacheComponent location: package com.myproject.jointv.component E:/AndroidProject/JoinTV/app/src/main/java/com/myproject/jointv/utils/App.java:9: error: cannot find symbol import com.myproject.jointv.component.DaggerDataBaseComponent; ^ symbol: class DaggerDataBaseComponent location: package com.myproject.jointv.component Note: Resolve log file to E:/AndroidProject/JoinTV/app/build/generated/source/apt/androidannotations.log Note: Initialize AndroidAnnotations 3.3.2 with options {androidManifestFile=E:/AndroidProject/JoinTV/app/build/intermediates/manifests/full/debug/AndroidManifest.xml, resourcePackage Name=com.myproject.jointv} Note: Start processing for 5 annotations on 32 elements Note: AndroidManifest.xml file found with specified path: E:/AndroidProject/JoinTV/app/build/intermediates/manifests/full/debug/AndroidManifest.xml Note: AndroidManifest.xml found: AndroidManifest [applicationPackage=com.myproject.jointv, componentQualifiedNames=[com.myproject.jointv.activities.MainActivity_, com.myproject .jointv.activities.YoutubePlayerViewActivity, com.myproject.jointv.activities.VideoPlayerActivity_, com.myproject.jointv.services.ServiceDownloaderPlayList], permissionQualifiedN ames=[android.permission.INTERNET, android.permission.WRITE_EXTERNAL_STORAGE], applicationClassName=com.myproject.jointv.utils.App, libraryProject=false, debugabble=false, minSdkVe rsion=21, maxSdkVersion=-1, targetSdkVersion=23] Note: Found project R class: com.myproject.jointv.R Note: Found Android class: android.R Note: Validating elements Note: Validating with EActivityHandler: [com.myproject.jointv.activities.MainActivity, com.myproject.jointv.activities.VideoPlayerActivity] Note: Validating with EFragmentHandler: [com.myproject.jointv.fragments.VideoPlayerFragment] Note: Validating with ViewByIdHandler: [buttonPlay, videoView, videoView] Note: Validating with FragmentArgHandler: [url, cachePath] Note: Validating with AfterViewsHandler: [onViewInjected(), afterViewInjected()] Note: Processing root elements Note: Processing root elements EActivityHandler: [com.myproject.jointv.activities.VideoPlayerActivity, com.myproject.jointv.activities.MainActivity] Note: Processing root elements EFragmentHandler: [com.myproject.jointv.fragments.VideoPlayerFragment] Note: Processing enclosed elements Note: Number of files generated by AndroidAnnotations: 3 Note: Writting following API classes in project: [] Note: Generating class: com.myproject.jointv.fragments.VideoPlayerFragment_ Note: Generating class: com.myproject.jointv.activities.MainActivity_ Note: Generating class: com.myproject.jointv.activities.VideoPlayerActivity_ Note: Time measurements: [Whole Processing = 387 ms], [Extract Manifest = 131 ms], [Generate Sources = 97 ms], [Process Annotations = 59 ms], [Find R Classes = 43 ms], [Extract Annot ations = 25 ms], [Validate Annotations = 18 ms], Note: Finish processing E:/AndroidProject/JoinTV/app/src/main/java/com/myproject/jointv/component/ApiComponent.java:22: error: com.myproject.jointv.database.DataBaseHelper cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method. void inject(ServiceDownloaderPlayList service); ^ com.myproject.jointv.services.ServiceDownloaderPlayList.dataBaseHelper [injected field of type: com.myproject.jointv.database.DataBaseHelper dataBaseHelper] E:/AndroidProject/JoinTV/app/src/main/java/com/myproject/jointv/component/DataBaseComponent.java:18: error: com.myproject.jointv.api.WherePlaysAPI cannot be provided without an @ Provides- or @Produces-annotated method. void inject(ServiceDownloaderPlayList service); ^ com.myproject.jointv.services.ServiceDownloaderPlayList.wherePlaysAPI [injected field of type: com.myproject.jointv.api.WherePlaysAPI wherePlaysAPI] Note: Start processing for 0 annotations on 0 elements Note: Time measurements: [Whole Processing = 1 ms], Note: Finish processing 5 errors :app:compileDebugJavaWithJavac FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task '':app:compileDebugJavaWithJavac''. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED

Hay mi aplicación gradle.

buildscript { repositories { jcenter() } dependencies { classpath ''com.android.tools.build:gradle:1.5.0'' classpath ''com.neenbedankt.gradle.plugins:android-apt:1.8'' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }

Y mi módulo gradle

apply plugin: ''com.android.application'' apply plugin: ''com.neenbedankt.android-apt'' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.myproject.jointv" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } apt { arguments { androidManifestFile variant.outputs[0].processResources.manifestFile resourcePackageName android.defaultConfig.applicationId } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.squareup.retrofit:retrofit:1.9.0'' compile ''com.android.support:recyclerview-v7:23.2.0'' compile ''com.android.support:leanback-v17:23.2.0'' compile ''com.android.support:appcompat-v7:23.2.0'' compile ''com.github.bumptech.glide:glide:3.4.+'' compile ''com.squareup.okhttp:okhttp:2.5.0'' compile ''com.squareup.okhttp:okhttp-urlconnection:2.5.0'' compile ''com.android.support:support-v4:23.2.0'' compile ''com.android.support:design:23.2.0'' compile ''com.danikula:videocache:2.3.3'' compile ''org.androidannotations:androidannotations-api:3.3.2'' apt ''org.androidannotations:androidannotations:3.3.2'' compile ''com.google.dagger:dagger:2.0.2'' apt ''com.google.dagger:dagger-compiler:2.0.2'' provided ''org.glassfish:javax.annotation:10.0-b28'' }

Estaba usando la misma configuración todo el día, pero ahora no sé dónde podría estar el problema y por qué no genera la clase de componentes.

ApiComponent.

@Singleton @Component(modules = { ApiModule.class, DataBaseModule.class }) public interface ApiComponent { void inject(ServiceDownloaderPlayList service); }

CacheComponent

@Singleton @Component(modules = { CacheModule.class }) public interface CacheComponent { void inject(VideoPlayerFragment fragment); }

DataBaseComponent

@Singleton @Component(modules = { DataBaseModule.class }) public interface DataBaseComponent { void inject(ServiceDownloaderPlayList service); }

Consejos

Cuando comento el DataBaseComponent o ApiComponent todo funciona.


si está utilizando el plugin apt como sigue

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

luego incluir

apt "com.google.dagger: dagger-compiler: $ DAGGER_VERSION"

junto con

compile "com.google.dagger: dagger: $ DAGGER_VERSION"

en el nivel de módulo build.gradle

Además del problema de configuración Dagger2 tampoco generará las clases de Componente si hay algún error (muy probablemente un error de sintaxis) en el módulo o clases dependientes.

simplemente abra las clases dependientes y solucione el problema si hay alguna y vuelva a compilar el proyecto.

Un poco de caché invalidante también funciona: Android Studio-> file-> invalida el caché y reinicia