2015-06-02 2 views
0

Я новичок в форуме, и я надеюсь, что поставил свой вопрос в нужном месте.android - Проблемы с установкой приложений на 100-х устройствах с использованием Ubuntu и ADB

Я написал несколько сценариев, используя Ubuntu 14.04 и Android Debug Bridge для автоматической настройки 100-дюймовых Android-смартфонов. Для этого я использовал правило udev, чтобы определить, подключено ли USB-устройство к компьютеру, и если в этом случае я вызываю свои сценарии для установки некоторых приложений на устройства.

Пока что так хорошо, но есть некоторые проблемы. В настоящее время мы одновременно подключаем 5 устройств, но часто случается так, что на одном из устройств одно другое приложение не устанавливается. Это не соответствует шаблону, это просто случается случайным образом. Иногда также производительность компьютера уменьшается в течение дня.

Я был бы очень признателен за вашу помощь. Надеюсь, что описание понятное и, пожалуйста, простите меня за мой плохой англис.

Вот мои правила Udev в /etc/udev/rules.d

ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}!="1d6b", ATTRS{idVendor}!="203a", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/selectDevices.sh" 

Первый скрипт в/USR/местные/бен/для идентификации устройств на ведьму должны быть установлены в приложениях

#!/bin/bash 

sleep 2 
Pid=/home/android/Schreibtisch/PID 

for DEVICE in `adb devices | tail -n +2 | grep device | awk '{print $1}'`; 
do 

    if [ ! -f $Pid/$DEVICE.pid ]; 
    then 

    touch $Pid/$DEVICE.pid 
    sh /usr/local/bin/touchDevices.sh $DEVICE 

    fi 

done 

и последний сценарий для установки приложений

#!/bin/bash 
cd /home/android/Desktop/Apps 

for APK in $(ls *.apk); 
do 
    adb -s $1 install $APK 
done 

Edit 1: Я пробовал, как Алекс П. предложил это или в моей интерпретации его ответа. Передайте серийный номер сценарию tmp, а сценарий tmp вызывает фактический сценарий установки с at now. Перед запуском скрипта установки он засыпает 2 секунды. Но проблемы все еще существуют. Maybee Мне нужно регистрировать то, что происходит во время установки, но на данный момент я понятия не имею, как это сделать.

Редактировать 2: Через некоторое время я думаю, что нашел что-то, но я до сих пор не знаю, почему. Я думаю, что у adb возникают проблемы, когда два устройства хотят установить одно приложение одновременно. Я управлял им, чтобы получить сообщение об ошибке, например rm failed for /data/local/tmp/foo.apk, No such file or directory. После этого я переключаюсь, чтобы сначала скопировать Пакет на устройства, а затем установить их с помощью диспетчера пакетов оболочки, но все равно никакого решения.

ответ

0

Я запускаю несколько систем Linux, настроенных для автоматического запуска команд adb и fastboot на перечислении устройств, которые обрабатывают сотни подключений устройств Android в день без заминки. Основываясь на моем опыте у меня есть следующий совет для вас:

  • вы должны ждать несколько секунд после устройства перечисления перед тем отправки каких-либо adb команд
  • вы не должны запускать любые длинный запущенные процессы непосредственно из udev правила. Вы можете использовать команду at now для «развязки» ваших команд adb install от udev
  • нет необходимости использовать adb devices, чтобы получить серийный номер.Пусть ваше правило udev предоставит его вашему сценарию в качестве параметра.
  • нет необходимости использовать bash где sh достаточно
  • использовать полные пути, где это возможно

Ваш инсталляционный скрипт должен выглядеть следующим образом:

APKDIR="/full/path/to/apks" 
PIDDIR="/full/path/to/pid" 
ADB="/full/path/to/adb -s usb:$1" 

if [ ! -f $PIDDIR/$2.pid ]; then 
    touch $PIDDIR/$2.pid 
    CMD="sleep 5" 
    for APK in $APKDIR/*.apk; do CMD="$CMD; $ADB install $APK"; done 
    echo "$CMD" | at -M now 2>/dev/null 
fi 

Добавить вызов на сценарии установки на конец udev правило:

, RUN+="/bin/sh /full/path/to/the/script.sh %k $env{ID_SERIAL_SHORT}"

Если эта настройка по-прежнему не дает стабильных результатов - попробуйте увеличить продолжительность в скрипте.

Также она помогает назначить большее количество (90 +) к вашему udev правило

+0

Большое спасибо за ответ, но у меня есть некоторые вопросы. –

+0

Где бы вы предложили поместить команду ожидания перед отправкой команд adb? В правиле udev или только в первой строке скрипта? Как бы вы использовали 'at now' с правилом udev? что-то вроде этого? 'RUN + =" на -f /pathto/script.sh $ attr {serial} теперь "'. Проблема в том, что он не примет параметр, если я сделаю это таким образом. Или мне нужно вызвать скрипт, который будет работать с 'at now'? –

+0

добавлено больше указателей и некоторого кода ответа –