您的位置:首页 > 其它

如何阅读源码,如何提高阅读源码的效率

2014-06-02 11:50 561 查看
就我自己阅读安卓源码的经验,本人研究过 settings,launcher,Sysupdate ,framework /services ,recovery的部分源码,并且成功修改google留下来的bug.

如果就是熟悉代码,不带问题的去看,看的会比较累,但是仍然是有方法可以借鉴的,其实这个方法,也是生活经验得来的,大家都会的。

就是从整体到局部,由总而分。

比如:你想了解recovery的代码,就应该先了解这个Recovery的运作流程,网上有很多人总结了,总概括图,先有个大概的了解;

第二步,再寻找更详细的说明资料,把更为具体的方法也了解一下。

第三步,去看源码,看源码的时候,注意,也是先把所有的方法名看一下,并且做下笔记,然后才仔细的一个模块一个模块的看源码。跳跃着看源码,千万不要从上到下去看,一个 类上万行代码,全部看下来,头都大了,并且混乱。

如果带着问题去看源码,那效率会更高,大家都知道怎么去找源码,找相关的方法来看。

推荐工具:SouceInsight ,eclipse, UE,NOTEPAD++

关键:一次就看一个点,别贪多。要有一定的基础,别像我这样,遇到一个函数又去百度,一个模块看了2个月才熟悉,才能修改。

以下是网友推荐的好方法:

1-----------------------------------------------------------------------------

每个人看源码有他自己的方式!

如果为了读源码而去读源码那么我觉得你会非常痛苦, 因为可能你是没有目的的去读! 一个类少则几百,多的几千行, 看下去要死人的!

在你遇到某些问题需要跟源码去解决的时候,源码里面去翻你需要的那部分,这样读起来会比较轻松点, 每次遇到问题找一部分, 而且同5L说的,每次钻一个问题就钻深一点! 当然找到需要的源码是要对源码的结构很了解的!

2-----------------------------------------------------------------------------

先要搞清楚这个类是干什么用的,

然后搞清楚类里面的方法是干什么用的。

提出问题,比如说这个方法是如何实现、这个类的某个功能是如何实现的、构造方法为什么要这样写之类的。

然后带着问题去寻找答案。

找到答案后再提出新的问题~

我看代码的方式就是这样的

3-----------------------------------------------------------------------------

方法:

1.先了解业务;

2.熟悉需求文档和文档;如无文档则先熟悉系统的功能和业务流程;

3.掌握开发的技术;

4.看代码的同时运行系统的相关功能。

4-----------------------------------------------------------------------------

要想快速并高效地阅读源码,一定要有好方法,不然看着会挺费劲,当然,用什么方法取决于具体的情况。我就把自己总结的方法给大家show一下,互相交流交流:

1、一边阅读代码一边写注释。这是我用过的最好的方法,对代码理解得更深入,看一些重要代码或者特别难懂的代码时挺有用。更何况,注释也是一种文档嘛。

2、一边阅读代码一边绘制UML。这个方法适用于类之间的关系较复杂和调用层次较深的情况,我一般都是先绘制顺序图,然后为顺序图中的类绘制关系图。

3、通过Debug来跟踪程序的主要执行过程,这样就可以分清主次了,阅读的时候更有针对性。

4、类的快速阅读。先弄清楚它在继承链中的位置,看看它的内部状态,也就是成员变量,一般来说,类的对外接口都是对成员变量的访问、加工、代理等,然后看看它的对外接口,也就是公有成员函数,识别核心的一个或多个函数,这时候你应该可以大概了解这个类的职责或作用了。可能这个类是某个设计模式中的一个组成部分,所以,设计模式的掌握对代码的快速阅读也是很有帮助的。

5、带着问题去阅读。比如想了解android中的消息机制,那么看看Looper、Handler、MessegeQueue这几个类就可以了,其他的不要去看,要不然就跑题了。

下面列几个阅读源码时所处的情景,在特定场景下用哪些方法:

不太熟悉业务逻辑,还不是很清楚它是干啥的,可以用3、5。

代码量很大,有几十万行,甚至百万行,可以用2、3、5。

你无法看见程序的运行过程,比如没有用户界面,也有可能是无法运行的,可以用3、5。

设计复杂,用了大量的设计模式,调用链很深,可以用1、2、3、4、5。

时间有限,没有那么多时间让你看源码,可以用3、5。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: