编辑
经过更多调查,发现这个有ant test命令也不起作用,所以这不是 IntelliJ 的问题。
应用程序启动时有一些警告表明问题来自与 ormlite 框架的错误链接:
WARN/dalvikvm(22209):类被意外的 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;在预验证期间使用了不同的 Lcom/j256/ormlite/dao/Dao;) WARN/dalvikvm(22209): 类 'Lcom/example/android/app/noclassdef/module/dao/BaseBrowserDAO;' 的链接 失败的
但这仅发生在测试项目中,主项目没有问题。
我发现从 R17 开始,jar '真的' 需要在 libs 目录中,所以我想也许我应该将 jar 复制到测试项目 libs 目录中,但它没有改变任何东西。
原来的
我的 Android 测试项目无法在 Android 上运行,我收到以下错误:
java.lang.NoClassDefFoundError: com.mycompany.android.module.shop.database.MyDBHelper 在 com.mycompany.android.module.shop.dao.DAOFactory.(DAOFactory.java:51) 在 com.mycompany.android.module.shop.dao.DAOFactory.initSingleton(DAOFactory.java:58) 在 com.mycompany.android.app.shop.test.EShopBaseTestCase.setUp(EShopBaseTestCase.java:41) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 在 android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 引起: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] 在 dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:551) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) ... 12 更多
测试在 Eclipse 上运行没有任何问题,所以我猜这是配置问题。
'missing' 类是 App 的源类,它不在 jar 中,也不在任何外部框架中。
更让我困惑的是,查看堆栈跟踪 com.mycompany.android.module.shop.dao.DAOFactory 存在但不存在 com.mycompany.android.module.shop.database.MyDBHelper (它们在同一个项目中...... )
有人有想法吗?我已经坚持了一段时间了。这不是我第一次将测试项目与 IntelliJ 一起使用,所以我将我的配置与工作项目进行了比较,但我发现根本没有区别......