J'utilise Dagger2 dans Android Studio depuis des mois mais aujourd'hui, tout d'un coup, il a cessé de fonctionner et me donne l'erreur suivante.
error: cannot find symbol
return Dagger_Injector.builder()
^
symbol: variable Dagger_Injector
location: class Initializer
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
Voici le code où il échoue
@Singleton
@Component(modules = {TestService.class, ServiceFactory.class})
public interface Injector {
public final static class Initializer {
public static Injector init(ApplicationLoader app, boolean bypassVerification) {
return Dagger_Injector.builder()
.testService(new TestService())
.serviceFactory(new ServiceFactory(app))
.build();
}
}
void inject(ApplicationLoader obj);
}
Voici mon info
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time: 2014-11-24 09:45:35 UTC
Build number: none
Revision: 6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
Groovy: 2.3.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_05 (Oracle Corporation 25.5-b02)
OS: Mac OS X 10.10.2 x86_64
Et voici le contenu de mon build.gradle
apply plugin: 'com.Android.application'
apply plugin: 'robolectric'
apply plugin: 'com.neenbedankt.Android-apt'
Android {
compileSdkVersion 21
buildToolsVersion '21.1.0'
defaultConfig {
applicationId "com.test"
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0"
testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
lintOptions {
abortOnError false
}
sourceSets {
androidTest {
setRoot('src/androidTest')
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
dexOptions {
preDexLibraries = false
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
tasks.withType(Test) {
include '**/*Test.class'
exclude '**/espresso/**/*.class'
// configure max heap size of the test JVM
maxHeapSize = "2048m"
}
dependencies {
androidTestCompile 'junit:junit:4.12'
androidTestCompile('org.robolectric:robolectric:2.4') {
exclude group: 'commons-logging', module: 'commons-logging'
exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile 'javax.servlet:javax.servlet-api:3.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/renderscript-v8.jar')
compile files('libs/jsonic-1.2.0.jar')
compile 'com.Android.support:appcompat-v7:20.+'
compile 'com.google.Android.gms:play-services:3.2'
compile 'com.squareup.retrofit:retrofit:1.6.1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
compile 'com.squareup.okhttp:okhttp:2.0.0'
compile 'com.squareup:otto:1.3.5'
compile 'com.commonsware.cwac:merge:1.0.2'
compile 'com.j256.ormlite:ormlite-Android:4.48'
compile 'com.Android.support:support-v4:20.0.0'
compile 'io.nlopez.smartlocation:library:2.0.8'
compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
compile 'org.glassfish:javax.annotation:10.0-b28'
compile 'com.github.amlcurran.showcaseview:library:5.0.0'
compile 'com.edmodo:cropper:1.0.1'
}
Toute aide est appréciée.
Il semble donc que, pour une raison quelconque, il n’y ait plus de traits de soulignement dans les noms de classes de composants générés. Il suffit de regarder dans votre dossier build/generated/source/apt
pour voir s’il a vraiment changé de cette façon.
Corrigez-le en remplaçant Dagger_Injector
par DaggerInjector
etc.
Dans mon cas, j’utilisais le domaine et, en raison d’un manque d’adéquation, je ne pouvais pas obtenir le DaggerComponent généré automatiquement.
J'ai remplacé
classpath "io.realm:realm-gradle-plugin:1.2.0"
avec
classpath "io.realm:realm-gradle-plugin:3.1.2"
et appliqué le plugin
apply plugin: 'realm-Android'
dans le fichier de classement au niveau de l'application