页面http://developer.android.com/tools/building/multidex.html#testing 建议
dependencies {
compile 'com.android.support:multidex:1.0.1'
androidTestCompile 'com.android.support:multidex-instrumentation:1.0.1'
}
android {
defaultConfig {
multiDexEnabled true
testInstrumentationRunner "android.support.multidex.MultiDexTestRunner"
}
}
但是在运行测试时会产生ClassNotFoundException。
API文档和dexdump显示有com.android.test.runner.MultiDexTestRunner。
因此,如果我不相信文档而是指定
dependencies {
compile 'com.android.support:multidex:1.0.1'
androidTestCompile 'com.android.support:multidex-instrumentation:1.0.1'
}
android {
defaultConfig {
multiDexEnabled true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
}
然后我得到
com/company/myapp/MyApp; had used a different Landroid/support/multidex/MultiDexApplication; during pre-verification
...
IllegalAccessExceptionIllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
我怀疑doc页面是错误的,正确的路径是com.android.test.runner.MultiDexTestRunner ...加上我还有其他一些问题。
请注意,multidex应用程序正常工作。不知何故,第二个MultiDexApplication包含在测试apk中。
问题:
MultiDexTestRunner的正确路径是哪条?
为什么我在测试apk中获得第二个MultiDexApplication?
答案 0 :(得分:6)
更新:这是修复。这是一种常见模式,当您看到此类错误消息had used a different L<package>; during pre-verification
时,您需要在运行测试时排除该包。
build.gradle
android {
// ...
defaultConfig {
// ...
multiDexEnabled true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
}
dependencies {
// ...
// Need to exclude this when running test
androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') {
exclude group: 'com.android.support', module: 'multidex'
}
}
Application.java
public class Application extends android.app.Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
答案 1 :(得分:1)
注意: 当您为multidex应用程序编写检测测试时,如果您使用MonitoringInstrumentation(或AndroidJUnitRunner)检测,则无需其他配置。
因此,请勿使用不推荐使用的MultiDexTestRunner;改为使用AndroidJUnitRunner。(这适用于multidex支持库v1.0.2 +)
android {
// ...
defaultConfig {
// ...
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
仅当您拥有测试运行器引导程序的自定义实现时:
public void onCreate(Bundle arguments) {
MultiDex.install(getTargetContext());
super.onCreate(arguments);
...
}
请参阅:https://developer.android.com/studio/build/multidex.html#testing
答案 2 :(得分:0)
原始问题中描述的确切问题可能与旧版本有关。我在这里添加了我的经验,因为这是研究问题时谷歌的第一次点击。
使用最新版本的工具和Android插件,build.gradle
中除此之外不需要任何其他内容:
...
android {
...
defaultConfig {
...
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
}
(我有com.android.tools.build:gradle:1.5.0
)
编辑:正如@ igor-ganapolsky所指出的,MultiDexTestRunner is deprecated。 我无法访问其中出现的来源,但我怀疑当项目的整个测试设置需要大修时,MultiDexTestRunner会出现问题。