-- 簡書作者 謝恩銘 轉載請註明出處
setProp配合代碼, 大大加快測試
最近, 在Android開發中遇到一個問題, 有個App需要每次燒寫(比如略修改一些代碼, 就要重新編譯, 再燒錄到Android手機裏)。
這樣, 對於測試一些代碼的改動就不是很方便了, 比如我要修改Android底層C++代碼中的兩個變量, 這兩個都可以取整數值。
其中一個是echo_delay, 另一個是filter_length。
我要測試出這兩個數值的最佳組合,需要測試很多次,也就是要修改、編譯、燒寫、啓動很多次,這工作量那是相當大呀。
有沒有什麼辦法可以大大減輕工作量呢?必須有!
自己找了一下:
在Android開發中,你可以用USB線連接Android設備和電腦,進入adb模式(用adb shell),然後用各種命令來操作你的手機。
衆多命令中有一個命令叫做 setprop,是set property(設置屬性)的簡寫,用於爲系統設置屬性的值,就是類似鍵值對的概念。
你可以用setprop命令來設置系統的固有屬性,例如
ro.product.model
是對應設備的型號。如果我在Samsung的A3手機上,它的值是
SM-A300FU
setprop命令還可以用於設置自定義的屬性。你可以隨便取什麼名字的屬性,例如hostname,可以用如下方法來設置它的值:
setprop 屬性名稱 屬性的值
既然有setprop命令,Android也提供了getprop命令,用於顯示屬性的值。
使用方法如下:
getprop 屬性名稱
用setprop設置了設備的屬性之後,在Android的代碼中就可以獲取到屬性的值。
用這個原理,我們只要用setprop命令修改我們的兩個變量的取值,就立即生效了。很方便吧!
首先你可以在Java代碼中寫一個你自己的readProp函數,用於根據屬性的名稱來獲取屬性的值,可以類似如下:
private int readProp(String prop) {
try {
Process process = Runtime.getRuntime().exec("getprop " + prop);
InputStreamReader ir = new InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader(ir);
return Integer.parseInt(input.readLine());
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
}
在你的代碼中調用
int delay = readProp("delay");
int filter = readProp("filter");
Log.i(TAG, "Echo_delay = " + delay + ", filter_length = " + filter);
然後把代碼編譯,燒寫到Android設備中,再用setprop命令開始測試。
例如設置echo delay:
setprop delay 250
可以用getprop命令看看設置的值是否正確:
getprop delay
設置另一個值filter length:
setprop filter 100
getprop filter
我們在Logcat裏打印出來的值也可以驗證我們的設置:
這樣, 你就只要一次燒寫, 之後這兩個值完全可以通過命令行來實時修改, 豈不快哉~
對於Android嵌入式開發來說,這種方法還是非常實用的, 可以大大加快測試和開發速度。