腳本在安卓項目開發中的一些簡單應用

前言

在日常項目開發中,除了編寫業務邏輯外,還需處理一些瑣事,如資源更新、單元測試和資源壓縮等。本文旨在介紹如何通過腳本處理這些瑣事,讓開發者能夠專注于業務開發。

一、腳本的定義

腳本可以簡單理解為一條條可見的文字命令(如可通過記事本查看、編輯)。腳本程序在執行時,由系統解釋器逐條翻譯成機器可識別的指令,并按順序執行。由于腳本執行時需要額外的翻譯過程,其效率略低于二進制程序。

二、使用場景示例

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();

int len = strlen(buff);

// 處理 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分辨率的新設備。由于沒有新設備樣機,無法直接測試。

具體步驟:

  1. 修改/system/build.prop文件中的ro.sf.lcd_density為320。
  2. 進入adb shell,輸入“su”并回車。
  3. 輸入“wm size 720×1280”(若無效,嘗試“am display-size 720×1280”)并回車。
  4. 重啟手機,設置生效,屏幕降為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文件夾。以圖片為例:

常規做法:視覺設計師將圖片放到服務器,軟件開發人員從服務器拷貝到工程資源文件夾,可能遇到:

  1. 圖片名稱為中文,需改為英文。
  2. 文件多時,更新定位麻煩,常用全部替換。

使用腳本: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軟件開發小組所有,如需轉載請聯系主編申請授權。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享