【问题标题】:ART Unit Tests fail, Dalvik works fineART 单元测试失败,Dalvik 工作正常
【发布时间】:2014-11-11 20:33:05
【问题描述】:

我已经开发了一段时间的应用程序 (over here),我正在尝试在我的 Android 设备和模拟器上进行这两项测试。

目前我已经在 Travis 上建立了一个构建设置,并且所有测试都运行良好。此外,我设置了一个本地模拟器,可以正常运行。我的物理设备(Moto X)也能很好地运行一切,但仅限于在 Dalvik 上。一旦我切换到 ART,我就会收到以下错误:

11-11 15:28:54.013    6259-6259/org.bspeice.minimalbible E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: org.bspeice.minimalbible, PID: 6259
    java.lang.NoClassDefFoundError: org.jdom2.xpath.jaxen.JDOMCoreNavigator
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:305)
            at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
            at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
            at android.test.SimpleCache.get(SimpleCache.java:31)
            at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
            at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
            at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
            at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
            at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
            at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
            at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
            at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4400)
            at android.app.ActivityThread.access$1500(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5086)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

如果有帮助,有一个完整的会话跟踪 here。

所以我的问题是:有什么理由这将是 ART 而不是 Dalvik 的问题?我根本没有更改应用程序构建过程,唯一似乎有所作为的变量是 Dalvik/ART。应用程序本身运行良好,只是测试有错误。

【问题讨论】:

    标签: android dalvik art-runtime


    【解决方案1】:

    看起来 ART 没有找到您的课程,引发了 ClassNotFoundException。我不精通 java 或 cpp,但在阅读 ART 时,它在语法上要严格得多。 Dalvik 将接受点或斜杠作为分隔符,ART 仅斜杠等。我有一堆在 Dalvik 上运行良好的东西,但在 ART/Android-5.0.x 上掉下来并死掉了。您自己解决了这个问题吗?在接下来的几周内,我将尝试确定我的应用程序出了什么问题,但我怀疑与 Dalvik 相比,ART 正在执行更激进的内存管理垃圾收集。如果您解决了问题,请张贴说明您所做的事情。

    【讨论】:

    • 我已经开始使用 Robolectric 进行测试,并完全删除了模拟器测试。我不确定你的解释是否有意义——ART 只是 Java 运行时,它在语法上与 Dalvik 没有什么不同。此外,内存管理不会对找不到类产生任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2023-03-20
    相关资源
    最近更新 更多