Android Framework - 学习启动篇
Posted HongChengDarren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Framework - 学习启动篇相关的知识,希望对你有一定的参考价值。
首先明确一下前提条件:
- 有 C/C++ 基础,能够阅读 C/C++ 的代码;
- 有 Linux 系统内核基础;
- 有 android 开发相关的工作经验(1-3年);
- 有 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层架构。
从上面这张图来看,想要全面学习 Android 系统,似乎并不简单而且有些难度,但我们作为应用开发者来讲,如果只是了解一些选修内容还是没那么难,虽然 Android 系统非常庞大且错综复杂,但整体架构设计还是很清晰的。后面我们大概从以下几个方面入手:
- 阅读 Java 和 C/C++ 层的代码;(选修内容)
- 学习 Frameworke 的设计思想;
- 带着疑问去分析一些开发中常见的问题;
- 动手实战一些开发中常用的 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 层来跟踪服务的查找过程
10. Android Binder 驱动 - 彻底理解驱动层的通信流程
11. Android 系统服务 - AMS 的启动过程
12. Android 系统服务 - PMS 的启动过程
11. Android 系统应用 - 普通应用的安装过程
14. Android 系统应用 - Launcher 的启动过程
15. Android 四大组件 - 进程的 fork 创建过程
16. Android 四大组件 - startActivity 的启动过程
17. Android 四大组件 - startService 与 bindService
18. Android 四大组件 - bindService 的通信过程
19. Android 四大组件 - 广播接收者处理流程
20. Android 四大组件 - ContentProvider 的通信原理
后面每分析一个小点,我都会把链接补齐,未完待续~
推荐学习资料:
1. 老罗的 Android 之旅
2. Gityuan博客 | 袁辉辉的技术博客
3. android 官网(科学上网)
推荐视频资料:
https://pan.baidu.com/s/1KUEHkH5CMvrRe1rH0vzT2A
以上是关于Android Framework - 学习启动篇的主要内容,如果未能解决你的问题,请参考以下文章
千里马Android Framework实战课程-应用程序app的Binder启动篇
千里马Android Framework实战课程-应用程序app的Binder启动篇
Framework学习实战高级视频--SystemServer启动FallbackHome篇
Android Framework实战课程-binder专题之ServiceManager启动及运行篇