Доброго времени суток, уважаемые Хабравчане! Так сложилось, что мне часто приходиться устанавливать .apk-файлы на Android-устройства — работаю тестировщиком. И вот в очередной раз, открывая терминал и набирая команду для установки очередного приложения, я задумался о том, как можно избавиться от рутинной работы. Статья предназначена для новичков, по-этому будет много пояснений.
Для начала давайте вспомним синтаксис команды:
Так как adb не знает, куда ставить приложение. Чтобы явно указать устройство, используется синтаксис
С помощью скрипта, приведенного ниже, можно сделать процесс установки более дружелюбным к пользователю.
Листинг скрипта:
Теперь по-порядку:
1.
Для взаимодействия с пользователем используется Zenity — графический интерфейс для командной строки. Ознакомиться с параметрами командной строки можно в просторах Интернет, например, тут, или выполнив в терминале
DIR_PATH — это путь, где по-умолчанию сложены все apk, лично мне удобен такой вариант. Если путь к файлу не постоянный — нужно стереть строку с DIR_PATH, а для ��еременной path указать
2.
3.
4.
5.
6.




После создания скрипта делаем его исполняемым, и запускаем его.
Надеюсь, что статья будет полезна. Спасибо за внимание.
Для начала давайте вспомним синтаксис команды:
adb install <путь к файлу>. Если подключено 2 и более устройств, то получим: error: more than one device and emulator- waiting for device -Так как adb не знает, куда ставить приложение. Чтобы явно указать устройство, используется синтаксис
adb -s <ID_device> installl <путь к файлу>. Чтобы получить ID_device, необходимо дать команду adb devices, которая выведет список подключенных устройств:List of devices attachedLGOTMS409c0d deviceHT0BTHG02888 deviceС помощью скрипта, приведенного ниже, можно сделать процесс установки более дружелюбным к пользователю.
Листинг скрипта:
#!/bin/bash DEV_LIST=$(adb devices | awk '/device$/{if (NR!=1) {print $1}}') #Указываем путь к директории, где лежат .apk файлы DIR_PATH="/home/dn010891laa/Загрузки/" while [ -z "$DEV_LIST" ]; do zenity --question --title="Не подключено ни одно Android-устройство" --text="Проверить заново?" --height=100 --width=400 if [ $? -eq "0" ]; then DEV_LIST=$(adb devices | awk '/device$/{if (NR!=1) {print $1}}') else notify-send "ADB" "Операция отменена" exit fi done path=$(find "$DIR_PATH" -name "*.apk*" | zenity --list --title "Найденные файлы в директории "$DIR_PATH"" --column "Список всех .apk" --height=370 --width=600) if [ $? -eq "1" ]; then exit fi if [ $(echo "$DEV_LIST" | wc -l) -ne "1" ] then DEV_NAME=$(zenity --list --title "На какое устройство будет произведена установка?" --column "Доступные устройства" $(echo "$DEV_LIST" | xargs)) if [ $? -eq "1" ];then notify-send "ADB" "Операция отменена" exit fi else DEV_NAME="$DEV_LIST" fi adb -s "$DEV_NAME" install "$path" | tee /tmp/installlog.txt | zenity --progress --text "Установка "$path" на устройство "$DEV_NAME"" --pulsate --auto-close --no-cancel log=$(cat /tmp/installlog.txt) zenity --info --title="Результат установки" --text="$log" rm /tmp/installlog.txt killall adb exit
Теперь по-порядку:
1.
Для взаимодействия с пользователем используется Zenity — графический интерфейс для командной строки. Ознакомиться с параметрами командной строки можно в просторах Интернет, например, тут, или выполнив в терминале
zenity --helpDIR_PATH — это путь, где по-умолчанию сложены все apk, лично мне удобен такой вариант. Если путь к файлу не постоянный — нужно стереть строку с DIR_PATH, а для ��еременной path указать
zenity --file-selection --title="Выберите apk для установки" --file-filter=*.apk — тогда будет открываться окно «Выбрать файл» с выбором любого пути и фильтром по расширению файлов *.apk.2.
— Получаем вывод командыDEV_LIST=$(adb devices | awk '/device$/{if (NR!=1) {print $1}}')
adb devices, удаляем лишний текст из строк, в данном случае текст «device», и выводим все строки, кроме первой, так как там содержится ненужный текст «List of devices attached» — это все присваиваем переменной DEV_LIST.3.
— возвращает true, если длинна строки равна 0, думаю, что в теле цикла все и так понятно.while [ -z "$DEV_LIST" ]</code>: <code>-z
4.
— ищем все файлы с расширением *.apk по заданному пути, и выводим результат в список через zenity — выбранный путь присваиваем переменной pathpath=$(find "$DIR_PATH" -name "*.apk*" | zenity --list --title "Найденные файлы в директории "$DIR_PATH"" --column "Список всех .apk" --height=370 --width=600)
5.
— читаем список устройств, получаем количество строк, если строк больше, чем 1, тогда строим список:if [ $(echo "$DEV_LIST" | wc -l) -ne "1" ]
, выбранное значение присвоится DEV_NAME.DEV_NAME=$(zenity --list --title "На какое устройство будет произведена установка?" --column "Доступные устройства" $(echo "$DEV_LIST" | xargs))
6.
— даем команду на установку, параллельно пишем ход установки в log файл, и передаем параметры вadb -s "$DEV_NAME" install "$path" | tee /tmp/installlog.txt | zenity --progress --text "Установка "$path" на устройство "$DEV_NAME"" --pulsate --auto-close --no-cancel
zenity --progress — для отображения прогрессбара. затем по окончании установки читаем информацию из лога и выводим сообщение о результате установки. Выглядит это так:



После создания скрипта делаем его исполняемым, и запускаем его.
Надеюсь, что статья будет полезна. Спасибо за внимание.
