为testAndroid设置不同的minSdkVersion比主应用程序

是否有可能为testing设置不同的minSdkVersion比应用程序本身? 我问,因为我想使用新的testing支持库和UI Automator进行testing。 但是,这只适用于API 18+。 同时,我仍然希望支持旧版本的Android,尽pipe没有经过彻底的testing。 我需要添加到我的build.gradle文件才能做到这一点?

为了澄清,我正在使用Android Studio和“新”的基于Gradle的项目结构。

我从Google 的新testing模板中得到了这个。

在您的testandroidTest文件夹中创build一个新的AndroidManifest.xml文件。

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:tools="http://schemas.android.com/tools" package="your.package.name"> <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/> </manifest> 

我已经上传了一个解决scheme的例子mauricegavin / android-testing,因为我自己找不到一个工作。

感兴趣的模块是ui / uiautomator / BasicSample / app 。 您会注意到androidTests目录中有一个AndroidManifest.xml文件。 您在app/build.gradle指定的minSdkVersion仍将用于debugrelease版本。

你会发现示例项目的build.gradle中的minSdkVersion指定了uiautomator不支持的api 17 ,通常会导致构build失败。

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:tools="http://schemas.android.com/tools" package="com.example.android.testing.uiautomator.BasicSample" > <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/> </manifest> 

感谢mattblang的回答,我用这个例子。

试试这个。

 defaultConfig { applicationId "com.test" if (gradle.startParameter.taskNames.contains(":app:assembleDebug")) { minSdkVersion 21 }else{ minSdkVersion 14 } targetSdkVersion 22 versionCode Integer.parseInt(VERSION_CODE) versionName VERSION_NAME } 

是的你可以。 您应该在src/androidTest/AndroidManifest.xml放置特定于testing的清单条目。 在构buildtesting时, 清单合并将组合两个清单,但是在构build应用程序时,只会使用主AndroidManifest.xml。

看到这个答案的更多细节。

发布这个问题后,我也有想到将minSdkVersion设置为debug releaserelease版本的不同值。 但是,我还没有机会去testing它是否有效。

我也从这个博客文章中find了一个可能的解决方法。 创build单独的testproduction口味:

 productFlavors { // The actual application flavor production { minSdkVersion 14 } // Test application flavor for uiautomatior tests test { minSdkVersion 18 } } 

@ Code-Apprentice几乎就在那里。 但是,你不能命名为“testing”,“androidtesting”或“释放”的产品味道。 他们就像关键字,你不能使用这些名字。

所以答案是

  productFlavors { product{ minSdkVersion 15 } uiautoTest { minSdkVersion 18 } } 

我的解决scheme基于风味configuration:

  1. 分成两个味道:
 buildTypes { release {...} debug {...} } productFlavors { dev { ... } autoTest { minSdkVersion 18 // set to 18 only in this flavor multiDexEnabled true // if you got dex index overflow error testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' } } 
  1. 将你的testing相关的依赖项移动到“autoTestCompile”
 // for test autoTestCompile 'com.android.support.test:runner:0.5', { exclude group: 'com.android.support', module: 'support-annotations' } autoTestCompile 'com.android.support.test:rules:0.5', { exclude group: 'com.android.support', module: 'support-annotations' } autoTestCompile 'com.android.support.test.espresso:espresso-web:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' } autoTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-v4' exclude group: 'com.android.support', module: 'design' exclude group: 'com.android.support', module: 'recyclerview-v7' } autoTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2', { exclude group: 'com.android.support', module: 'support-annotations' } 
  1. 运行testing

构建变体截图