Android:如何使用比在库中声明的更低的minSdkVersion(uiautomator-v18)

我将较旧的 Android应用迁移到 Android-Studio / Gradle.测试需要uiautomator-v18,需要minSdkVersion = 18.但是,我想将minSdkVersion设置为15或16.

SO在同一件事上有很多问题,但我无法解决这个问题.

Exerpt AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.searcher"
    android:versionCode="1"
    android:versionName="0.0.1" >

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

    <!-- ... -->

</manifest>

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsversion "23.0.2"

    defaultConfig {
        applicationId "com.example.searcher"
        minSdkVersion 15
        targetSdkVersion 23
        testApplicationId "com.example.searcher.test"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile files('libs/dagger-1.2.1.jar')
    compile files('libs/dagger-compiler-1.2.1.jar')
    compile files('libs/javawriter-2.1.2.jar')
    compile files('libs/javax.inject.jar')

    androidTestCompile(
        'com.android.support:support-annotations:23.2.0','com.android.support.test:runner:0.4.1','com.android.support.test:rules:0.4.1','com.android.support.test.uiautomator:uiautomator-v18:2.1.1','org.hamcrest:hamcrest-library:1.3','org.mockito:mockito-core:1.10.5','junit:junit:4.12','com.google.dexmaker:dexmaker:1.1','com.google.dexmaker:dexmaker-mockito:1.1'
    )
}

以上给出了错误

Error:Execution Failed for task ':app:processDebugAndroidTestManifest'.
> java.lang.RuntimeException: Manifest merger Failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 18 declared in library [com.android.support.test.uiautomator:uiautomator-v18:2.1.1] /mypath/app/build/intermediates/exploded-aar/com.android.support.test.uiautomator/uiautomator-v18/2.1.1/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.test.uiautomator.v18" to force usage

但我已经在使用overrideLibrary.

如果这不可能,是否可以为“main”和“androidTest”设置不同的minSdkVersion?

编辑:
添加味道后,我能够使用构建变量tstDebug运行测试.但是,使用prdDebug构建它会导致错误,表示androidTest中存在未知内容(例如:package org.hamcrest不存在).修改后的build.gradle摘录:

defaultConfig {
    applicationId "com.example.searcher"
    targetSdkVersion 23
    versionCode 6
    versionName "0.5.0"
}

productFlavors {
    prd {
        minSdkVersion 15
    }
    tst {
        minSdkVersion 18
        testApplicationId "com.example.searcher.test"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }
}

// And instead of "androidTestCompile" use "tstCompile"

是不是可以告诉“Android Studio”它应该在没有androidTest的情况下构建应用程序?

解决方法

一种选择是为您的测试提供产品风味:
android {
    productFlavors {
        production {
            minSdkVersion 15
        }
        uiTest {
            minSdkVersion 18
        }
    }
...
}

然后在uiTest风格版本上运行测试.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...