Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помощь в написание bash-скрипта для использования adb  (Прочитано 2013 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Добрый день, уважаемые форумчане. Так сложилось, что я очень часто устанавливаю приложения на андроид телефон через консоль командой adb.
Каждый раз делать это через консоль -  неудобно, написал сценарий для Nautilus(может кому-то пригодится):

#!/bin/sh
#rm /tmp/adbinstalllog.txt
for arg
do
  adb install "$arg" >> /tmp/adbinstalllog.txt
done
loggg=$(cat /tmp/adbinstalllog.txt)
gdialog --title "ADB Install Done" --msgbox "$loggg" 800 800
rm /tmp/adbinstalllog.txt

но есть проблема, если подключено более одного устройства, то adb не знает, куда именно заливать .apk файл.
По-этому возникла мысль получать список устройств, и выводить их  с помощью zenity --list. Давать возможность выбора устройства при установке.

например, вывод команды adb devices дает следующий вывод:
List of devices attached
LGOTMS409c0d device
HT0BTHG02888 device

Для того, чтобы установить файл в нужное устройство, нужно подать команду
adb -s LGOTMS409c0d install *путь к .apk*
прошу помощи в построении списка типа:

с подставлением нужного аргумента в команду установки. заранее благодарен.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Код: (bash) [Выделить]
ans=$(zenity --list --text "Text" --radiolist --column "Pick" --column "Opinion" $(echo -e 'List of devices attached\nLGOTMS409c0d\tdevice\nHT0BTHG02888\tdevice' | awk '/device$/{if (NR!=1) {print "FALSE "$1}}' | xargs))Только вместо echo подставьте
Код: (bash) [Выделить]
adb devices
Примеры использования zenity тут:
http://linux.byexamples.com/archives/265/

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Выполнил команду

ans=$(zenity --list --text "Text" --radiolist --column "Pick" --column "Opinion" $(adb devices -e 'List of devices attached\nLGOTMS409c0d\tdevice\nHT0BTHG02888\tdevice' | awk '/device$/{if (NR!=1) {print "FALSE "$1}}' | xargs))
не сразу понял, что нужно было убрать

-e 'List of devices attached\nLGOTMS409c0d\tdevice\nHT0BTHG02888\tdevice'
в результате вся доступная память на разделе забилась))) почему так случилось, и как очистить? Спасибо
« Последнее редактирование: 26 Ноября 2013, 14:59:02 от almaz010891 »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Исходная команда у меня выполняется без проблем, поэтому есть сомнения, что описанная проблема как-то ней связана.
Впрочем, adb и андроидных девайсов в наличии нет, так что извиняйте, проверить не смогу.

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Хм, после перезагрузки компа -все стало ок...Последний вопрос - теперь этой переменной ans присвоено значение выбранного устройства, я правильно понимаю?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
теперь этой переменной ans присвоено значение выбранного устройства, я правильно понимаю?
Да.

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Спасибо Вам большое!

Пользователь решил продолжить мысль 26 Ноября 2013, 15:44:30:
Прошу прощения, есть еще один маленький вопрос. Как сделать так, что если в списке только одно устройство, то миновать диалог выбора?
« Последнее редактирование: 26 Ноября 2013, 15:44:30 от almaz010891 »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
есть еще один маленький вопрос. Как сделать так, что если в списке только одно устройство, то миновать диалог выбора?
Код: (bash) [Выделить]
DEV_LIST=$(adb devices | awk '/device$/{if (NR!=1) {print $1}}')
if [ $(echo "$DEV_LIST" | wc -l) -gt "1" ]
then
    DEV_NAME=$(zenity --list --text "Text" --radiolist --column "Pick" --column "Opinion" $(echo "$DEV_LIST" | awk '{print "FALSE "$0}' | xargs))
else
    DEV_NAME="$DEV_LIST"
fi
« Последнее редактирование: 26 Ноября 2013, 16:42:01 от ArcFi »

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
 :D :D :D :D :D Очень Вам признателен. Спасибо огромное!

Пользователь решил продолжить мысль 26 Ноября 2013, 18:25:01:
И еще один вопрос)) ;D
мне нужно, чтобы инфа о прогрессе установки писалась в лог, и одновременно отображался прогрессбар. Конструкция типа:
adb -s "$DEV_NAME" install "$path" > log.txt | zenity --progress --text "Установка "$path" на устройство "$DEV_NAME"" --pulsate --auto-closeне работает, подскажите, пожалуйста, как верно написать. Спасибо
« Последнее редактирование: 26 Ноября 2013, 19:09:17 от almaz010891 »

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
А без zenity --progress ... работает?

Про zenity тут.

У вас adb всё в лог отсыпает, вот zenity и молчит.

Можно использовать конструкцию типа
Код: (bash) [Выделить]
my_prog | tee file.log | zenity params
Делюсь знаниями, но их у меня мало!

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
ТС, не связывайтесь с прогресс баром. Это лишние заморочки и никто точно Вам не скажет, как расчитывать проценты выполнения. Эти проценты - некоторая абстрактная величина, которая служит только индикатором выполнения.
« Последнее редактирование: 27 Ноября 2013, 08:14:03 от alexander.pronin »

Оффлайн almaz010891

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
А без zenity --progress ... работает?

Про zenity тут.

У вас adb всё в лог отсыпает, вот zenity и молчит.

Можно использовать конструкцию типа
Код: (bash) [Выделить]
my_prog | tee file.log | zenity params

Спасибо, помогли. Читал про команду до задания вопроса, но не додумался ее тут использовать)

ТС, не связывайтесь с прогресс баром. Это лишние заморочки и никто точно Вам не скажет, как расчитывать проценты выполнения. Эти проценты - некоторая абстрактная величина, которая служит только индикатором выполнения.

В данном случае установка занимает какое - то время, по-этому хотелось, чтобы было видно пользователю, что вообще что - то сейчас выполняется, поставил для прогресса параметр --pulsate.

Возможно, кому-то еще пригодится, выкладываю рабочий скрипт.
#!/bin/bash

DEV_LIST=$(adb devices | awk '/device$/{if (NR!=1) {print $1}}')
#Указываем путь к директории, где лежат .apk файлы
DIR_PATH="/home/name/"

if [ -z "$DEV_LIST" ];
then
zenity --error --title="Ошибка" --text="Не подключено ни одно Android-устройство"
 if [ $? = 0 ];
then exit
 fi
fi

path=$(find "$DIR_PATH" -name "*.apk*" | zenity --list --title "Найденные файлы в директории "$DIR_PATH"" --column "Список всех .apk" --height=370 --width=600)
 if [ $? = 1 ];
then exit
 fi

if [ $(echo "$DEV_LIST" | wc -l) -ne "1" ]
then
    DEV_NAME=$(zenity --list --title "На какое устройство будет произведена установка?" --column "Доступные устройства" $(echo "$DEV_LIST" | xargs))
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
« Последнее редактирование: 27 Ноября 2013, 19:10:01 от almaz010891 »

 

Страница сгенерирована за 0.032 секунд. Запросов: 24.