![](https://i-blog.csdnimg.cn/blog_migrate/f514c1717bdd6bc6c3d544f8d6200799.webp?x-image-process=image/format,png/w/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
![](https://i-blog.csdnimg.cn/blog_migrate/3368f5f02720a702da809c0da9fc410c.webp?x-image-process=image/format,png/w/1240)
设置另一个值filter length:
setprop filter 100
getprop filter
![](https://i-blog.csdnimg.cn/blog_migrate/1d29cf4c05b6ec10150e036eda71e4cb.webp?x-image-process=image/format,png/w/1240)
我们在Logcat里打印出来的值也可以验证我们的设置:
![](https://i-blog.csdnimg.cn/blog_migrate/68bb0dce1c51312adbc1608afa09a2a0.webp?x-image-process=image/format,png/w/1240)
这样, 你就只要一次烧写, 之后这两个值完全可以通过命令行来实时修改, 岂不快哉~
对于Android嵌入式开发来说,这种方法还是非常实用的, 可以大大加快测试和开发速度。