为testAndroid设置不同的minSdkVersion比主应用程序
是否有可能为testing设置不同的minSdkVersion
比应用程序本身? 我问,因为我想使用新的testing支持库和UI Automator进行testing。 但是,这只适用于API 18+。 同时,我仍然希望支持旧版本的Android,尽pipe没有经过彻底的testing。 我需要添加到我的build.gradle
文件才能做到这一点?
为了澄清,我正在使用Android Studio和“新”的基于Gradle的项目结构。
我从Google 的新testing模板中得到了这个。
在您的test
或androidTest
文件夹中创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
仍将用于debug
和release
版本。
你会发现示例项目的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
release
和release
版本的不同值。 但是,我还没有机会去testing它是否有效。
我也从这个博客文章中find了一个可能的解决方法。 创build单独的test
和production
口味:
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:
- 分成两个味道:
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' } }
- 将你的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' }
- 运行testing