我使用Ubuntu 14.04和adb
编写了一些脚本来自动配置100个Android智能手机。
为了达到这个目的,我使用udev
规则来识别USB设备是否连接到PC,如果是这种情况,我会调用我的脚本在设备上安装一些应用程序。
到目前为止,这么好,但有一些问题。 目前我们正在同时连接5个设备,但经常发生在其中一个设备上,没有安装一个或多个应用程序。 它不遵循模式,只是随机发生。 有时候计算机的性能也会在白天下降。
以下是我的udev
规则:
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}!="1d6b", ATTRS{idVendor}!="203a", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/selectDevices.sh"
/ usr / local / bin /中的第一个脚本用于识别应该安装应用程序的设备
#!/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
编辑1:
我曾经像Alex P.建议的那样或者在我对他的答案的解释中尝试过。
将序列传递给tmp脚本,tmp脚本使用at now
调用实际的安装脚本。在安装脚本启动之前,它会休眠2秒。
但问题仍然存在。也许我需要记录安装过程中发生的事情,但目前我不知道如何做到这一点。
编辑2:
过了一段时间我觉得我找到了一些东西,但我仍然不知道为什么。
我认为当两个设备想要同时安装一个应用程序时,adb会出现问题。我管理它以收到类似rm failed for /data/local/tmp/foo.apk, No such file or directory
的错误消息。
之后我切换到首先将Package复制到设备,然后使用shell包管理器安装它们,但仍然没有解决方案。
答案 0 :(得分:0)
我运行多个配置为在设备枚举上自动运行adb
和fastboot
命令的Linux系统,每天处理数百个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}"
如果此设置仍然无法产生稳定的结果,请尝试增加脚本中的sleep
持续时间。
同样有助于为您的udev
规则