前言
在日常項目開發中,除了編寫業務邏輯外,還需處理一些瑣事,如資源更新、單元測試和資源壓縮等。本文旨在介紹如何通過腳本處理這些瑣事,讓開發者能夠專注于業務開發。
一、腳本的定義
腳本可以簡單理解為一條條可見的文字命令(如可通過記事本查看、編輯)。腳本程序在執行時,由系統解釋器逐條翻譯成機器可識別的指令,并按順序執行。由于腳本執行時需要額外的翻譯過程,其效率略低于二進制程序。
二、使用場景示例
1. 崩潰日志格式化
需求描述:項目中設置了崩潰異常捕獲機制,崩潰時會保存棧信息到SD卡的.crash文件夾中。但這些信息是單行文本,長度較長時難以定位問題。例如:
atandroid.app.FragmentManagerImpl.moveToState(FragmentManager.Java:993) at android.app.FragmentManagerImpl
問題在于轉義字符保存不正確, 變成了n, 變成了t。手動轉換非常耗時。
使用腳本:
方案一:用c語言編寫控制臺程序,讀取文件內容,將n轉換為 ,t轉換為 。用批處理調用此程序,傳入文件路徑作為參數。C語言代碼如下:
char buff[300000] = {0};
ifstream myfile(argv[1]);
myfile.read(buff, 300000);
myfile.close();
// 處理 n 和 t 轉換為 和
for (size_t i = 0; i != len – 1; i++)
{
if (buff[i] == ” && buff[i + 1] == ‘n’)
{
buff[i] = ‘ ‘;
buff[i + 1] = ‘ ‘;
}
else if (buff[i] == ” && buff[i + 1] == ‘t’)
{
buff[i] = ‘ ‘;
buff[i + 1] = ‘ ‘;
}
}
生成convertLog.exe,并在批處理中調用:
call convertLog %1
直接將崩潰文件拖到批處理上,批處理會將文件路徑作為參數傳遞給convertLog.exe。
方案二:用python直接轉換,代碼如下:
# –– coding:utf-8 ––
text = open(‘crash.cr’).read()
print(text.replace(“n”, ” “).replace(“t”, ” “))
兩行代碼即可完成轉換,需Python3環境。
2. 切換手機屏幕分辨率
需求描述:項目為1920×1080分辨率的設備開發,但需適配1080×720分辨率的新設備。由于沒有新設備樣機,無法直接測試。
具體步驟:
- 修改/system/build.prop文件中的ro.sf.lcd_density為320。
- 進入adb shell,輸入“su”并回車。
- 輸入“wm size 720×1280”(若無效,嘗試“am display-size 720×1280”)并回車。
- 重啟手機,設置生效,屏幕降為720p。
由于需頻繁切換分辨率,利用腳本自動化此過程:
腳本方案:
預先修改好不同分辨率的build.prop文件,直接push對應的文件。具體代碼如下:
set device=M166023E2K
adb -s %device% root
adb -s %device% remount
adb -s %device% shell “chmod 777 /system/build.prop”
adb -s %device% push 320/build.prop /system/
adb -s %device% shell “wm size 720×1280”
adb -s %device% reboot
pause
修改文件路徑和分辨率即可切換。編寫兩個批處理文件,運行對應批處理即可快速切換。
3. 資源更新
需求描述:項目中使用圖片、音頻、視頻、字體和H5頁面等資源,更新時需同步到res或assets文件夾。以圖片為例:
常規做法:視覺設計師將圖片放到服務器,軟件開發人員從服務器拷貝到工程資源文件夾,可能遇到:
- 圖片名稱為中文,需改為英文。
- 文件多時,更新定位麻煩,常用全部替換。
使用腳本:在windows下使用批處理,從服務器拷貝圖片到res文件夾并重命名。關鍵代碼如下:
@echo off
set SRC_PATH=92.168.100.230項目文件某個項目
set DEST_PATH=D:項目某個項目 es
set src_name=%1
set dest_name=%2
copy “%SRC_PATH%%src_name%.png” “%DEST_PATH%%dest_name%.png”
將此批處理命名為pullPic.bat,處理單個圖片。
為實現批量操作,需改名表。用excel保存改名表,A列為批處理命令,B列為批處理名稱,C列為原名稱,D列為目標名稱。
將ABCD列內容復制到文本文件,保存為pullAllPic.bat,直接運行即可更新資源。
4. 資源壓縮
需求描述:為了減小apk體積,需壓縮資源圖片。
壓縮方法:
方法一:使用www.tinypng.com網站壓縮,需上傳、下載、解壓,存在泄漏風險。
方法二:使用PngYu拖動圖片文件夾壓縮,但仍需手動操作。PngYu使用pngquant.exe進行壓縮。
利用腳本直接調用pngquant.exe壓縮,關鍵代碼如下:
echo “開始處理…”
for /R %%i in (123*.png) do (
pngquant -f –ext .png –quality 80-80 “%%i”
)
pause
80這個參數經過驗證,不失真且壓縮率高。發布apk前雙擊批處理即可完成資源壓縮。
5. Monkey測試
需求描述:使用adb的monkey命令進行隨機事件測試,測試項目穩定性。要求連續48小時monkey不出現閃退和ANR,測試后將結果拷貝到服務器。
使用腳本:腳本可自動化此過程。腳本如下:
@echo off
adb shell monkey -p com.example.test -vvv 100000 >test.txt
copy test.txt 92.168.100.230個人文件monkey
pause
運行10萬次monkey,完成后將結果拷貝到服務器。需要測試時,雙擊運行腳本即可。
三、自定義腳本控制臺
將上述腳本整合,定義自定義腳本控制臺:
步驟一:在項目根目錄新建scripts文件夾,將腳本放入,分別命名為updateRes.bat(更新資源)、zipRes.bat(壓縮資源)、unitTest.bat(單元測試)、runMonkey.bat(Monkey測試)。注意調整相對路徑。
步驟二:定義與項目名稱相同的批處理,如TestProject.bat,用于調度其他批處理。代碼如下:
@echo off
if “%1″==”updateRes” call updateRes.bat goto END
if “%1″==”zipRes” call zipRes.bat goto END
if “%1″==”runMonkey” call runMonkey.bat goto END
if “%1″==”unitTest” call unitTest.bat goto END
echo wrong param
:END
pause
步驟三:將scripts文件夾添加到系統環境變量中。
使用:在任何地方打開命令行,輸入TestProject updateRes即可更新資源,其他操作類似。
結語
我們的目標是實現項目的一鍵測試、一鍵部署、一鍵發布,讓開發者專注于業務邏輯。批處理文件也是文檔,新人可通過查看腳本了解項目工作流程。
以上只是簡單應用,還有更多需求可通過腳本實現。工作中遇到重復任務時,應考慮使用工具自動化,提升效率。
小貼士
本文版權歸Open軟件開發小組所有,如需轉載請聯系主編申請授權。