前言
后续不会写有关Phone相关的问题了,借着上篇的尾巴,小结下之前在工作中的解决bug的经验吧。
这是很现实的问题,搞这个模块的,其实涉及的东西很多,流程,界面等,那对于新人该如何下手呢?
带着问题去看代码,比你自己瞎抓好。
测试同学上报的问题,肯定是从界面上入手,执行了哪些操作,发生了什么异常结果。要想快速的定位问题,熟悉代码是前提,代码该如何熟悉。可以分几个层次:
解决问题步骤
模块整体结构
分了哪几个层,特别是4.4开始,分层很多,这几个层次是什么关系以及有什么作用。这一步可以参考网上已有的分析,快速掌握。
这个不是解决问题必经的步骤,但是为了更好的分析解决问题。
界面布局
InCallUI的布局很有意思,不同的界面,不一样的Fragment(废话), 使用了MVP的模式。所以要弄清楚UI,这样可以解决一部分UI小bug。以及后续添加新的功能。
MVP模式与MVC模式
关键流程
这个也是重点,bug分析是按照流程来的,流程不熟,即使改了也可能产生其他问题。关键流程有:
1) MT / MO流程 也就是来电/拨号的流程
2) 几个关键进程的初始化
参考开始的 Phone模块后续文章说明
Call Settings
这部分内容基本是在TeleServeice目录中,属于phone进程。
设置的内容就比较多了,基本设置,通话设置, 黑名单设置,开关P-Sensor设置,FDN设置,单双卡设置。比如高通平台的,还把双卡设置独立成自己的apk,放在vendor/qcom/….目录下面。
这里面很扯的是,不知是从4.4开始,在FDN输入框中的光标是在前面的,测试会报bug,要求光标移动到输入字符后面。好,那就修改,因为Android原生就是这么整的, 那就修改TextView中的光标选取位置,一改百改。到后来 导致 CTS有一项过不了。
真是坑爹啊,那就只能在上层使用的地方修改。其实,这个就不应该是个问题。
查看log
这个又是一个累活, 先说应该看哪些log吧。
一般查看main、system, events, radio 。(废话)
涉及到通话流程的,如电话Dial失败, 自动挂断,掉网络的, 这个radio最有用。直接查看 radio中的 如 >DIAL 看这个指令反馈的是什么,正常还是异常。如果RILJ得到的都是错误的,那很有可能是modem层有问题,或是网络有问题。这个需要抓取QXDM(高通平台)
涉及到界面的,特别是新手,不熟悉模块的代码,以及布局,又想快速的定位是在哪个界面。
推荐使用sdk中的工具 monitor.bat -> Hierarchy View, 都是厂商的工程机开发,非常方便。注意,出厂的手机是无法抓取的,有的厂商手机即使root了,也不能看到Hierarchy View
monitor.bat 目录是在\sdk\tools, Window -> open Perspective -> Hierarchy View
分工协作
跟小组内部讨论,现在强调分工,你不可能面面俱到,特别是短时间内。所以,运用团队的力量,一起攻关。有人对协议熟悉,有人对界面熟悉,有人对流程熟悉。要知道MTK为什么支持力度那么好,给e-Service提交问题,很快得到回复,并且能及时解决。
那是因为他们专业,分工明确,过bug就像流水线一样,每人负责自己的那一小片领域,一看就知道问题所在点,快速解决。
提问的技巧
见过新人提交给支持厂商的bug,简直用惜墨如金来形容。导致的结果是 后续还得不断的补充材料。
一个好的提问,应该有如下内容:
1) 问题发生的版本号,平台相关的codebase号,不论是MTK还是Qcom都需要。
2) 问题的详细描述,是否必现问题
3) 提供全面的Log,根据厂商不一样,对应抓取log的工具不一样。以及关键的时间点。
4) 你对问题的分析,以及疑问点,并在case单子中告知具体的Log位置
5) 是否有视频, 复杂些的又能复现的问题,最好给出视频,并告知关键的视频时间点。
Phone模块技术点分类
感谢图形原创作者,这里借用下,还可以细分,而且还可以添加高通平台自有的内容。