目前,我的android项目正在使用gradle插件版本1.2.3。我能够使用gradle命令" ./ gradlew clean connectedProductionAndroidTest"成功运行单元测试(android测试)。哪里"生产"是一种味道。
但是,当我将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插件的代码。这是在我的 root 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"。
非常感谢任何帮助。
编辑:
这是我的app的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"
}
}
答案 0 :(得分:1)
在project.properties
文件中添加以下行:
manifestmerger.enabled=true
并重建您的应用。
如果无效,请检查此解决方案:
我终于找到了解决方案。问题在于依赖性 事实上,它仍然是未知为什么它曾经工作,然后突然 拒绝,但这里的依赖关系应该如何 测试模块:
总而言之,您需要确保所有库和项目 库列出了您的测试模块并标记为“已提供” Robotium lib除外,它是“编译”。
来自:Instrumentation run failed due to 'java.lang.IllegalAccessError'
最后,如果你仍然坚持这个问题:
旧设备在运行测试时遇到问题 应用程序中的依赖关系和测试应用程序的测试应用程序。
要解决此问题,您必须弄清楚哪个 依赖会导致问题。
就我而言,Dagger和Espresso都取决于
javax.inject
这就是“固定”的方式:androidTestCompile('com.android.support.test.espresso:espresso-core:2.0')
{ 排除组:'javax.inject' }
如果您包含更多或更奇怪的依赖项,您可以查看 this build.gradle
使用espresso-contrib时,您可能需要这样做:
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') { exclude group: 'javax.inject' exclude group: 'com.android.support' }