uiautomator2 - Establezca diferentes minSdkVersion para testAndroid que para la aplicación principal
appium (8)
@ Code-Apprentice está casi allí. Pero no puede nombrar el sabor de un producto para "probar", "prueba de Android" o "lanzamiento". Son como palabras clave, y no puede usar estos nombres.
Entonces la respuesta es
productFlavors {
product{
minSdkVersion 15
}
uiautoTest {
minSdkVersion 18
}
}
¿Es posible establecer un minSdkVersion
diferente para las pruebas que para la aplicación en sí? Pregunto porque quiero usar la nueva biblioteca de soporte de prueba y UI Automator para probar. Sin embargo, esto solo está disponible en API 18+. Al mismo tiempo, todavía quiero respaldar versiones anteriores de Android, aunque no tan exhaustivamente probadas. ¿Qué necesito agregar a mi archivo build.gradle
para hacer esto?
Para aclarar, estoy usando Android Studio y la "nueva" estructura de proyectos basada en Gradle.
Después de publicar esta pregunta, también tuve la idea de establecer minSdkVersion
en diferentes valores para las compilaciones de debug
y release
. Sin embargo, no he tenido la oportunidad de probar si esto funciona o no.
También encontré un posible trabajo en esta publicación de blog . Crea sabores de test
y production
separado:
productFlavors {
// The actual application flavor
production {
minSdkVersion 14
}
// Test application flavor for uiautomatior tests
test {
minSdkVersion 18
}
}
Esta es la versión más hackeada. Me llevó casi un día crear este script. Tome nota de esto como recuerdo, pero solo use esto como último recurso .
android.applicationVariants.all { variant ->
//Making specific variant disablements for faster build
if (variant.buildType.name.contains("debug")) {
println "Making min version to 21 and disabling multidex"
variant.mergedFlavor.setMultiDexEnabled false
def versionMin = new com.android.builder.core.DefaultApiVersion(21)
variant.mergedFlavor.setMinSdkVersion versionMin
}
}
He subido un ejemplo de la solución a mauricegavin/android-testing ya que no pude encontrar uno funcional.
El módulo de interés es ui / uiautomator / BasicSample / app . Notarás que hay un AndroidManifest.xml en el directorio androidTests. La minSdkVersion
que especifique en su app/build.gradle
se seguirá utilizando para las release
de debug
y release
.
Verá que minSdkVersion
en minSdkVersion
del proyecto de ejemplo especifica api 17
que no es compatible con uiautomator y, por lo general, haría que falle la compilación.
<?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>
Gracias a mattblang por su respuesta que utilicé para este ejemplo.
Lo obtuve de la nueva plantilla de prueba de Google.
Cree un nuevo archivo AndroidManifest.xml
en su test
o en la carpeta androidTest
.
<?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>
Mi solución basada en la configuración del sabor:
- dividir en dos sabores:
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''
}
}
- mueve tus dependencias relacionadas con la prueba a "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''
}
- Ejecutar prueba
Sí tu puedes. Debe colocar entradas de manifiesto específicas de la prueba en src/androidTest/AndroidManifest.xml
. Al construir sus pruebas, la fusión de manifiestos combinará ambos manifiestos, pero cuando construya su aplicación solo se usará el AndroidManifest.xml principal.
Vea esta respuesta para más detalles.
prueba este.
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
}