我有多个模块的项目,所有模块都配置为使用multiDexEnabled true
构建。所有这些模块都配有检测测试包,这些测试包被配置为运行JUnit4测试,并根据这个SO答案启用MultiDex
:https://stackoverflow.com/a/35214158/736963除了其中一个模块。其中一个模块配置为使用testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
(因此没有JUnit4测试),因为它依赖于不会加载的JUnit4测试运行器的DLL。 (如果有人知道那个解决方案,那太好了!但这不是我在这里报道的问题......)
此配置一直正常,直到我尝试更新到 android gradle plugin 2.3.0 。现在,当我使用JUnit3 MultiDexTestRunner
运行模块测试时,我看到了:
Started running tests
Test running failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Empty test suite.
在控制台中(截断到有用位):
java.lang.RuntimeException: Unable to instantiate instrumentation ComponentInfo{com.redacted.test/com.android.test.runner.MultiDexTestRunner}: java.lang.ClassNotFoundException: Didn't find class "com.android.test.runner.MultiDexTestRunner" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.redacted.test-1/base.apk", zip file "/data/app/com.redacted.test-1/base.apk"],nativeLibraryDirectories=[/data/app/com.redacted.test-1/lib/arm, /data/app/com.redacted.test-1/lib/arm, /data/app/com.redacted.test-1/base.apk!/lib/armeabi-v7a, /data/app/com.redacted.test-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
...
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.test.runner.MultiDexTestRunner" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.intuit.paymentshub.test-1/base.apk", zip file "/data/app/com.intuit.paymentshub.test-1/base.apk"],nativeLibraryDirectories=[/data/app/com.intuit.paymentshub.test-1/lib/arm, /data/app/com.intuit.paymentshub.test-1/lib/arm, /data/app/com.intuit.paymentshub.test-1/base.apk!/lib/armeabi-v7a, /data/app/com.intuit.paymentshub.test-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
所以我坚持使用早期的Android Gradle插件,直到我可以解决这个问题(或DLL问题,虽然我对那个问题的希望不大,因为它永远不会工作。)
答案 0 :(得分:0)
更新工具后似乎这个问题消失了。目前用buildTools 26运行android for gradle 2.3.3,这个问题已经消失。