Android Studio - очистить данные приложения для Instrumentation Test

Как заставить Android Studio (AndroidJunitRunner) очищать данные приложения, предшествующие тестированию инструментов, без запуска вручнуюadb команда?

Я обнаружил, чтоandroid.support.test.runner.AndroidJUnitRunner виды читов - это никогда не вызываетconnectedCheck или жеconnectedAndroidTest.

При запуске из командной строки$ gradle connectedCheck

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

При запуске из среды IDE, щелкнув конфигурацию контрольно-измерительных приборов (зеленый логотип робота Android с красными / зелеными стрелками)

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

Как видите, последняя цель GradleassembleDebugTest

Я добавил крючок наconnectedCheck вbuild.gradle очистить данные основного приложения перед началом контрольно-измерительной аппаратуры.

// 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)
    }
}

Я понимаю, что в качестве альтернативы я мог бы реализовать кнопку «очистить данные» в главном приложении и заставить инструментальное приложение щелкать по интерфейсу, но я считаю, что это решение нежелательно.

я смотрел наAndroidJUnitRunner API и есть хуки черезRunlistener интерфейс, но перехваты находятся в контексте тестового приложения, т. е. работает на устройстве, и Android запрещает одному приложению изменять другое приложение.http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html

Лучший ответ обращается к вам, если вы можете помочь мне автоматически вызвать одно из следующих действий в Android Studio:

выполнить командную строкуadb shell pm clear my.main.app.package,или, предпочтительно, вызвать мою задачу GradleclearMainAppData

Я также все уши, если есть альтернативный путь, Конечно, с автоматизацией тестирования устройств должен быть четкий способ очистки данных приложения?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос