Square Dagger IllegalStateException: адаптер модуля для класса MyApplicationModule не может быть загружен
Я использую eclipse и Dagger 1.2.2 для своего проекта Android. Мне удалось реализовать тестовое приложение с кинжалом. Но с моим "настоящим" приложением я получаю:
java.lang.RuntimeException: невозможно создать приложение app.MyApplication: java.lang.IllegalStateException: адаптер модуля для класса app.MyApplicationModule не может быть загружен. Убедитесь, что для этого модуля была запущена генерация кода.:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to create application app.MyApplication: java.lang.IllegalStateException: Module adapter for class app.MyApplicationModule could not be loaded. Please ensure that code generation was run for this module.
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4687)
at android.app.ActivityThread.access$1400(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1376)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Module adapter for class app.MyApplicationModule could not be loaded. Please ensure that code generation was run for this module.
at dagger.internal.FailoverLoader$1.create(FailoverLoader.java:45)
at dagger.internal.FailoverLoader$1.create(FailoverLoader.java:40)
at dagger.internal.Memoizer.get(Memoizer.java:56)
at dagger.internal.FailoverLoader.getModuleAdapter(FailoverLoader.java:57)
at dagger.internal.Modules.loadModules(Modules.java:43)
at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:174)
at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:138)
at dagger.ObjectGraph.create(ObjectGraph.java:129)
at app.MyApplication.onCreate(MyApplication.java:17)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4684)
... 10 more
Это MyApplication.java:
public class MyApplication extends Application implements InjectableApplication {
private ObjectGraph objectGraph;
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(new MyApplicationModule(this));
objectGraph.inject(this);
}
@Override
public void inject(Object o) {
objectGraph.inject(o);
}
public ObjectGraph getObjectGraph() {
return objectGraph;
}
}
Это мой AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name="app.MyApplication" >
<activity
android:name="app.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Я также включил банки Dagger в путь сборки и путь factory.
Ответы
Ответ 1
Для всех, у кого могла быть эта проблема, как я. Проблема, с которой я столкнулся, заключается в том, что я не добавлял зависимостей в свой файл сборки gradle, чтобы дать кинжалу возможность генерировать код на моем классе:
Добавьте это:
apt 'com.squareup.dagger:dagger-compiler:1.2.2'
update: если вы не знаете, где находится apt-плагин, вы можете установить его в свои проекты gradle. Мои зависимости выглядят так:
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4+'
}
Ответ 2
Я нашел свою ошибку:
Вам нужно проверить " Включить специальные настройки проекта" для "Компилятор Java" и "Обработка аннотаций". Теперь мое приложение выдает много других ошибок, но работает генерация кода Dagger!
Ответ 3
Если вы используете multiDex, не забудьте активировать его в YourApp.class
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Это решило мою аналогичную проблему.
Ответ 4
project build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4+'
}
}
allprojects {
repositories {
jcenter()
}
}
app build.gradle:
buildscript {
repositories {
mavenCentral()
...
}
...
}
...
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
...
dependencies {
...
compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
apt 'com.squareup.dagger:dagger-compiler:1.2.2'
...
}
configurations {
provided
}