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

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

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的构build系统,但我不确定,这是我的第一个匕首项目,我在Eclipse IDE上。

PS:我已经尝试将java-writer和dagger-compiler添加到工厂path,正如其他一些post所示,但没有运气。

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

 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) 

请帮助如何解决这个问题。

确保代码生成正在发生是非常重要的。 检查你的构build目录,确保这个类实际上正在生成。 我没有使用Ant和Dagger,但是确保你需要确保djger-compiler-$ {version} .jar可用于javac,所以检查你的classes文件夹,看看代码是否被生成。 如果没有,这是一个构buildconfiguration问题。

如果是,那么你需要检查你的proguardconfiguration,并确保它保留了从ModuleAdapter和Bindinginheritance的任何东西。 这是至关重要的,因为Dagger 1.xdynamic加载适配器,因此代码中没有静态依赖关系,可以通知Proguard离开它。 所以Proguard可能只是删除了适配器代码,因此Dagger无法加载它。

(注意,这个问题在匕首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> 

那么以后有人来这个线程,我认为这个问题可能是Injector.init(Object)的“打字错误”造成的。

 Injector.init(this); 

应该

 Injector.inject(this); 

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

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

来自Square Dagger IllegalStateException:无法加载类MyApplicationModule的模块适配器