我在使用Android项目和Eclipse时遇到了一个相当奇怪的问题。我有许多Android项目都使用了相同的大量代码,因此将大部分代码移入了一个Android库项目中。这对于三个应用程序很长一段时间以来一直运作良好。今天,我想为第四个应用程序也使用该库,却遇到了麻烦。基本上情况如下:
应用程序在执行启动库项目中的活动的操作时正常运行,但然后退出了,logcat告诉我以下信息:
这是一个有趣的开始。我“知道”库项目与.apk捆绑在一起,因为我有一些来自该项目的实用代码正在运行。但是,当使用命令“ant debug”然后“ant installd”从Ant编译此确切项目时,应用程序可以正常运行,包括启动活动。所以,完全相同的项目设置可以使用Ant正常运行,但无法使用Eclipse。
我尝试了通过谷歌搜索找到的技巧,例如清理所有项目,删除特定项目的.project和.classpath,并重新生成它们。我还通过将其与工作项目的清单文件进行比较来确保我的清单文件正确。无论我做什么,最终都会再次遇到这个问题。由于使用Ant编译和运行非常顺利,所以对我来说,项目本身没有任何问题,但我确实需要能够通过Eclipse编译它。
编辑:我使用dexdump工具反编译了Eclipse创建的apk中的classes.dex,并能够确认该类已捆绑到apk中。我找到了一个具有正确类描述符和实例字段的类。另一方面,我也反编译了Ant生成的版本,并得到了很多不同之处。太多了,不能在此重复。使用Ant和Eclipse时生成的文件是否应该相同?
- 库项目:包含一组活动以及一些实用类
- 新项目:在某种情况下实例化库项目中的一个活动。
应用程序在执行启动库项目中的活动的操作时正常运行,但然后退出了,logcat告诉我以下信息:
FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: no.company.application.base.SomeDetailActivity
at no.company.someotherapplication.SomeListActivity$4.onClick(SomeListActivity.java:466)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
这是一个有趣的开始。我“知道”库项目与.apk捆绑在一起,因为我有一些来自该项目的实用代码正在运行。但是,当使用命令“ant debug”然后“ant installd”从Ant编译此确切项目时,应用程序可以正常运行,包括启动活动。所以,完全相同的项目设置可以使用Ant正常运行,但无法使用Eclipse。
我尝试了通过谷歌搜索找到的技巧,例如清理所有项目,删除特定项目的.project和.classpath,并重新生成它们。我还通过将其与工作项目的清单文件进行比较来确保我的清单文件正确。无论我做什么,最终都会再次遇到这个问题。由于使用Ant编译和运行非常顺利,所以对我来说,项目本身没有任何问题,但我确实需要能够通过Eclipse编译它。
编辑:我使用dexdump工具反编译了Eclipse创建的apk中的classes.dex,并能够确认该类已捆绑到apk中。我找到了一个具有正确类描述符和实例字段的类。另一方面,我也反编译了Ant生成的版本,并得到了很多不同之处。太多了,不能在此重复。使用Ant和Eclipse时生成的文件是否应该相同?
java.lang.VerifyError
。库类在catch
语句中使用,所以与该库相关的问题被稍早地检测出来(而不是在方法调用的情况下),并表现为不同的异常。 - 18446744073709551615