web-dev-qa-db-ja.com

Dagger2で生成されたクラスは、Android Studioから突然欠落しています

Android StudioでDagger2を数か月使用していますが、今日突然機能しなくなり、次のエラーが発生します

 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

これが失敗しているコードです

@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);
}

これが私のgradle情報です

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

そして、これが私の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'
}

どんな助けでも大歓迎です。

15
nemo

したがって、何らかの理由で、生成されたコンポーネントクラスの名前にアンダースコアがなくなったように見えます。 build/generated/source/aptフォルダを調べて、このように実際に変更されていることを確認してください。

Dagger_InjectorDaggerInjectorなどに置き換えて修正します。

20
simekadam

私の場合、レルムを使用していましたが、aptの不一致のため、自動生成されたDaggerComponentを取得できませんでした。

交換しました

classpath "io.realm:realm-gradle-plugin:1.2.0"

classpath "io.realm:realm-gradle-plugin:3.1.2"

プラグインを適用しました

apply plugin: 'realm-Android'

アプリレベルのgradleファイル内

1
erluxman