背景:在做預置資源(安裝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