Android FrameWork - 学习启动篇

11,085 阅读6分钟

首先明确一下前提条件:

  1. 有 C/C++ 基础,能够阅读 C/C++ 的代码;
  2. 有 Linux 系统内核基础;
  3. 有 Android 开发相关的工作经验(1-3年);
  4. 有 UML 建模基础。

如果大家是从事 Android 系统开发的,那么阅读系统源码是必修课程。如果想成为高级 App 开发工程师,那么阅读系统源码也是必修课程,只是这必修课程里面有选修内容,后面我想讲的就是必修课程里面的选修内容。如果你是刚刚入门,建议先打好基础,千万不要一上看来就看源码,如果大家没有 C/C++ 和 Linux 内核基础,需要看看我之前的文章,记住一定要循序渐进。

这里我们还是反复强调一下阅读源码的重要性,仅仅代表个人的一些观点和看法。我们在开发过程中遇到的 100% 问题都能通过源码分析解决,在 Buggly 上遇到的 100% 问题也能通过源码分析解决,能够帮我们彻底的做好性能优化,我们能从源码里面学到很多的设计思想和设计理念,能够做一些常人看似无法实现的功能,总之源码是我目前为止见过的最好的教学资料。

在真正开始学习 Android FrameWorker 前,我们先来了解一下 Android 的前世今生以及几个关键性的人物,希望能给我们一些启发。80年代有“大哥大”,90年代有诺基亚,到后来的 iOS 和 Android,今天回过头去看大概是 30 年左右差不多是人的半辈子。Android 系统一开始并不是直接由 Google 研发出来的,它的前生是 AndyRubin 创建的公司 Android 研发的,这个操作系统也因此和 Android 公司同名。Google 在2005年以4000万美元收购了刚建立22个月的高科技企业 Android,Android 的负责人兼 CEO AndyRubin 也随之成为 Google 的工程部副总裁,并继续进行 Android 项目的开发。2008年9月22号,第一款搭载 Android 操作系统的手机诞生,它就是 HTC Dream(T-Mobile G1),并于次日正式发布了 Android 1.0。2009年发布 Android 1.1,在 Google 内部被称为 “Petit four”,这是一种法式的甜点,后来以 Android 1.5 Cupcake ”(纸杯蛋糕)开始的版本都以甜点的方式命名版本,寓意是 Android 是美味、人见人爱的操作系统。另外 Google 设计师 Irina Blok 还设计了一个绿色的小机器人,作为 Android 的卡通形象,我来一张图大家感受一下:

图片来源于网络

Andy Rubin:Android 之父也就是 Android 的创始人,1989年进入苹果工作,1997年去了微软,谷歌于 2005 年收购了 Android ,在中国这就相当于 BAT 都干过。 Dianne Hackborn:原来 Android framework 的大部分都是她写的,我们没有看错是个女汉子,Android 中最核心的驱动 Binder 就是她写的,关于 Binder 驱动其实也有它的前世今生,这里我就不用文字叙述了。

接下来进入正题,为了能让大家整体上大致了解 Android 系统涉及的知识层面,我从官方找来了一张详细的架构图,从我们最熟悉开始往下看依次分为 App 应用层、Java 框架层、Android 运行时环境、系统 Native 库、HAL 和 Linux 内核这5层架构。

图片来源 google developer

从上面这张图来看,想要全面学习 Android 系统,似乎并不简单而且有些难度,但我们作为应用开发者来讲,如果只是了解一些选修内容还是没那么难,虽然 Android 系统非常庞大且错综复杂,但整体架构设计还是很清晰的。后面我们大概从以下几个方面入手:

  1. 阅读 Java 和 C/C++ 层的代码;(选修内容)
  2. 学习 Frameworke 的设计思想;
  3. 带着疑问去分析一些开发中常见的问题;
  4. 动手实战一些开发中常用的 SDK。

最后再啰嗦一下,大家需要下载一份 6.0 的系统源码,我在看源码的同时,大家跟着我一起打开源码文件,因为我贴出来的代码是经过筛选的,如果大家只是走马观花那没有任何意义,我们学不到什么东西。还需准备一个翻墙软件,当我们需要开发一些高级功能时,我们需要去阅读各个版本之间的差异,比如我们后面要动手实战一些开发中常用的 SDK,举个例子动态修复线上 so 库文件,那这时候我们就需要阅读 5.0 、6.0、7.0、8.0 的源码了,如果都下载下来那大家电脑装不下,那时我们就只能在线上看了。整个过程肯定会有一些痛苦,因为我就是这么过来的,但只要能熬过去便能更上一层楼。

01. Android Framework - 学习启动篇

02. Android Framework - 开机启动 Init 进程

03. Android Framework - 开机启动 Zygote 进程

04. Android Framework - 开机启动 SystemServer 进程

05. Android Binder 驱动 - Media 服务的添加过程

06. Android Binder 驱动 - 启动 ServiceManager 进程

07. Android Binder 驱动 - 内核驱动层源码分析

08. Android Binder 驱动 - 从驱动层来分析服务的添加过程

09. Android Binder 驱动 - 从 Java 层来跟踪服务的查找过程

  1. Android Binder 驱动 - 彻底理解驱动层的通信流程

11. Android 系统服务 - AMS 的启动过程

12. Android 系统服务 - PMS 的启动过程

  1. Android 系统应用 - 普通应用的安装过程

14. Android 系统应用 - Launcher 的启动过程

15. Android 四大组件 - 进程的 fork 创建过程

  1. Android 四大组件 - startActivity 的启动过程

  2. Android 四大组件 - startService 与 bindService

18. Android 四大组件 - bindService 的通信过程

  1. Android 四大组件 - 广播接收者处理流程

  2. Android 四大组件 - ContentProvider 的通信原理

21. Android 系统服务 - Input 事件的分发过程

  1. Android 系统服务 - Input 事件的接受处理过程

  2. Android 系统服务 - SurfaceFlinger 源码分析

24. Android 底层渲染 - 屏幕刷新机制源码分析

  1. Android 底层渲染 - Surface 的底层实现原理

26. Android 源码分析实战 - 动态加载修复 so 库

27.Android 源码分析实战 - 把代码写得更优雅

28.Android 源码分析实战 - 打造一套高性能日志库

29.Android 源码分析实战 - 授权时拦截 QQ 用户名和密码(上)

  1. Android 源码分析实战 - 授权时拦截 QQ 用户名和密码(下)

  2. Android 面试经验 - 进击 BAT 大厂

推荐学习资料:

1. 老罗的 Android 之旅

2. Gityuan博客 | 袁辉辉的技术博客

推荐视频资料: pan.baidu.com/s/1KUEHkH5C…