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嵌入式开发来说,这种方法还是非常实用的, 可以大大加快测试和开发速度。

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