MultiDexTestRunner的哪个包? android.support.multidex或者com.android.test.runner

页面http://developer.android.com/tools/building/multidex.html#testingbuild议

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" } } 

但是当testing运行时会产生一个ClassNotFoundExceptionexception。

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 

我怀疑文档页面是错误的,正确的path是com.android.test.runner.MultiDexTestRunner …加我有一些其他的问题。

注意multidex应用程序工作正常。 不知怎的,第二个MultiDexApplication包含在testingapk中。

问题:
MultiDexTestRunner的正确path是什么? 为什么我在testingapk中获得第二个MultiDexApplication?

Solutions Collecting From Web of "MultiDexTestRunner的哪个包? android.support.multidex或者com.android.test.runner"

更新:这是修复。 这是一种常见的模式,当你看到这样的错误信息had used a different L<package>; during pre-verification had used a different L<package>; during pre-verification ,您需要在运行testing时排除软件包。

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); } } 

注意:当您为multidex应用程序编写testingtesting时,如果使用MonitoringInstrumentation(或AndroidJUnitRunner)工具,则不需要其他configuration。

因此,不要使用已弃用的MultiDexTestRunner; 改用AndroidJUnitRunner。 (这适用于multidex支持库v1.0.2 +)

 android { // ... defaultConfig { // ... multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

只有当你有一个自定义的testing跑步者bootstrap的实现:

 public void onCreate(Bundle arguments) { MultiDex.install(getTargetContext()); super.onCreate(arguments); ... } 

请参阅: https : //developer.android.com/studio/build/multidex.html#testing

原始问题中描述的确切问题可能与旧版本有关。 我在这里添加了我的经验,因为这是研究这个问题的第一个谷歌命中之一。

使用最新版本的工具和android插件,在build.gradle不需要其他任何东西:

 ... android { ... defaultConfig { ... testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" } } 

(我有com.android.tools.build:gradle:1.5.0