多模块 MultiDex 项目在更新到 android gradle 插件 2.3 后不会 运行 测试
Multi-module MultiDex project won't run tests after update to android gradle plugin 2.3
我有多个模块的项目,所有模块都配置为使用 multiDexEnabled true
构建。所有这些模块都有配置为 运行 JUnit4 测试的仪器测试包,每个 SO 答案启用 MultiDex
: 除了其中一个模块。其中一个模块被配置为使用 testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
(因此没有 JUnit4 测试),因为它依赖于一个仅 不会通过 JUnit4 测试加载 的 DLL 运行纳尔。 (如果有人知道那个问题的解决方案,那就太好了!但这不是我在这里报告的问题...)
此配置一直运行良好,直到我尝试更新到 android gradle 插件 2.3.0。现在,当我 运行 使用 JUnit3 MultiDexTestRunner
测试模块时,我看到了:
Started running tests
Test running failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Empty test suite.
并且在控制台中这个(t运行适合有用的位):
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 问题,尽管我对那个不太抱有希望,因为它有 从未工作过。)
更新工具后,这个问题似乎消失了。当前 运行 android for gradle 2.3.3 with buildTools 26,这个问题已经消失。
我有多个模块的项目,所有模块都配置为使用 multiDexEnabled true
构建。所有这些模块都有配置为 运行 JUnit4 测试的仪器测试包,每个 SO 答案启用 MultiDex
: 除了其中一个模块。其中一个模块被配置为使用 testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
(因此没有 JUnit4 测试),因为它依赖于一个仅 不会通过 JUnit4 测试加载 的 DLL 运行纳尔。 (如果有人知道那个问题的解决方案,那就太好了!但这不是我在这里报告的问题...)
此配置一直运行良好,直到我尝试更新到 android gradle 插件 2.3.0。现在,当我 运行 使用 JUnit3 MultiDexTestRunner
测试模块时,我看到了:
Started running tests
Test running failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Empty test suite.
并且在控制台中这个(t运行适合有用的位):
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 问题,尽管我对那个不太抱有希望,因为它有 从未工作过。)
更新工具后,这个问题似乎消失了。当前 运行 android for gradle 2.3.3 with buildTools 26,这个问题已经消失。