web-dev-qa-db-fra.com

La classe générée par Dagger2 manque tout à coup d'Android Studio

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.

15
nemo

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. 

20
simekadam

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 

1
erluxman