Android Studio: datos claros de la aplicación para la prueba de instrumentación

¿Cómo puedo hacer que Android Studio (AndroidJunitRunner) borre los datos de la aplicación que preceden a una prueba de instrumentación sin ejecutar manualmenteadb ¿mando?

Descubrí queandroid.support.test.runner.AndroidJUnitRunner tipo de trampas: en realidad nunca invocaconnectedCheck oconnectedAndroidTest.

Cuando se ejecuta desde la línea de comando$ gradle connectedCheck

:MyMainApp:assembleDebug UP-TO-DATE
:MyMainApp:assembleDebugTest UP-TO-DATE
:MyMainApp:clearMainAppData
:MyMainApp:connectedCheck

Cuando se ejecuta desde IDE haciendo clic en la configuración de prueba de instrumentación (logotipo verde del robot Android con flechas rojas / verdes)

**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**

Como puede ver, el último objetivo de gradle esassembleDebugTest

Había agregado un gancho enconnectedCheck enbuild.gradle para borrar los datos de la aplicación principal antes de comenzar la prueba de instrumentación.

// Run 'adb' shell command to clear application data of main app for 'debug' variant
task clearMainAppData(type: Exec) {
    // we have to iterate to find the 'debug' variant to obtain a variant reference
    android.applicationVariants.all { variant ->
        if (variant.name.equals("debug")) {
            def clearDataCommand = ['adb', 'shell', 'pm', 'clear', getPackageName(variant)]
            println "Clearing application data of ${variant.name} variant: [${clearDataCommand}]"
            commandLine clearDataCommand
        }
    }
}
// Clear Application Data (once) before running instrumentation test
tasks.whenTaskAdded { task ->
    // Both of these targets are equivalent today, although in future connectedCheck
    // will also include connectedUiAutomatorTest (not implemented yet)
    if(task.name.equals("connectedAndroidTest") || task.name.equals("connectedCheck" )){
        task.dependsOn(clearMainAppData)
    }
}

Me doy cuenta de que, alternativamente, podría implementar un botón 'borrar datos' en la aplicación principal y hacer que la aplicación de instrumentación haga clic en la interfaz de usuario, pero encuentro que esa solución no es deseable.

MiréAndroidJUnitRunner API y hay ganchos a través deRunlistener interfaz, pero los ganchos son durante el contexto de la aplicación de prueba, es decir, se ejecuta en el dispositivo, y Android prohíbe que una aplicación modifique otra aplicación.http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html

La mejor respuesta se dirige a usted si puede ayudarme a activar uno de los siguientes automáticamente desde Android Studio:

ejecutar una línea de comandoadb shell pm clear my.main.app.package,o preferiblemente invocar mi tarea de gradleclearMainAppData

También soy todo oídos si hay una forma alternativa. ¿Seguramente con la automatización de pruebas de dispositivos debería haber una forma clara de borrar los datos de la aplicación?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta