工模问题来源有以下几块:
1. 工厂模式apk(产线测试使用)
2. 工程模式apk(MTK开发,用于研发调试等)
3. Runin apk(产线老化测试)
4. StressTest apk
5. 大部分暗码功能(*#06#、*#8375#等)
6. 与底层密切相关的功能(恢复出厂设置标志位等)
下面分别对各个模块问题处理的方式做说明。
前文提到工模是广义上的工模,分了6块。实际上工模大多数指的是工厂模式。工厂模式代码路径如下:
packages/apps/FactoryKitTest
有时候工模也会代表工程模式。工程模式代码如下:
mediatek/packages/apps/EngineerMode
每台手机出厂前工厂都要对手机的器件做检测,工厂测试apk就是检测使用的工具。模块本身已经相对稳定。下面对常见的问题类型做一个说明。
由于工模涉及到对器件的检测,若器件本身就存在问题,工模是无法解决的。因此在出现问题时首先要确认问题是否工模问题。
比如喇叭无声的问题,可以在拨号界面拨打10086,然后打开免提,观察喇叭是否有声音发出。若也无声音发出,即可排除工模的问题。出现这种情况需要找驱动同事分析,问题确认后可将问题转出。
在确认是工模APK本身的问题后,就需要我们软件工程师解决问题。以下面一个案例来说明:
【问题描述】
进入工模后GPS测试不易通过
【操作步骤】
进入pcbatest—测试到版本测试—界面出现gps fail—下来通知栏—观察
【实际结果】
Gps图标处于关闭状态
【预期结果】
Gps图标处于打开状态
【复现概率】
1/5
按照gps测试的流程,是在进入工模后就要自动打开gps,然后对gps进行操作。若gps处于关闭状态则测试必然会fail。按照描述,目前存在gps概率性没打开的问题。可以初步判断为工模apk本身的问题。实际上,经过排查代码,确实发现的工模的一个漏洞。于是就有了问题分析和解决方法。
【问题分析】
工模在打开gps前会对gps的状态进行检查,若gps处于打开状态则不会做打开操作。Gps的状态是通过一个flag来确定。该flag状态与gps实际状态并不完全一致。
【解决方法】
修改flag设置相关代码,使其与gps当前状态完全一致。
不同的项目,硬件是不同的,同时驱动提供的接口也会有变化。这些差异和变化对上层的其他模块往往影响不大,但对工模却有一定的影响。
以889项目为例,在硬件上889相对于598增加副mic,由于889在的工模是从598上移植过来的,因此最初并没有副mic测试项。由于在生产时一定要确保每一个器件都检测到,因此需要修改工模,增加副mic测试项。(具体的增加方法是修改test_config_defaul.xml配置文件)
项目初期驱动也在不停的调试,驱动的修改也可能对工模造成影响。
以889项目光感为例。光感测试的原理是,由用户遮挡光感器件,系统在特定时间内检测到光感变化超过4次,及认为该项测试pass。
但是由于驱动的变化,光感器件的灵敏度被调低,导致了其值变化4次所需的时间变长。由于该项测试的条件是需要在特定时间内变化4次,因此驱动修改后该项测试极易失败。这种现象产线显然是无法接受的,因为严重影响了测试的效率。
解决方法是工模针对驱动的该项调整做修改,即将“变化4次”的条件改为“变化2次”,这样可以保证该项测试的成功率,进而不影响产线测试的效率。
随着生产的进行,产线和NPI会发现工模还有许多优化的空间。因此对对工模提出需求。提出这些需求的目的主要是提高产线效率和提高工模测试的准确性。由于这些属于需求类问题,因此优先级相对于bug类问题较低。产线提出这些需求后需要与研发端一起评估,若研发端认为该需求有导入的意义,就需要安排导入。
下面以一个案例来说明。
【需求描述】将T卡、SIM卡等测试整合到一个测试界面。
工模中的T卡、SIM卡等测试完全可以通过软件来判断。优化前的状态是这些测试分别都有单独的测试界面,需要人工点击pass或fail按钮来进入下一项。优化后的状态是这些测试项的测试结果集中显示在版本测试界面,用户一眼就可以看出哪些测试项fail,哪些测试项pass。很明显优化后的状态对产线的效率有提升。
下面以一个案例来说明。
【需求描述】在工模测试中增加防呆功能
工模中的部分测试项(LCD、speaker等)需要人工判断测试是否pass。比如LCD需要人观察屏幕是否有坏点;speaker需要人听喇叭是否有声音发出。还有部分测试项系统可以判断成功和失败。比如T卡、SIM卡、耳机是否已插入等。
防呆的意思就是若软件判断某项测试失败(T卡未插入等),或者某些测试项的前提条件未满足(耳机未插入等)就不允许该测试项通过。
这样做可以避免工人操作(点击pass按钮),导致本应fail的测试结果变为pass,进而导致不良品流入市场。
因此该类需求对产线的生产有重大的意义,需要导入。
上文提到过该apk的代码路径为:
mediatek/packages/apps/EngineerMode
该apk为MTK开发。该apk主要是供内部研发调试用。该apk上层使用的较少,驱动和硬件同事使用的较多。上层可以通过该apk中的一个选项调出mtklogger,以抓取log。然而mtklogger是一个独立的apk,mtk并没有提供我们代码,EngineerMode只提供mtklogger一个入口。
目前该模块的问题主要分为:网络设置相关问题以及硬件报出的问题。
该类问题的来源主要是移动的需求。若是修改界面显示上的问题可以评估其风险并自行修改。若修改涉及到与modem模块的交互,建议提交e-servcice申请patch。因为modem模块是手机中的核心的模块,同时也很复杂,修改的风险需要做充分的评估。
以之前硬件报出的某个电压显示异常为例。正常显示的结果是某个器件的电压值,问题的现状为该电压值显示了2遍。硬件同事不确定该问题是显示异常还是电压本事出现了异常,因此需要该模块负责人确认。
由于上层同事对该模块中显示的各项数据代表的含义并不理解,同时电压的显示也涉及到底层诸多借口,高效的处理方式是提交e-service,由MTK来判断问题的原因。
Runin apk是工厂在做老化测试时使用的工具。一轮老化测试的周期一般为2小时。其中包括播放视频、播放音频和读写内存等操作。该apk经过不断的完善,该apk已趋于稳定,问题报的也较少。下面以一个597的案例来进行说明:
【问题描述】在做老化测试时出现关机
【复现步骤】做老化测试--观察
【实际结果】测试中手机关机
【预期结果】不出现关机
【问题概率】30%
【备 注】已提供log
经过与工厂沟通,出现问题的机器重测依然可以复现问题。经过分析log,发现底层温度超过了59度。而上层的机制是温度超过59度,手机就会关机。
由于该apk是之前项目使用的相同,然而之前项目手机温度却不会达到59度,因此可以确定是不同机器的差异导致的。
由于问题可以稳定复现,经过硬件可以驱动同事的分析,温度达到59度的问题很难解决,因此采用软件解决的方案,即降低runin的标准,减少cpu测试的时间。
由于runin中cpu的测试时间有明确的要求,因此采用软件解决的方式实际上是违背要求的,所以软件修改时一定要项PM做说明。
该apk是要求内部做压力测试时使用的apk。该apk相关问题的处理工作已经比较熟悉。在此再次做一下简单的说明。
该apk需求提出时,需求本身比较模糊。各项的实现方式也与实际情况有较大的出入。因次前期时间主要花在明确需求上。这个过程需要测试同事一起评估。
由于该apk是内部使用,同时并不局限与某个项目,因此该apk的相关问题的优先级可以放低,优先处理项目上的问题。
目前工模相关的主要暗码功能如下:
序号 |
指令 |
功能 |
1 |
####1111# |
启动工厂模式apk |
2 |
*#*#3646633#*#* |
启动工程模式apk |
3 |
####3333# |
启动mtklog |
4 |
####3300# |
同*#*#3646633#*#* |
5 |
*#06# |
查看imei号 |
6 |
####2222# |
查看sn号 |
7 |
####7777# |
恢复出厂设置 |
8 |
*#8375# |
查询版本号 |
9 |
####5993# |
查询外部版本号 |
10 |
*#6688# |
启动runin |
暗码的添加主要是修改以下2个文件:
889:lenovo/framewrok/../../SpecialCharSequenceProxy.java
598:package/apps/Dialer/../../ SpecialCharSequenceProxy.java
目前与底层密切相关的功能主要有2部分:恢复出厂设置标志位功能和组合键进工模功能。
恢复出厂设置标志为功能的原理是向NV中写入标志位,然后开机通过判断标志位的值来决定是否恢复出厂设置。工具端也是通过修改标志位的值来做恢复出厂设置操作的。
组合键进工模是在组合键按下后向驱动的TP文件中写入一个值,开机后通过判断写入的值来启动工模。
这两个功能是移植bd2的功能。代码提交记录可以通过git查看。由于涉及到工具端和驱动,若发现问题可以向相关同事咨询。也可以咨询bd2的同事。由于这两个功能改动文件较多,建议后续有时间仔细研究一下代码流程,以便出现问题能快速解决。
展讯工模目录如下:
huaqin/../../package/apps/ValidationTools2/
下面主要介绍一下与MTK工模的区别。
该工模也是一个独立的apk,不过由展讯开发。因此若是在维护中遇到平台行问题,经过分析依然没有思路的话可以提交展讯cq。
展讯开发的工模是面向其所有的客户,之后又添加了许多内部的需求,如防呆、自动跳转等。这部分出现的问题需要华勤内部解决。
若要判断某个发问题是否是由于研发自己修改而导致的,可以使用展讯原始单独代码编译apk,然后push到手机中,看问题是否还存在。
展讯代码路径如下:
package/apps/ValidationTools2/