首先明确一下前提条件:

  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

Android Framework - 学习启动篇相关推荐

  1. Android FrameWork学习(二)Android系统源码调试

    点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...

  2. 修改android framework学习

    2019独角兽企业重金招聘Python工程师标准>>> 1:android平台编译自己编写的framework级service server实录 http://blog.sina.c ...

  3. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  4. Android Framework学习(八)之Handler消息机制(Native层)解析

    在深入解析Android中Handler消息机制一文中,我们学习了Handler消息机制的java层代码,这次我们来学习Handler消息机制的native层代码. 在Java层的消息处理机制中,Me ...

  5. Entity Framework学习中级篇

    1-EF支持复杂类型的实现 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中 ...

  6. Entity Framework 学习中级篇—EF支持复杂类型的实现

    http://www.cnblogs.com/xray2005/archive/2009/06/01/1493661.html 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的 ...

  7. Android Framework学习总结

    经过一段时间的学习,对于Android Framework大部分有一定的了解,现在将之前的学习进行总结并分类. 1.Android系统启动相关 Android系统SystemServer启动(上) A ...

  8. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  9. android framework学习回忆

    好久没来这里了,这2天开发板不够用,所以暂时闲下来学习东西.顺便回忆一下学到的会用的东西. 刚踏入Android Framework大门,是从电源管理开始的.记得当时拼命的google搜索相关资料,因 ...

  10. Android Framework学习的基础概论

    本文总结内容旨在通过总结.学习,了解.熟悉framework源码学习过程中,我们会经常遇到的一些关键系统服务类.概念.源码框架太大,我们需要找一个切入点来学习,我们知道,不管是win pc程序.ios ...

最新文章

  1. golang string 转换 uint64_Golang 的 #x27;print#x27; 源码解读
  2. Selenium | 网上教程
  3. 解决做好一个机器学习项目的3个问题
  4. 深度学习-KNN,K近邻算法简介
  5. html怎么制作附页,HTML和CSS属性的正确书写规范
  6. form表单input使用disabled后提交不能获取表单值的解决方法
  7. php大文件怎么排序去重,简单实现大文件的排序和去重
  8. <读书笔记> Thinking in python (Python 设计模式) 3. Proxy and State模式
  9. java配环境变量_用于 Java 开发的配置工具 Simple Configuration Facade
  10. 录音文件下载_轻便简洁的电脑录音软件,Moo0录音专家中文免费版,大小不过3M...
  11. Easy DVD Creator v2.5.7 WinALL Incl Keygen-BLiZZARD
  12. win10添加uefi linux引导,win10 ubuntu双系统:UEFI GPT和Legacy MBR引导模式
  13. 监测-病毒篇(病毒的了解和认识)
  14. catia中的螺旋伞齿轮画法,基于CATIA的螺旋锥齿轮参数化建模方法研究
  15. 基于单片机的脉搏心率远程监测
  16. sam格式的结构和意义_sam概述
  17. Nvidia Isaac Sim ROS机器人仿真和AMR开发环境
  18. 大数据时代统计学面临的机遇与挑战
  19. java项目如何分工合作,JavaWeb基础 jsp+servlet分工合作的简单示例
  20. Python简单实现microbit传球小游戏

热门文章

  1. 使用Cisco Packet Tracer进行网络模拟
  2. 编译并刷入nexus 6p手机
  3. c语言实现统计过程控制,SPC统计过程控制的课程
  4. 通信尾纤常用尾纤简介
  5. 基于CANape开发的XCP测量
  6. iapp软件库源码分享
  7. Java学习手册:Java网络编程面试问题
  8. matlab仿真数字电路,基于matlab的数字逻辑电路仿真
  9. vivado软件安装教程
  10. Java函数参数传递方式