背景:在做预置资源(安装apk)时,有多台android设备需要做相同的资源(如:10台,安装10个apk)。一台一台去预置的话(当然也可以每人一台去预置),耗时较长有重复性。
问题:如何去实现多台同时操作呢?(这个问题让我想到了多进程和多线程)
思路:(前提:环境为window系统)。可以使用批处理来实现,假设有10台设备,分别开启10个cmd窗口进行安装。
解决:初始方案-->最终方案
No1 :将安装命令写到bat文件中,复制为10个bat文件。显然这是最原始的方法,也不方便。因为每次执行一个bat文件时,都要修改文件中的deviceId,多一个apk还得加一行代码,而且每个bat文件都要点击一遍(假设有20个,30个呢?想想这得修改点击多少次啊)
@echo off adb -s deviceId install -r xxx1.apk adb -s deviceId install -r xxx2.apk adb -s deviceId install -r xxx3.apk adb -s deviceId install -r xxx4.apk pause
No2 :对以上的方法进行修改,可以使用start cmd 去执行。这样一来,只需要点击一次就可以了。但是还得修改deviceId,多一台设备还要加一行start cmd。
@echo off start cmd /k "for /r "%cd%apkPackage" %%a in (*.apk) do ( adb -s deviceId install -r %%a)" start cmd /k "for /r "%cd%apkPackage" %%a in (*.apk) do ( adb -s deviceId install -r %%a)" start cmd /k "for /r "%cd%apkPackage" %%a in (*.apk) do ( adb -s deviceId install -r %%a)" start cmd /k "for /r "%cd%apkPackage" %%a in (*.apk) do ( adb -s deviceId install -r %%a)" pause
No3 :No1和No2都不能满足需求。最终版本(还有其他异常情况,暂未处理)
@echo off&setlocal enabledelayedexpansion title Install-MultipleDevices color 0a rem +++++++++++++++++++++++++++++++++++++++++++ rem Install-MultipleDevices.bat rem By zhzw @2017/7/7 rem rem Version: 1.2 rem +++++++++++++++++++++++++++++++++++++++++++ rem 两个adb devices 为了减少deamon start successfully语句写入deviceId.txt中 adb devices adb devices >deviceId.txt rem 处理0台设备的情况 set count=0 type nul>temp.txt rem tonkes与delims的位置不能改变,否则会出现显示混乱 for /f "skip=1 tokens=1 delims= " %%i in (deviceId.txt) do ( echo %%i >>temp.txt set /a count+=1 ) echo 总共!count!台设备 for /f %%i in (temp.txt) do ( start "Device:%%i" cmd /k "@echo off& for /r "%cd%apkPackage" %%a in (*.apk) do ( echo APK=%%~nxa &adb -s %%i install -r %%a)" ) del temp.txt pause
Update
这是多台设备文件push的脚本,暂且贴在这吧
@echo off setlocal enabledelayedexpansion rem ......................... rem MutilPushFile.bat rem by zzw rem .......................... @rem 判断设备数量 for /f %%i in ('adb devices ^| find /c "device"') do ( set a=%%i if !a! LEQ 1 ( echo "NO DEVICE CONNECTED" & echo,& goto end ) else ( set /a b=!a!-1 & echo Total !b! devices ) ) echo, echo start push file to devices ... echo, @rem push 文件到设备 for /f %%i in ('adb devices ^|findstr device$') do ( adb -s %%i push getspec.sh /data/local/tmp 1>nul 2>nul && echo push %%i success || echo push %%i ***fail*** ) :end echo, pause