Как мне остановить обезьянье безумие?
Я использую инструмент обезьяны, чтобы запустить тест моего приложения для 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 с именем "?" (просто знак вопроса). Когда я убил этот процесс, обезьянье безумие прекратилось.
Что бы это ни стоило, я использую 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);
}
...
}
}