Pull to refresh

Как облегчить установку .apk на Android или GUI для adb install

Reading time3 min
Views26K
Доброго времени суток, уважаемые Хабравчане! Так сложилось, что мне часто приходиться устанавливать .apk-файлы на Android-устройства — работаю тестировщиком. И вот в очередной раз, открывая терминал и набирая команду для установки очередного приложения, я задумался о том, как можно избавиться от рутинной работы. Статья предназначена для новичков, по-этому будет много пояснений.
Для начала давайте вспомним синтаксис команды: 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 attached
LGOTMS409c0d device
HT0BTHG02888 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 --help
DIR_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.
 while [ -z "$DEV_LIST" ]</code>: <code>-z
— возвращает true, если длинна строки равна 0, думаю, что в теле цикла все и так понятно.
4.
 path=$(find "$DIR_PATH" -name "*.apk*" | zenity --list --title "Найденные файлы в директории "$DIR_PATH"" --column "Список всех .apk" --height=370 --width=600)
— ищем все файлы с расширением *.apk по заданному пути, и выводим результат в список через zenity — выбранный путь присваиваем переменной path
5.
 if [ $(echo "$DEV_LIST" | wc -l) -ne "1" ]
— читаем список устройств, получаем количество строк, если строк больше, чем 1, тогда строим список:
 DEV_NAME=$(zenity --list --title "На какое устройство будет произведена установка?" --column "Доступные устройства" $(echo "$DEV_LIST" | xargs))
, выбранное значение присвоится DEV_NAME.
6.
 adb -s "$DEV_NAME" install "$path" | tee /tmp/installlog.txt | zenity --progress --text "Установка "$path" на устройство "$DEV_NAME"" --pulsate --auto-close --no-cancel
— даем команду на установку, параллельно пишем ход установки в log файл, и передаем параметры в zenity --progress — для отображения прогрессбара. затем по окончании установки читаем информацию из лога и выводим сообщение о результате установки. Выглядит это так:




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

Articles

Change theme settings