如何等待ADB推送完成?

How to wait for ADB push to complete?

一些自动化设置需要将文件加载到 Android 设备上。当 ADB 推送完成时,内部存储器不会自动刷新。

我当前的脚本同时为每个设备依次循环执行 ADB 命令,然后休眠并通过 action.MEDIA_MOUNTED 广播触发内存扫描:

adb devices | while read line
do
    if [ ! "$line" = "" ] && [ `echo $line | awk '{print }'` = "device" ]
    then
        device=`echo $line | awk '{print }'`
        echo "$device $@ ..."
        #Additional ADB commands
        #Load files
        adb -s $device push home/test/test-automation-agent/loadondevice/. /sdcard &
    fi
done

#Wait for push to complete
sleep 30

adb devices | while read line
do
    if [ ! "$line" = "" ] && [ `echo $line | awk '{print }'` = "device" ]
    then
        device=`echo $line | awk '{print }'`
        echo "$device $@ ..."
            #Trigger refresh of internal storage
            adb -s $device shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://mnt/sdcard 
    fi
done

执行 ADB 推送所需的时间可能会发生巨大变化。我想用检测 ADB 推送完成并执行广播的东西替换睡眠。

感谢任何帮助。

删除 sleep 30 并改为放置 wait 以等待所有 children 退出。

ADBDevices () {
  adb devices | awk -F"\t" '/\tdevice$/{print }'
}

ADBPushAndScan () {
  adb -s  push home/test/test-automation-agent/loadondevice/. /sdcard
  adb -s  shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://mnt/sdcard
}

Wait () {
  while [ $(jobs | grep Running | wc -l) -ne 0 ]; do sleep 1; done
}

for device in $(ADBDevices); do
  ADBPushAndScan $device &
done

Wait