Как мне остановить обезьянье безумие?

Я использую инструмент обезьяны, чтобы запустить тест моего приложения для Android. Например, я мог бы выполнить такой прогон:

adb shell monkey -p com.myapp -v 10000

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

Убивать adb shell Процесс на моем Mac не решает проблему. Убивать com.myapp процесс на моем телефоне с использованием ddms не работает. Отключение моего телефона не работает.

Как мне отменить обезьянье безумие?

6 ответов

Решение

Вы можете убить процесс обезьяны, просто сделав это:

$ adb shell ps | awk '/com\.android\.commands\.monkey/ { system("adb shell kill " $2) }'

[Nitpick] Ты путаешь обезьяньего бегуна с обезьяной.

Инструмент monkeyrunner не имеет отношения к пользовательскому интерфейсу / приложению Monkey, также известному как инструмент обезьяны. Инструмент обезьяны запускается в оболочке adb непосредственно на устройстве или эмуляторе и генерирует псевдослучайные потоки пользовательских и системных событий. Для сравнения, инструмент monkeyrunner управляет устройствами и эмуляторами с рабочей станции, отправляя определенные команды и события из API.

[/ Придираться]

На моем устройстве Android 2.2, когда я запускаю monkey, я вижу процесс, запущенный в DDMS с именем "?" (просто знак вопроса). Когда я убил этот процесс, обезьянье безумие прекратилось.

adb shell
ps | grep monkey
kill process_id
adb shell kill $(adb shell pgrep monkey)

слава @deadfish

Что бы это ни стоило, я использую Android Studio 3.1.4 на Mac в 2018 году, и мне пришлось изменить принятый ответ следующим образом:

./adb shell ps | awk '/com\.android\.commands\.monkey/ { system("./adb shell kill " $2) }'

Надеюсь, что это поможет предотвратить выпадение волос и срывание карандаша!

Кроме того... когда дело доходит до обезьяны, всегда прикрепляйте свое приложение!!! В противном случае вы можете случайно отправить все свои селфи на случайное электронное письмо в Китае, как я. ¯\_(ツ)_/¯

Убить обезьяну с помощью оболочки вызовет небольшую проблему, IActivityController в ActivityTaskManagerService не будет установлен в значение null, как это должно быть. И ActivityManager.isUserAMonkey() по-прежнему возвращает true.

Если обезьяна остановится автоматически, контроллер будет правильно сброшен:

      Monkey.java{
    private int run(String[] args) {
        ...
        try {
            mAm.setActivityController(null, true);
            mNetworkMonitor.unregister(mAm);
        }
        ...
    }
}
Другие вопросы по тегам