无法加载类的模块适配器。请确保为此模块运行代码生成

时间:2014-05-14 11:29:16

标签: android eclipse dagger

当我尝试运行我的应用程序时出现此错误:

E/AndroidRuntime(2314): java.lang.RuntimeException: 
    Unable to create application in.mubble.billbytwo.GlobalApp: 
    java.lang.IllegalStateException: Module adapter for class 
    in.mubble.billbytwo.RootModule could not be loaded. 
    Please ensure that code generation was run for this module.

我认为我正在使用基于Ant的构建系统我不确定,这是我的第一个dagger项目,我在Eclipse IDE上。

PS:我已经尝试将java-writer和dagger-compiler添加到工厂路径,因为一些other帖子建议但没有运气。

这是一个完整的堆栈跟踪:

FATAL EXCEPTION: main
Process: in.mubble.billbytwo, PID: 2314
java.lang.RuntimeException: 
    Unable to create application in.mubble.billbytwo.GlobalApp:    
    java.lang.IllegalStateException: Module adapter for class 
    in.mubble.billbytwo.RootModule could not be loaded. 
    Please ensure that code generation was run for this module.

at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4347)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller
    .run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.IllegalStateException: 
   Module adapter for class 
   in.mubble.billbytwo.RootModule 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 in.mubble.billbytwo.Injector.init(Injector.java:13)
at in.mubble.billbytwo.Injector.init(Injector.java:24)
at in.mubble.billbytwo.GlobalApp.onCreate(GlobalApp.java:67)
at android.app.Instrumentation
    .callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)

请帮助解决此问题。

4 个答案:

答案 0 :(得分:4)

确保代码生成正在发生非常重要。检查构建目录以确保实际生成此类。我没有使用Ant和Dagger,但是你肯定需要确保javac可以使用dagger-compiler - $ {version} .jar,所以检查你的类文件夹并查看代码是否正在生成。如果没有,那就是构建配置问题。

如果是,那么您需要检查您的proguard配置并确保它保留从ModuleAdapter和Binding继承的任何内容。这是至关重要的,因为Dagger 1.x会动态加载适配器,因此代码中没有静态依赖关系可以通知Proguard不管它。因此,Proguard可能只是删除了适配器代码,因此Dagger无法加载它。

(注意,这个问题将在Dagger 2中消除)

答案 1 :(得分:2)

当您在应用程序类中初始化 Dagger的对象图时出现相同的错误消息,但忘记在AndroidManifest.xml中注册此应用程序类

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.andro">
    <application
        android:name=".MyDaggerApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
    </application>
</manifest>

答案 2 :(得分:1)

好吧,对于后来有人来到这个帖子,我认为这个问题可能是由Injector.init(Object)的“拼写错误”引起的。

Injector.init(this);

应该是

Injector.inject(this);

答案 3 :(得分:1)

或者只是忘了在Eclipse上检查以下选项:

Java编译器&gt;注释处理&gt;启用项目特定设置

来自Square Dagger IllegalStateException: Module adapter for class MyApplicationModule could not be loaded