uiautomator2 android testing android-uiautomator

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:

  1. 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'' } }

  1. 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'' }

  1. 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 }