windows批處理在androi開發中的作用

windows批處理是DOS時代的產物,現在已經很少人用了,以前的一些病毒高手,一些裝機工具都在使用它。最近公司生產的安卓機器用QPST燒寫,老是會出現藍屏,死機,設備管理器有黃色感嘆號,嚴重影響機器燒寫速度,我們不是生產手機的,沒那麼大量,所以不是那種直接機器燒FLASH的,而是用USB燒寫的。我們平時開發都是在cmd中用fastboot燒寫的,所以就試着用windows批處理腳本完成了一鍵燒寫工作(其實很多安卓開發者就是這麼幹的,比如boot.img和system.img,但是生產就得全燒,還得做出錯處理),燒什麼分區,什麼文件是由rawprogram0.xml決定的(因爲QPST燒寫就是依賴這些配置文件的),經嘗試可以的哈!

10分鐘就會寫批處理,這個就是個輔助工作,不要什麼都去看,浪費精力,需要什麼命令就查什麼,現學現用,我就是這樣。對於簡單的使用,其實也沒什麼技術含量,稱不上編程,能力自然不比C語言,類似shell,實質就是將系統可執行程序命令和第三方程序命令一條條的執行,當然還是有邏輯和分支流程的,這樣的命令組合還是能發揮很大的作用的。

腳本命令有太多的語法說明我就不寫了,好多人博客都有,我貼上我查閱的部分連接。然後就當做個記錄吧!

http://www.bathome.net/  批處理之家

http://blog.163.com/z_tianshi/blog/static/13019688220108287534938/ WINDOWS批處理命令


需求:

1. 安卓機器需要安裝上adb驅動,

2. 在C:\WINDOWS\system32放入adb和fastboot工具

3. 將BURN_D500.CMD放入待燒寫鏡像的目錄


不上語法直接上完成的部分批處理樣例:BURN_D500.CMD   (後綴爲BAT和CMD都行,且不區分名字的大小寫)

@ECHO OFF
REM 默認綠色字符 黑色背景;燒錄過程出錯,會以變爲紅色字符警告
color 0A
SET ADB_TMP_FILE=adb_tmp_.txt
SET CMD_TMP_FILE=cmd_tmp_.txt
title 物聯網移動終端燒錄工具
@echo                   前提:必須先進入bootloader模式才能運行本腳本!
@echo                   注意:    如遇到錯誤,字體都會變爲紅色!
@echo .
@echo                        ==============================
@echo                           【物聯網移動終端燒錄工具】
@echo                              當前支持型號:
@echo                        ==============================
@echo .
@echo 待燒寫鏡像所在目錄      %~dp0

:start
ECHO .
ECHO ______________________
ECHO 步驟一:檢測設備。。。
ECHO .
fastboot devices >%ADB_TMP_FILE%
@findstr "fastboot" %ADB_TMP_FILE%
IF %ERRORLEVEL% EQU 0 ( ECHO 設備----已連接 ) else ( echo 錯誤:請檢查設備連接??? & goto failed_proc )
ECHO .
ECHO ______________________
ECHO 步驟二:燒錄各分區鏡像
ECHO .
REM 已燒寫分區數統計
@set /a tatal=0

@fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 2>&1
	@findstr /I "finished" %CMD_TMP_FILE%
	IF %ERRORLEVEL% EQU 0 (echo modem--OK-- && set /a tatal+=1) else (echo modem----Faild---- && goto failed_proc)
REM ....
REM 忽略其他的語句
REM ....

REM 下面這2個沒有分區表,Ignored
REM @fastboot flash PrimaryGPT gpt_main0.bin
REM @fastboot flash BackupGPT gpt_backup0.bin

ECHO .
ECHO ._______________Burned %tatal% images______________
ECHO .=======================OK=========================燒錄完成!
ECHO .
goto end

REM 燒錄過程出錯,會以紅色
:failed_proc
@color 0c
ECHO .
ECHO ._______________Burned %tatal% images______________
@echo.=======================FAILED=====================燒寫過程出錯!!!
ECHO .

:end
REM 刪除臨時產生的文件
del %ADB_TMP_FILE%
del %CMD_TMP_FILE%
pause



這個批處理中,需要先adb reboot bootloader讓機器進入fastboot燒寫模式,讓後在運行這個腳本,一些註釋(REM)也說明了。唯一要說的可能就是重定向了。我們知道標準輸入、輸出、錯誤用描述符0、1、2表示。默認的>即爲1>,就是將標準輸出定向到某個文件或設備。

fastboot devices >%ADB_TMP_FILE% 就是將命令的返回值重定向到文件中,好了問題下面出來了,

fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 這個命令輸出不是返回值,而是燒寫程序過程中的打印,檢查%CMD_TMP_FILE%的內容是空的

fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 2>&1 後面加上2>&1就是解決問題了,這個燒寫過程的打印都會重定向到指定的文件中去,這樣我才能檢測燒寫過程有沒有出錯。




這個批處理感覺不方便,總不能去打開鏡像目錄(裏面文件太多看了煩)再去找文件運行BURN_D500.CMD 吧,我們還是習慣把鏡像放在一個目錄或者映射的服務器盤上,然後把批處理放在桌面上,一鍵搞定。這個就涉及到批處理call批處理了。

貼上一鍵批處理文件:Call_Burn.cmd


@echo off
@title 運行腳本
REM 填入要燒寫鏡像所在目錄
SET TARGET_DIR_PATH=XXXXXXXXXXX
REM 填入要運行的燒寫腳本
SET CMD_NAME=BURN_D500.CMD

@ECHO 切換到fastboot模式。。。
@adb reboot bootloader


REM 延時5S預留機器重啓時間,否則下面的燒寫命令都失效
@ping 127.0.0.1 -n 6 >nul

PUSHD %TARGET_DIR_PATH%
@call %TARGET_DIR_PATH%\%CMD_NAME%
POPD


上面的延時是查詢baidu的,網上說最好的方法是choice延時,但是我們當前的機器都cmd不支持choice命令,除非你去下載個choice.exe放到系統裏。

PUSHD和POPD成對使用,用於調用其他批處理時用,爲什麼這麼做,就是切換當前默認目錄,比如A.cmd調用B.cmd,在B.cmd中訪問當前目錄下的c.txt,如果不用PUSHD和POPD,B.cmd運行時就會說找不到c.txt,因爲它是到A.cmd所在目錄下找了。

只要將上面提示的鏡像目錄中的XXXXXXXXXX改爲你鏡像的目錄即可。這樣機器上電,在乾乾淨淨的桌面上雙擊Call_Burn.cmd,等待重寫、燒寫一鍵完成,如果遇到出錯,字體會變爲紅色的,如果一路綠色,就沒問題,中間燒錄過程有一個錯誤都會提示你。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章