[英]Dagger2 generated class is all of a sudden missing from Android Studio
I have been using Dagger2 in Android Studio for months now but today all of sudden it stopped working and is giving me the following error 我已经在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
Here is the code where it is failing 这是失败的代码
@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);
}
Here is my gradle info 这是我的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
And here is the content of my build.gradle 这是我的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'
}
Any help is appreciated. 任何帮助表示赞赏。
So it looks like for some reason there are no more underscores in names of generated component classes. 所以看起来由于某种原因,生成的组件类的名称中没有更多的下划线。 Just look into yours
build/generated/source/apt
folder to see it really changed this way. 只需看看你的
build/generated/source/apt
文件夹就可以看到它真的改变了这种方式。
Fix it by replacing Dagger_Injector
with DaggerInjector
etc. 通过用
DaggerInjector
等替换Dagger_Injector
修复它。
In My case I was using realm and due to apt mismatch I was not being able to get the autogenerated DaggerComponent. 在我的情况下,我使用的是领域,由于不匹配,我无法获得自动生成的DaggerComponent。
I replaced 我换了
classpath "io.realm:realm-gradle-plugin:1.2.0"
with 同
classpath "io.realm:realm-gradle-plugin:3.1.2"
and applied the plugin 并应用了该插件
apply plugin: 'realm-android'
in app-level gradle file 在应用程序级gradle文件中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.