2015-04-08 7 views
14

Я использую 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 Информация

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

И ч ere содержание моего 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' 
} 

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

+1

Это, как представляется, некоторые изменения в Dagger 2 сам. Я вижу те же проблемы, хотя вчера ничего не изменил. К сожалению, Dagger 2 все еще моментальный снимок, поэтому он может измениться:/ – Tomik

+0

Такая же проблема здесь. Я даже пытался использовать исправленную версию Dagger 2.0, но она все еще не работает – simekadam

ответ

20

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

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

+0

Да, это правильно. Они изменили его в версии выпуска. Хотя документация [http://google.github.io/dagger/](http://google.github.io/dagger/) все еще упоминает старый путь с префиксом 'Dagger_'. Javadoc «Компонент» упоминает префикс «Кинжал». – Tomik

+0

hmmmm ... довольно странно, как здесь, в этом выпуске https://github.com/google/dagger/issues/58 - они, похоже, все вместе договорились об использовании подчеркивания. В любом случае, вы правы. Удаление подчеркивания действительно решает проблему. – nemo

+0

Несколько часов назад они выпустили Dagger 2.0 (non-snapshot). Некоторые из API изменились. http://www.reddit.com/r/androiddev/comments/31ufbh/dagger_20_has_been_released/ –

1

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

я заменил

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

с

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

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

apply plugin: 'realm-android' 

в Gradle файле приложения уровня

Смежные вопросы