Сгенерированный класс Dagger2 внезапно отсутствует в Android Studio

Я использую Dagger2 в Android Studio уже несколько месяцев, но сегодня он внезапно перестал работать и выдает следующую ошибку.

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

Любая помощь приветствуется.


person nemo    schedule 08.04.2015    source источник
comment
Кажется, это какое-то изменение в самом Dagger 2. Я вижу те же проблемы, хотя я ничего не изменил со вчерашнего дня. К сожалению, Dagger 2 все еще является снапшотом, поэтому он может измениться :/   -  person Tomik    schedule 08.04.2015
comment
Та же проблема здесь. Я даже пытался использовать исправленную версию Dagger 2.0, но она все еще терпит неудачу.   -  person simekadam    schedule 08.04.2015


Ответы (2)


Получается, что по какой-то причине в именах сгенерированных классов компонентов больше нет знаков подчеркивания. Просто загляните в свою папку build/generated/source/apt, чтобы убедиться, что она действительно изменилась таким образом.

Исправьте это, заменив Dagger_Injector на DaggerInjector и т. д.

person simekadam    schedule 08.04.2015
comment
Да, это правильно. Они изменили его в релизной версии. Хотя в документации http://google.github.io/dagger/ по-прежнему упоминается старый способ с префикс Dagger_. Javadoc Component упоминает префикс Dagger. - person Tomik; 08.04.2015
comment
хммм... довольно странно, как вот в этом выпуске github.com/google/dagger/issues/ 58 — похоже, они коллективно договорились об использовании символа подчеркивания. В любом случае вы правы. Удаление подчеркивания решает эту проблему. - person nemo; 08.04.2015
comment
Они выпустили Dagger 2.0 (не снапшот) несколько часов назад. Некоторые API изменились. reddit.com/r/androiddev/comments/31ufbh/ - person Amulya Khare; 08.04.2015
comment
Я не использую символы подчеркивания и правильно их определяю, но все равно получаю эту ошибку. - person IgorGanapolsky; 30.04.2015
comment
Любые другие решения этой проблемы, я тоже не вижу сгенерированные папки. очистить и восстановить тоже не работает :( - person WenChao; 08.05.2015
comment
В моем случае IntelliJ IDEA/Android Studio не может найти тип, но сборка ./gradlew выполняется успешно. - person Kees van Dieren; 04.07.2015
comment
@WenChao ты нашел решение? - person Derek; 05.07.2015
comment
@DerekS Да, на самом деле все, что я сделал, это сделал проект в Android Studio. Он сгенерирует класс для вас, но вам нужно убедиться, что все ваши аннотации внедрения зависимостей размещены правильно. - person WenChao; 05.07.2015
comment
Хорошо, что это сработало, для всех, у кого есть такая же проблема, мне пришлось удалить мой импорт DaggerClassName перед использованием make project, иначе он продолжал бы терпеть неудачу при сборке с летучей мыши. - person Derek; 06.07.2015

В моем случае я использовал область, и из-за подходящего несоответствия я не смог получить автоматически сгенерированный DaggerComponent.

я заменил

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

с

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

и применил плагин

apply plugin: 'realm-android'

в файле градиента уровня приложения

person erluxman    schedule 20.04.2017