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