动态更改SDK构建选项

时间:2015-09-29 14:28:50

标签: android sdk build.gradle android-uiautomator android-espresso

我一直在为我的应用程序开发自动化测试,但是,我们已经达到了必须在应用程序环境之外更改选项的程度。为此,我们决定使用最新的UIAutomator v2。通过这样做,我们可以在我们的应用程序和UI Automator中使用espresso测试来进行系统弹出或在同一测试中更改设置。 此时的问题是我们必须为合同目的维护最低版本16。这使得无法使用UIAutomator v2。 编译器本身提出了一个解决方案:

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

但是,它不起作用,可能是因为我们使用gradle通过根项目设置了minSdk。如果我将项目版本提升到18,它可以完美无缺地工作。在这一点上,我不知道如何解决这个问题。是否可以做一些像设置不同的minSdk测试或味道的东西?

1 个答案:

答案 0 :(得分: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
            }
        }
    }
}

如果有更好的解决方案,请告诉我。

修改 更好的解决方案是在src / AndroidTest / AndroidManifest.xml中添加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>

请注意,该软件包应与原始应用程序相同。