现在的位置: 首页 > 综合 > 正文

工作日记—android lockscreen.java 在lock状态下显示charing和alarm

2013年03月06日 ⁄ 综合 ⁄ 共 4782字 ⁄ 字号 评论关闭

这算是从事android开发独立解决的第二个bug。用了大概有1天半时间。

根据以前的经验,这是一个较简单的问题,关键是定位出显示charging的条件。

下面分析一下自己的工作过程,以及时间耗用比较多的地方:

一。思维和工作过程

1. 根据以前featurephone的经验,此类界面问题较简单,可能有两种情况,一种是条件不满足,没进行显示;一种是显示了,但被其他控件挡住了;

2 先利用sourceinsight的搜索功能,通过字串定位到lockscreen.java 的mcharging 这个变量

3. 然后查看该变量刷新到屏幕的地方为 updatestatusline()这个方法

4. 之后有3个方法可以去了解其中设置,显示的逻辑,分别是

     4.1 看代码

     4.2  通过DMSS看logcat,即打trace

     4.3 通过eclipse的断点跟踪应用

实际中,我是综合了上述3种方法,主要看代码和打断点。

5. 在基本弄清楚代码逻辑后,我修改了lockscreen.java里的status enum,将其中缺省的simmissing, simmissinglock, simpuklock, simclose几个状态的缺省值改为true,

经过验证,simmissing状态下问题解决了。其他状态由于比较难以复现,所以未作验证。

6. 之后就是思考是否解决方案完整,主要是考虑了sim卡的几个其他状态,以及在slidelockscreen状态下是否也要考虑此问题

7. 添加注释,提交代码

8. 写技术总结,回顾思维过程和工作瓶颈, 以争取后续避免出现类似的思维和技术瓶颈。

 

二。瓶颈分析

1.

行为:./mk -t mm frameworks/base/policy

目的:生成 policy这个apk,然后push 到手机上进行验证

出现的问题:打出的log最后显示的是 out/target/product/huaqin75cu_gb2/data/app/FrameworkPolicyTests.apk,当我将该 ***tests.apk push到手机后,我的修改并未生效;后来我问其他人(郑,金),他们告诉我这个tests.apk是不对。让我重新修改lockscreen.java,重新编;任告诉我她push的是一个叫android.policy.jar的包,并且push后要重启手机。后来我将log发给金,他一眼就看出来其实 Install:
out/target/product/huaqin75cu_gb2/system/framework/android.policy.jar 是有的,在log的中间。

log如下:

==================================================================================

No private recovery resources for TARGET_DEVICE huaqin75cu_gb2
make[1]: 正在进入目录 `/home/yaoyangyong/workbench/mt6575'
target Java: android.policy (out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/classes)
注意:某些输入文件使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
注意:frameworks/base/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
Copying: out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/classes.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/noproguard.classes.jar
target Dex: android.policy
Copying: out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/noproguard.classes.dex
target Jar: android.policy (out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/javalib.jar)
 'out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates//classes.dex' as 'classes.dex'...
Install: out/target/product/huaqin75cu_gb2/system/framework/android.policy.jar                                                                         //注意这一行!!
target Java: FrameworkPolicyTests (out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/classes)
Copying: out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/classes.jar
Copying: out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/noproguard.classes.jar
target Dex: FrameworkPolicyTests
Copying: out/target/common/obj/APPS/FrameworkPolicyTests_intermediates/noproguard.classes.dex
target Package: FrameworkPolicyTests (out/target/product/huaqin75cu_gb2/obj/APPS/FrameworkPolicyTests_intermediates/package.apk)
 'out/target/common/obj/APPS/FrameworkPolicyTests_intermediates//classes.dex' as 'classes.dex'...
Install: out/target/product/huaqin75cu_gb2/data/app/FrameworkPolicyTests.apk                                                                       //错认为的一行
make[1]:正在离开目录 `/home/yaoyangyong/workbench/mt6575'

==================================================================================

分析:

【细心】有时候细心是体现在观察的,这个log我没有很仔细的看过,漏了中间的重要的一行,这一行提示我可以push这个包;当任告诉我说是一个叫andorid.policy什么的时候,我没有将它记下来。大脑:“嗯,知道了,大概一个这个名字的东西”。作为一个研究人员的脑子,最好能辨识重要的信息,并完整记录

【判断】log的最上面有一些其他类似warning的信息,我到网络上找了资料,说明这个可能是一些接口不够新引起的。应该和我的遇到的困难无关

【惰性】当时有想到out目录下去搜android.policy.jar 这个包,要是搜的话,就可以找到了;但是没有去做,而是选择去问有经验的同事

【着急】惰性经常也是由于着急引起的。遇到问题不要急,不要慌,想想自己还有那些action可以去试?!

【创造】如果知道了我需要的是android.policy.jar这个包,而又仔细查看了log,那我很有可能会联想到这句log就是我的答案,所以有时候创造是基于细心,信息的。最后我意识到了原来一次编译也是可以出2个包的,而第二个包是测试用的。

由于以上思维或素质不足,所以这个问题最后结果是我发log给老同事,他一眼就发现了答案。

 

2.

现象:纠结于3种调试方法中

3种方法的评述:看代码是最熟悉简单的一种方法,由于代码逻辑的复杂性,完全靠这个方法是较困难的,需要对代码有相当的熟悉程度,需要具备较强的思维能力;断点跟踪可以说是最没技术含量的调试方法,因为手机会完全忠实按实际情况执行,有足够的细节,但也容易陷入到细节,不能从宏观整体的角度进行思考。打log介于两者之间吧。

分析:

【策略】这次调试基本上使用了看代码,跟断点2种方法。2种方法交替使用本身也是一个必然的过程。对某些关键的变量,条件,我们可以依靠断点进行自己的了解;而当我们陷入到细节而迷惑时,又有必要通过纵览代码来理清思路,抓住重点。

【图表】不要怕麻烦,不要贪快,我们应该耐心把一些重要信息,重要的逻辑关系用图表整理出来;不要让自己的大脑负担太重。看看自己收集的信息,静下心来进行一些创造性的思考。

 

3.

现象: 重新new了一次,将eclipse的代码和下载在手机里的代码进行同步,这个占用了大概1个多小时

分析:

【策略】欲速则不达,老老实实的把基本前提先做好吧。当然,这个做成还是可以看看代码或做一些其他事情的。

 

4.

现象:对一些技术手段和知识不熟悉,如

不知道哪个进程对应lockscreen ---逐个试,问老员工

不知道如何设置条件断点,不熟悉eclipse里的断点跟踪 --- 查网络,多联系

不知道java的enum语法  ----查网络,问老员工

不知道如何高效编译,push apk --- 问老员工

分析:

【行动力】不要纠结,不要烦躁;你只能采取行为:做个大致的计划(判断),变化时进行调整,马上行动;烦了累了,放松一下吧。

【知识】好记性不如烂笔头,勤于积累,善于总结。

 

好了,这个问题就分析到这么多,期待经过这几个月技术工作的磨砺和反省,以上思维和素质能有较大的改进。

 

 

抱歉!评论已关闭.