Android Studio: conceder permiso entre la instalación de la prueba APK y las pruebas en ejecución con el corredor de prueba gráfica

Estoy tratando de automatizar la desactivación de las animaciones como se describe en esta publicación , pero que sólo parece funcionar para la línea de comandos invocación de connectedAndroidTest . Quiero utilizar el corredor de prueba gráfica en Studio, con el cuadro de lista que muestra las pruebas pasadas o fallidas. Con ese corredor, la concesión de permiso ( adb shell pm grant ... android.permission.SET_ANIMATION_SCALE ) nunca se ejecuta, aparentemente porque la tarea installDebugAndroidTest nunca se ejecuta, en su lugar el corredor está ejecutando Gradle hasta assembleDebugAndroidTest (o cualquier gradle alternativo Tarea que especifico en mi configuración de ejecución), y luego instalar com.mypackage.test por algún otro método (no-Gradle?) Inmediatamente antes de ejecutar las pruebas. Por lo tanto, cualquier concesión de permiso anterior es restablecida por esa instalación.

¿Cómo puedo conceder SET_ANIMATION_SCALE entre la instalación de la prueba gráfica del corredor de pruebas y la ejecución de la prueba?

Puede hacerlo utilizando la reflexión, agregando el permiso al manifiesto, creando una regla de prueba Espresso y una tarea ( explicada aquí en detalle ).

Agregue el permiso al manifiesto de una variante debug / mock:

 <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> 

Crea tu propia tarea dependiendo de installDebug y haz que installDebug dependa de tu tarea. También es necesario conceder el permiso SET_ANIMATION_SCALE para la prueba .

Cree una regla de prueba que utilice la reflexión interna para recuperar y restaurar escalas de animación ( código ):

 public class AnimationAwareWonderTestRule extends AnimationAwareAwesomeTestRule { private float[] mAnimationScales; @Override protected void before() throws Throwable { mAnimationScales = AnimationAwareWonder.tryToRetrieveAndDisableAnimationsAndTransitions(); } @Override protected void after() throws Throwable { AnimationAwareWonder.tryToRestoreAndEnableAnimationsAndTransitions(mAnimationScales); } } 

Funciona pero parece que no es posible en este momento utilizar este permiso en MarshMallow.

  • ¿Es útil "Monkey Runner" para que los probadores preparen casos de prueba directamente en aplicaciones Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.