首先明确一下前提条件:

  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层架构。

从上面这张图来看,想要全面学习 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 层来跟踪服务的查找过程
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

更多相关文章

  1. Android2.3源码下载(针对Windows环境)
  2. scrollTo和getScrollY表象和源码结合效果更佳!
  3. 基于Ubuntu 12.04的Android内核源码下载介绍
  4. phonegap源码分析(一)------ android
  5. Android数据驱动视图更新
  6. 见证Android消息推送时刻(源码及详解)
  7. 一些Android学习资源
  8. [置顶] 开发第一个Android设备驱动程序
  9. [置顶] 那两年炼就的Android内功修养

随机推荐

  1. Android(安卓)对话框控件
  2. 整理的收集的Android的学习资料(大佬们的
  3. Android(安卓)Studio中的keystore
  4. Android(安卓)重学系列 有趣的工具--智能
  5. Android(安卓)Parcel机制
  6. Android之服务Service和它的CP们(Broadca
  7. 【Android开发】基本组件-列表选择框
  8. Kotlin Android(安卓)UI利器之Anko Layou
  9. 一步一步学习Android(安卓)TV/盒子开发(一
  10. 如何将 Android(安卓)仿真器的速度提升 4