Android | setProp配合代码, 大大加快测试

-- 作者 谢恩铭 转载请注明出处

内容简介


  1. 前言
  2. 解决

1. 前言


最近, 在 Android 开发中遇到一个问题, 有个 app 需要每次烧写(比如略修改一些代码, 就要重新编译, 再烧录到 Android 手机里)。

这样, 对于测试一些代码的改动就不是很方便了, 比如我要修改 Android 底层 C++ 代码中的两个变量, 这两个都可以取整数值。

其中一个是 echo_delay, 另一个是 filter_length。

我要测试出这两个数值的最佳组合,需要测试很多次,也就是要修改、编译、烧写、启动很多次,这工作量那是相当大呀。

2. 解决


有没有什么办法可以大大减轻工作量呢?必须有!

自己找了一下:

在 Android 开发中,你可以用 USB 线连接 Android 设备和电脑,进入 adb 模式(用 adb shell),然后用各种命令来操作你的手机。

Android 系统有不少属性,例如:

ro.product.model

是对应设备的型号。如果我在 Samsung 的 S5 手机上,它的值是

SM-G900F

这些系统属性是在 /system/build.prop 这个文件中,需要你有 Root 权限才能修改。

我们可以用 cat 命令来打印出 /system/build.prop 这个文件的内容:

cat /system/build.prop

属性很多,我们只截屏了开头的一部分。

可以看到属性中有很多是以 ro 开头的,例如:

ro.product.model
ro.build.id
ro.product.board

等等。

ro 表示 Read Only,是英语「只读」的意思,表示只能读取,不能修改。

当然了,这些 ro 开头的属性也不是不能修改,你可以通过一些方式来修改。修改的后果自负。
你可以自行 Google 搜索,或者参考这篇 StackOverFlow 的文章,或者这篇文章,不过不在本课讨论之列。

adb 的众多命令中有一个命令叫做 setprop,是 set property(设置属性)的简写,用于为系统设置属性的值,就是类似键值对的概念。

setprop 命令还可以用于设置自定义的属性。你可以随便取什么名字的属性,例如 hostname,可以用如下方法来设置它的值:

setprop 属性名称 属性的值

既然有 setprop 命令,Android 也提供了 getprop 命令,用于显示属性的值。

使用方法如下:

getprop 属性名称

用 setprop 设置了设备的属性之后,在 Android 的代码中就可以获取到属性的值。

例如我们来修改系统的一个属性值,名叫 media.enable-commonsource(这个属性值不是以 ro 开头,不是只读,可以修改),它的默认值是 true。我们可以用

setprop media.enable-commonsource false

把它的值改为 false。然后用 getprop 来查看它新的值:

getprop media.enable-commonsource

可以看到,media.enable-commonsource 已经被我们从 true 改成了 false。

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


我是谢恩铭,在巴黎奋斗的软件工程师。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,446评论 25 707
  • 其实投资一只股票,投资的是上市公司大股东,决定公司未来的发展绝大部分因素一定是由大股东主导的,我相信如果没有马云的...
    心学投资阅读 251评论 0 0
  • 巨星毛不易,巨婴夏功夫 巨星毛不易的几首歌,都写到了我的心坎里,唱着唱着都会流眼泪,尤其是毛不易那首《像我这样的人...
    夏功夫阅读 697评论 1 2
  • 上下文:项目中需要每天将前一天的搜索日志、视频点击量等文件处理生成联想词库的数据源,于是写了个简单的 shell ...
    酒桶九筒阅读 1,237评论 0 0
  • 第一次约会去看了电影星球大战3,今天是第二次约会,去了他家附近的郊外踏青,走在满是麦田的田间,绿油油的摇...
    花冰玉阅读 336评论 0 0