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

от автора

Доброго времени суток, уважаемые Хабравчане! Так сложилось, что мне часто приходиться устанавливать .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 — для отображения прогрессбара. затем по окончании установки читаем информацию из лога и выводим сообщение о результате установки. Выглядит это так:




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

ссылка на оригинал статьи http://habrahabr.ru/post/204160/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *