Upgrade 773 Полная | Page 43

Ликбез очередной итерации. Пришлось вносить изменения в автотест, добавив перезапуск сервиса. Shell Команды, которые должны быть выполнены внутри самого Android, выполняются из шелла. Этих команд довольно много и без них жить трудно. Скажем, напечатать текст в поле ввода, если там стоит курсор, можно командой «input text», выполненной в шелле. А скопировать файл из места А в место Б можно средствами cp. Строго говоря, сама команда shell — это команда ADB. Таким образом можно работать в шелле, будто бы подключившись по SSH или telnet, выполнив — adb shell и нажав Enter, а можно выполнять по одной команде shell’а, делая это из ADB. В первом случае вам доступны инструменты и возможности Linux и Android, во втором — инструменты и возможности консоли, в которой вы работаете. В Windows это cmd или, скажем, PowerShell. Я приведу в пример несколько команд, доступных из shell, но их гораздо больше. Нужно просто понимать, что примерно можно делать в шелле. Главная сложность в том, что остановка сервера означает отвал всех устройств, и прерывание записи лога, если у вас выполнялась всё это время adb logcat. И никакой adb -s не поможет, так как перезапускается весь сервис, так что помните это. Впервые мне пришлось использовать перезапуск сервиса на каждой итерации автотеста, когда устройство One Plus One стало мгновенно проходить автотест, причём проваливая его. При отладке своего скрипта, суть которого сводилась к парсингу вывода logcat, выяснилось, что команда logcat вываливала содержимое буфера за последние несколько часов, а не с момента старта. Вообще, чтобы затирать старые записи и писать лог строго с текущего момента, у команды logcat есть ключ -c, от «clear». Проверил руками — и действительно, adb logcat -c просто не отрабатывала, не возвращая никаких ошибок. После перезапуска сервиса всё заработало, поработало и сломалось точно также на Monkey Monkey — это утилита, которая генерирует заданное количество псевдослучайных событий для ва43