Android 源码阅读技巧篇
文章来自https://www.yuque.com/beesx/beesandroid/oga2rc

⼀ 树⽴正确观念
Android是⼀个庞⼤的系统, Android Framework 只是对系统的⼀个封装,⾥⾯还牵扯到 JNI 、 C++ 、 Java 虚拟机、 Linux 系统内核、指令集等。⾯对如此庞⼤的系统,我们得有⼀定的章法去阅读源码,否则就会只⻅树⽊不⻅森林,陷⼊卷帙浩繁的细节与琐碎之中。
- 善于抓住主线和⽀线,主线指的就是Android 系统的各个模块,⽀线就是这个模块从上值下各个层级中的重要元素,逐⼀分析,直⾄探究到模块的最根源层。
- 不要去记录那些 API 调⽤链,绘制⼀个序列图理清思路即可, Android Framework中有很多复杂的 API 调⽤链,你去关注这些东⻄,⽤处不⼤。你需要学会的是跟踪调⽤链和梳理流程的 技巧,思考⼀下作者是怎么找到关键⼊⼝的,核⼼的实现在什么地⽅。
- 要善于思考,要多问为什么,⾯对⼀个模块,你要去思考这个模块解决了什么问题,这个问题的本质是什么,为什么这么解决,如果让我来写,我会怎么设计。事实上不管是是计算机还是 ⼿机,从CPU 、到内存、到操作系统、到应⽤层,看似纷繁复杂,但问题的本质⽆⾮就是这么⼏种:时间⽚怎么分配?线程 / 进程怎么调度?通信的机制是什么?只是在不同的场景下加了具体 的优化,但问题的本质没有改变,我们要善于抓住本质。
- 要善于去粗存精, Android Framework 也是⼈写的,有精华也有糟粕,并不是每⾏代码你都需要问个为什么,很多时候没有那么多为什么,只是当时那种情况下就那样设计了。但是 对于关键函数我们要去深究它的实现细节。
⼆ 掌握分析技巧
在分析类与类之间的关系,函数调⽤链等过程中,可以⾃⼰写⼀个简单的 APK ,包含点击、动画、界⾯ UI 等基本元素,这样可以让分析最简化。然后有两种⽅式:
-
配合 Google 的原⽣系统⼿机,断点跟踪调⽤流程。
-
Systrace 看整体流程以及系统关键节点的Trace , Method Trace 看函数调⽤栈(这样就不⽤去画⻓⻓的时序图了)。
笔者常⽤的是第⼆种,⽐较⽅便,也能⼀眼看⻅整体,不⾄于迷失在函数细节之中。关于Trace ⼯具的使⽤可以参考《 Android 跟踪⼯具 Systrace 》。