Android | setProp配合代碼, 大大加快測試

1240

-- 簡書作者 謝恩銘 轉載請註明出處

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
1240

設置另一個值filter length:

setprop filter 100
getprop filter
1240

我們在Logcat裏打印出來的值也可以驗證我們的設置:

1240

這樣, 你就只要一次燒寫, 之後這兩個值完全可以通過命令行來實時修改, 豈不快哉~

對於Android嵌入式開發來說,這種方法還是非常實用的, 可以大大加快測試和開發速度。

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