2015-12-09 30 views
1

目前,我的android项目正在使用gradle插件1.2.3版本。我能够使用gradle命令“./gradlew clean connectedProductionAndroidTest”成功运行单元测试(android测试),其中“Production”是一种风格。从1.2.3更新Android gradle插件 - > 1.5.0 =单元测试中断

但是,当我将我的gradle插件更新到1.5.0时,出现以下错误。

17:35:16 Tests on Android SDK built for x86 - 4.2 failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' 
17:35:16 
17:35:16 com.android.builder.testing.ConnectedDevice > No tests found.[Android SDK built for x86 - 4.2] [31mFAILED [0m 
17:35:16 No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack @Test annotations). 

当我更新了gradle这个插件,我没有做的目录结构,也没有任何改变我的任何测试。

这是我用来更新gradle插件的代码。这是我的 build.gradle文件。

buildscript { 
    repositories { 
     jcenter() 
    } 


    dependencies { 
     classpath 'com.android.tools.build:gradle:1.5.0' 
    } 
} 

我只是想知道如果两个版本之间有什么变化,可能会使我的测试失败?

请注意,我将测试放在文档中指定的“$ ROOT/app/src/androidTest/java/...”中。另外,在gradle 1.2.3中,我不得不使用命令“./gradlew clean connectedProductionAndroidTest”,但在插件版本1.5.0中,它看起来事情已经改变。我现在必须这样做:“./gradlew clean connectedAndroidTestProduction”。请注意“生产”和“AndroidTest”的交换。

任何帮助将不胜感激。

编辑:

这里是我的应用程序的文件的build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion rootProject.compileSdkVersion 
    buildToolsVersion rootProject.buildToolsVersion 

    lintOptions { 
     disable 'OldTargetApi' 
     abortOnError false 
    } 

    defaultConfig { 
     applicationId "com.myapp" 

     minSdkVersion rootProject.minSdkVersion 
     targetSdkVersion rootProject.targetSdkVersion 

     versionCode rootProject.getVersionCode() 
     versionName rootProject.getVersionName() 

     testApplicationId "com.myapp.test" 
     testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles 'proguard.cfg' 
      signingConfig signingConfigs.release 

      multiDexEnabled false 
     } 
     debug { 
      debuggable true 
      testCoverageEnabled true 
      signingConfig signingConfigs.release 

      multiDexEnabled true 
     } 
    } 

    productFlavors { 
     production { 

     } 
    } 

    dexOptions { 
     javaMaxHeapSize "4g" 
    } 
} 

回答

1

在你project.properties文件中加入这一行:

manifestmerger.enabled=true 

,重建您的应用程序。

如果它不会工作,检查该解决方案:

我终于找到了解决办法。问题是具有依赖性的 的确,仍是一个未知数,为什么它使用的工作,然后突然 拒绝了,但这里的依赖性看起来应该像你 测试模块:

enter image description here

因此,所有的您只需确保所有库和项目 库都列在您的测试模块中,并且标记为“已提供” ,但是“编译”的Robotium lib除外。

来源:Instrumentation run failed due to 'java.lang.IllegalAccessError'

最后,如果你还停留在这个问题:

旧款设备的运行测试问题,当你在你的应用程序和测试应用程序相同 的相依性,仪器应用程序。

要解决此问题,您将必须找出哪些 依赖项导致此问题。

在我的情况是匕首和咖啡都取决于javax.inject ,这是它如何被 “固定”:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.0') 

{ 排除组: 'javax.inject' }

如果您包含更多或更多的依赖项,您可以查看 this build.gradle

当使用意式咖啡的contrib,您可能需要这样做:

androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') 
{ 
    exclude group: 'javax.inject' 
    exclude group: 'com.android.support' 
} 

来源:Tests fail after Espresso 2 upgrade (failed: Instrumentation run failed due to 'java.lang.IllegalAccessError')

+0

感谢您的帮助! :) – Jon