Android是一个庞大的系统,Android Framework只是对系统的- -个封装,里面还牵扯到JNI、C++、Java虚拟机、Linux系统内核、 指令集等。面对如此庞大的系统,我们得有-定的章法去阅读源码,否则就会只见树木不见森林,陷入卷帙浩繁的细节与琐碎之中。

一、

善于抓住主线和支线,主线指的就是Android系统的各个模块,支线就是这个模块从上值下各个层级中的重要元素,逐- -分析,直至探究到模块的最根源层。

二、

不要去记录那些API调用链,绘制一个序列图理清思路即可,Android Framework中有很多复杂的API调用链,你去关注这些东西,用处不大。你需要学会的是跟踪调用链和梳理流程的技巧,思考一下作者是怎么找到关键入口的,核心的实现在什么地方。要善于思考,要多问为什么,面对一个模块,你要去思考这个模块解决了什么问题,这个问题的本质是什么,为什么这么解决,如果让我来写,我会怎么设计。事实上不管是是计算机还是手机,从CPU、到内存、到操作系统、到应用层,看似纷繁复杂,但问题的本质无非就是这么几种:时间片怎么分配?线程/进程怎么调度?通信的机制是什么?只是在不同的场景下加了具体的优化,但问题的本质没有改变,我们要善于抓住本质。

三、

要善于去粗存精,Android Framework也是人写的,有精华也有糟粕,并不是每行代码你都需要问个为什么,很多时候没有那么多为什么,只是当时那种情况下就那样设计了。但是对于关键函数我们要去深究它的实现细节。

在分析类与类之间的关系,函数调用链等过程中,可以自己写一个简单的APK,包含点击、动画、界面Ul等基本元素,这样可以让分析最简化。然后有两种方式:

  • 配合Google的原生系统手机,断点跟踪调用流程。
  • Systrace看整体流程以及系统关键节点的Trace, Method Trace看函数调用栈(这样就不用去画长长的时序图了)。

说了这么多技巧性的东西,有干货分享吗?有的,我这边花了一个月熬夜整理了一份《Android Framework精编内核解析》。部分知识章节发布到了在知乎上已经收获了1000+的点赞量,今天在这里拿出来分享给大家。

关于Android Framework源码阅读——阿里大佬分享的核心经验_android

第一章:深入解析Binder

Binder机制作为进程间通信的一种手段,基本上贯穿了andorid框架层的全部。所以首先必须要搞懂的Android Binder的基本通信机制。

本章知识点

  • Binder 系列—开篇
  • Binder Driver 初探
  • Binder Driver 再探
  • Binder 启动 ServiceManager
  • 获取 ServiceManager
  • 注册服务(addService)
  • 获取服务(getService)
  • Framework 层分析
  • 如何使用 Binder
  • 如何使用 AIDL
  • Binder 总结
  • Binder 面试题全解析
  • ……

关于Android Framework源码阅读——阿里大佬分享的核心经验_Android_02

第二章:深入解析Handler

本章先宏观理论分析与 Message 源码分析,再到MessageQueue 的源码分析,Looper 的源码分析,handler 的源码分析,Handler 机制实现原理总结。最后还整理Handler 所有面试题大全解析。

关于Android Framework源码阅读——阿里大佬分享的核心经验_Android_03

第三章:Dalvik VM 进程系统

Andorid系统启动、init 进程、Zygote、SystemServer启动流程、 应用程序的创建使用,Activity的创建、销毁 Handler和Looper。

关于Android Framework源码阅读——阿里大佬分享的核心经验_android_04

第四章 深入解析 WMS

窗口管理框架 系统动画框架 View的工作原理。

关于Android Framework源码阅读——阿里大佬分享的核心经验_API_05

第五章 PackagerManagerService

包管理服务,资源管理相关类

关于Android Framework源码阅读——阿里大佬分享的核心经验_源码分析_06