2015-09-29 85 views
2

我一直在爲自己的應用程序開發自動化測試,但是,我們已經達到了必須在應用程序環境之外更改選項的點。爲此,我們決定使用最新的UIAutomator v2。通過這樣做,我們可以在我們的應用程序和UI Automator中使用espresso測試來進行系統彈出窗口或更改同一測試中的設置。 現在的問題是,我們必須維護min SDK 16用於合同目的。這使得無法使用UIAutomator v2。 編譯器本身提出瞭解決方案:動態更改SDK構建選項

Suggestion: use tools:overrideLibrary="android.support.test.uiautomator.v18" to force usage 

我的gradle當前的gradle相關配置:

compileSdkVersion rootProject.ext.compileSdkVersion 
buildToolsVersion rootProject.ext.buildToolsVersion 

// default apk name (to be overriden) 
project.archivesBaseName = "AwessomeApp"; 

android.enforceUniquePackageName=false 

defaultConfig { 
     String charPrefix = "AWS" 
     minSdkVersion rootProject.ext.minSdkVersion 
     targetSdkVersion rootProject.ext.targetSdkVersion 
     versionCode appVersion.getCode() 
     versionName appVersion.getName() 
     applicationId "pt.company.awesome" 
     testApplicationId "pt.company.test" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

但是,它不工作,可能是因爲我們有minSdk利用gradle這個根項目設置。如果我將項目版本升級到18,它完美無瑕。在這一點上,我不知道如何解決這個問題。是否有可能做類似設置不同的minSdk por測試或味道?

+0

可能的重複[爲testAndroid設置不同的minSdkVersion比主應用程序](http://stackoverflow.com/questions/30585289/set-different-minsdkversion-for-testandroid-than-for-main-app) – blahdiblah

回答

4

好吧,我最終設法解決這個問題。我不知道這是否是最好的解決方案,但它是我能找到的唯一解決方案。

/** 
* Task to add UIAutomator for Test builds and tasks 
*/ 
task addUIAutomatorDependency(dependsOn: ['taskThatNeedsLowerSdk1', 'taskThatNeedsLowerSdk2']) { 

    rootProject.minSdkVersion = 18 

    dependencies{ 
     androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' 
    } 
} 

subprojects { subproject -> 
    afterEvaluate{ 
     if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { 
      android { 
       compileSdkVersion rootProject.ext.compileSdkVersion 
       buildToolsVersion rootProject.ext.buildToolsVersion 
      } 
     } 
    } 
} 

如果有更好的解決方案,請讓我知道。

編輯: 方式更好的解決辦法是添加的AndroidManifest.xml中的src/AndroidTest/AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     package="pt.bla.blablabla"> 

<uses-sdk android:targetSdkVersion="22" android:minSdkVersion="16" 
      tools:overrideLibrary="android.support.test.uiautomator.v18"/> 

</manifest> 

注意,包應該是一樣的原始應用程序。