android - IntelliJ 上的 Android 测试中源文件的 NoClassDefFoundError

标签 android intellij-idea noclassdeffounderror ormlite

编辑

经过进一步调查,发现这个ant test命令也不起作用,所以这不是IntelliJ的问题。

在应用程序启动时有一些警告表明问题来自与 ormlite 框架的错误链接:

WARN/dalvikvm(22209): Class resolved by unexpected DEX: Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;(0x4051f5e8):0x98558 ref [Lcom/j256/ormlite/dao/Dao;] Lcom/j256/ormlite/dao/Dao;(0x4051f5e8):0x97ec0

WARN/dalvikvm(22209): (Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO; had used a different Lcom/j256/ormlite/dao/Dao; during pre-verification)

WARN/dalvikvm(22209): Link of class 'Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;' failed

但这只发生在测试项目中,主项目没有问题。

我发现自从 R17 以来,jar“真的”需要在 libs 目录中,所以我想也许我应该将 jar 复制到测试项目的 libs 目录中,但它并没有改变任何东西。

原创

我的 Android 测试项目没有在 Android 上运行,我收到以下错误:

java.lang.NoClassDefFoundError: com.mycompany.android.module.shop.database.MyDBHelper
at com.mycompany.android.module.shop.dao.DAOFactory.(DAOFactory.java:51)
at com.mycompany.android.module.shop.dao.DAOFactory.initSingleton(DAOFactory.java:58)
at com.mycompany.android.app.shop.test.EShopBaseTestCase.setUp(EShopBaseTestCase.java:41)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
Caused by: java.lang.ClassNotFoundException: com.mycompany.android.module.shop.database.MyDBHelper in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.mycompany.android.app.shop.test-1.apk:/mnt/asec/com.mycompany.android.app.shop-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
... 12 more

在 Eclipse 上测试运行没有任何问题,所以我猜这是一个配置问题。

“缺失”类是 App 的源类,它不在 jar 中,也不在任何外部框架中。

更让我困惑的是,查看堆栈跟踪 com.mycompany.android.module.shop.dao.DAOFactory 存在但不存在 com.mycompany.android.module.shop.database.MyDBHelper(它们在同一个项目中...)

有人有想法吗?我已经坚持了一段时间了。这不是我第一次将测试项目与 IntelliJ 一起使用,所以我将我的配置与工作项目进行了比较,但我发现没有任何区别......

最佳答案

好的,实际上重要的信息是

[...] had used a different Lcom/j256/ormlite/dao/Dao; during pre-verification

这意味着我的 ormlite jar 被复制到每个项目中,而不是在主项目中正确导出。

只需选中 jar 上的“导出”复选框即可解决问题。

FragmentActivity can not be tested via ActivityInstrumentationTestCase2 给我很大的帮助

关于android - IntelliJ 上的 Android 测试中源文件的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623692/

相关文章:

jsf - 在没有 BV 的 Tomcat 8 上部署 OmniFaces 3.1 会抛出 java.lang.NoClassDefFoundError : javax/validation/ConstraintViolation

java - 为什么我在 Java 中得到 NoClassDefFoundError?

android - android下载大文件

java - Flutter (Dart) 到 Android - 传递图像

intellij-idea - IntelliJ IDEA 2017.1 显示 "var"而不是实际类型

intellij-idea - 在 Intellij 15.02 中设置行断点不起作用

Java:更新 jar 文件时加载类

php - 尝试从数据库检索数据时出现 JSONException

android - 在另一个 gradle 文件中导入 gradle 类

macos - 获取 Intellij 的工具栏