2015-12-09 57 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