【发布时间】:2013-06-30 18:48:30
【问题描述】:
我正在尝试使用 Maven for Android 自动构建我的 Android 应用程序。该应用程序具有标准的 Maven 文件夹格式,其中 src 位于 src/main/java 下,测试位于 src/test/java 下。在执行命令时令人困惑,mvn install 我的应用程序已编译,运行测试,构建报告为成功。
但是,在使用命令在模拟器上部署和运行应用程序时,mvn android:deploy android:run 应用程序启动,但在创建 Dagger 用于 DI 的对象图时立即崩溃。异常状态;
06-30 17:31:08.626: E/AndroidRuntime(518): FATAL EXCEPTION: main
06-30 17:31:08.626: E/AndroidRuntime(518): java.lang.RuntimeException: Unable to create application com.oceanlife.MainApplication: java.lang.TypeNotPresentException: Type com.oceanlife.activity.AboutActivity not present
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4247)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.ActivityThread.access$3000(ActivityThread.java:125)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.os.Looper.loop(Looper.java:123)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-30 17:31:08.626: E/AndroidRuntime(518): at java.lang.reflect.Method.invokeNative(Native Method)
06-30 17:31:08.626: E/AndroidRuntime(518): at java.lang.reflect.Method.invoke(Method.java:521)
06-30 17:31:08.626: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-30 17:31:08.626: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-30 17:31:08.626: E/AndroidRuntime(518): at dalvik.system.NativeStart.main(Native Method)
06-30 17:31:08.626: E/AndroidRuntime(518): Caused by: java.lang.TypeNotPresentException: Type com.oceanlife.activity.AboutActivity not present
06-30 17:31:08.626: E/AndroidRuntime(518): at java.lang.Class.getDeclaredAnnotations(Native Method)
06-30 17:31:08.626: E/AndroidRuntime(518): at java.lang.Class.getAnnotations(Class.java:322)
06-30 17:31:08.626: E/AndroidRuntime(518): at java.lang.Class.getAnnotation(Class.java:292)
06-30 17:31:08.626: E/AndroidRuntime(518): at dagger.internal.plugins.reflect.ReflectivePlugin.getModuleAdapter(ReflectivePlugin.java:51)
06-30 17:31:08.626: E/AndroidRuntime(518): at dagger.internal.RuntimeAggregatingPlugin.getModuleAdapter(RuntimeAggregatingPlugin.java:98)
06-30 17:31:08.626: E/AndroidRuntime(518): at dagger.internal.RuntimeAggregatingPlugin.getAllModuleAdapters(RuntimeAggregatingPlugin.java:55)
06-30 17:31:08.626: E/AndroidRuntime(518): at dagger.ObjectGraph.makeGraph(ObjectGraph.java:115)
06-30 17:31:08.626: E/AndroidRuntime(518): at dagger.ObjectGraph.create(ObjectGraph.java:103)
06-30 17:31:08.626: E/AndroidRuntime(518): at com.oceanlife.MainApplication.onCreate(MainApplication.java:36)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
06-30 17:31:08.626: E/AndroidRuntime(518): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4244)
06-30 17:31:08.626: E/AndroidRuntime(518):
继我之前关于 Maven 与 Eclipse 与 Dagger 的问题之后,我开始期待 ClassNotFound 类型异常,因为各种构建系统都在与编译后的类应该在哪里进行斗争。然而,我完全被这个难住了。
如果有帮助,我的 POM 是 here...
提前感谢您,任何想法都亲切地接受了。
【问题讨论】:
-
更多信息。我已经删除了 dagger-compiler 依赖项,因此整个 (ReflectiveAdapter) 都在使用后备模块适配器 - 这是由于 here 描述的那种问题
-
应该编译支持库,而不是提供范围。你用proguard吗?
-
您好 Eugen,感谢您的评论。我将设置支持库的范围以在早上编译! Proguard 已关闭(参见 pom),因为它破坏了 Dagger。我检查了 apk 下的“classes.dex”文件,它似乎有所有正确的活动等。是否有任何其他信息可以帮助诊断问题?不确定我是否提供了足够的细节。
-
也许你可以发布你的 Dagger 模块来帮助诊断?
-
@jfrey - 今天早上我玩了一些游戏,并注意到唯一受影响的类是那些子类 ActionBarSherlock 类(SherlockActivity、SherlockFragment 等)。因此,我认为 Dagger 做得很好,但又是一个类路径问题。你怎么看?
标签: android maven actionbarsherlock android-build android-maven-plugin