Android Framework 核心基础的学习路线图

1. 为什么要学习 Android Framework?

作为一名应用层 App 开发工程师,我们为什么要学习 Android Framework?答案很简单,为了不被淘汰!在 2023 年的当下,不会点 Binder WMS AMS PMS 好像都找不到工作了,更过分的是应聘企业甚至希望你会点 RN Fluter 等跨平台技术,顺便能掌握点前端技术就更好了,活生生的面试造火箭!对于市面上 99% 的 App 的开发是不需要我们掌握 Framework 的,企业去面试这些,只是为了筛人罢了,因为收到的简历确实太多了,常规的题目已经无法对应聘者做出筛选了。

对于 Android 应用开发工程师,如果想要长期的在这个行业干下去,大的方向上大概有两条相对靠谱的进阶路线可以选择:

  • 大前端路线:掌握 Android IOS 双端原生开发,跨平台开发,前端开发
  • 系统开发路线:掌握 Linux 系统开发技术,熟悉 Framework 层核心组件原理,了解 Linux 内核

大前端路线出现的很大原因是企业挣不到钱了,养不起人了,希望一个人能干几个人的活,这种岗位主打的是性价比。

不得不承认的是,移动互联网的黄金年代已经过去,大型 App 的开发机会几乎绝迹,更多的是短平快的小项目。对于这些短平快的小项目,5 年以上开发人员的优势非常小,在企业的角度甚至是减分项,为什么这么说?老开发工资高,加班接受度低,不吃老板画的饼了….. 相比之下,2-3 年工作经验的新人更受欢迎,工资低,有冲劲,能加班。最致命的问题是, App 开发,无论是原生,前端,跨平台技术栈,变化非常快。老开发通常有家庭需要照顾,精力有限,学习速度很可能是赶不上新人。以上种种,导致了 35 岁问题!

35 岁问题出现最核心的原因是你积累的经验没有形成新人入行的门槛。简单地说,你的工作不吃经验!

Android 系统开发涉及的知识面很广,代码量大,复杂度高,相关的学习资料也非常匮乏。新人上手有较大的门槛,无形中就形成了岗位的护城河。

从 2008 年发布 Android1.0 到现在,Android 迭代了很多版本,但核心基础组件是一直没有大的变化的(比如 Binder,应用层四大组件,Handler 等),也就是说系统开发积累的经验是可以积累并形成壁垒的。

废了这么多话,归根结底一句话——Framework 是值得应用开发投入精力来学习的

以下是 Android Framework 核心基础的学习路线图:

清晰的学习路线图可以在 链接:https://pan.baidu.com/s/1F0Ibi8pHcYT39HASy3zvNw 提取码:1234   处下载到。 

学习路线一共分为 11 个专题,接下来看看这 11 个专题都需要学习哪些内容:

2. 基础篇

阅读学习系统源码类似小学生读书看报,小学三年级大概掌握一到两千字,配合拼音字典,也可以看很多课外书。

基础知识涉及的面很广,我们应该做好长期学习的准备,学习过程中做好笔记,及时复习和记忆。另外,我们应该一边学习系统源码,一遍学习基础,遇到不会的,再回头看看基础,形成知识记忆到应用的闭环。千万不要基础学完了,再去学习系统源码,效率低,效果差。

基础部分我们主要掌握以下的学习内容:

  • Linux的基本使用:推荐学习 《Linux 运维之道 第二版》
  • 编程语言
  • C 语言:《一站式学习C编程》、《C语言非常道》、《嵌入式C语言自我修养》
  • C++ :《21天学通 C++》
  • Java:《Java 核心技术》
  • JNI:这个没有特别合适的书籍推荐,可以关注我的博客和公众号,后续会分享一些我的学习笔记。
  • 工具类编程语言和软件构建工具,学习这部分内容,主要是为了学习 Android 的编译系统,以及在日常工作中能完成一些自动化脚本的编写,提升工作效率
  • Makefile:这个没有特别推荐的资料,可以关注我的博客和公众号,后续会分享一些我的学习笔记。
  • Soong:这个主要就是参看源码中的写法以及参考官方提供的文档
  • Shell 脚本,推荐学习 《Linux Shell 核心编程指南》
  • Python,推荐学习 《Python 编程从入门到实战》
  • Go,推荐学习 Go 语言从入门到实战
  • Linux 系统编程是比较重要的部分
  • Linux编程技术,这是西安邮电大学提供的一套 mooc 课程,可供入门学习使用
  • 《Linux 系统编程 杰克-本尼 佩尔松》
  • 《UNIX 环境高级编程》《Linux/Unix 系统编程手册》:这两本书可以作为编程过程中的字典使用
  • Linux 内核入门与操作系统基础
  • 操作系统及Linux内核, 这是西安邮电大学提供的一套 mooc 课程,可供入门学习使用
  • 《深入理解 Linux 内核 第三版》  
  • 《奔跑吧Linux 内核 系列书籍》
  • Linux 驱动开发入门:推荐韦东山老师 B 站分享的系列课程

基础部分已分享内容:

3. AOSP快速上手路线

这部分内容提供有免费配套视频教程

这部分内容主要是让大家上手 Android 系统源码,对系统开发有一个感性的认知,主要有以下内容:

这部分内容已整理到 https://github.com/yuandaimaahao/AOSPTutorial

4.Binder

Binder 是一套 linux 上的 远程过程调用(RPC) 编程框架,是整个 Android 系统的核心基础组件,在体验的系统开发的“快乐”以后,我们需要第一时间掌握 Binder 的里里外外。计划分享以下内容:

这部分内容已整理到 https://github.com/yuandaimaahao/AndroidBinderTutorial

5.基础组件

所谓基础组件,就是系统源码中使用的较多的模块,需要学习的内容主要包括:

  • Android 源码中的智能指针
  • Android 属性系统使用与分析
  • Android 日志系统使用与分析
  • Android 中的权限管理
  • Android 匿名共享
  • 基础组件面试题解析

6.Hal 与硬件服务

Hal 主要是对驱动功能做一些封装,下接驱动,上接 Framework,主要学习以下内容:

7.构造系统

有的时候我们可能需要修改构造系统的行为,这需要我们对 AOSP 的构造系统有基本的认识,下面是构造系统的学习顺序:

  • AOSP 构造系统的演进
  • 构造系统初始化
  • 编译过程解析
  • 打包流程解析
  • 构造系统面试题分析

8. 应用层框架

应用层框架是应用开发接触最频繁的组件,主要掌握以下几个方面:

  • AMS/ATMS 与四大组件
  • Activity 启动过程与进程启动
  • Service 启动
  • ContentProvider 实现原理
  • 广播机制
  • Handler与Looper消息处理机制
  • PackageManagerService 工作流程与原理
  • 应用层框架面试题分析

9.系统启动过程

系统启动是我们常打交道的部分,其流程如下图所示:

图片来自这里

主要熟悉以下内容:

  • 系统启动过程整体流程
  • init 进程解析
  • zygote 进程解析
  • SystemServer 进程解析
  • 系统启动过程面试题分析

10.Android 图形系统

Android 图形系统是系统框架中一个非常重要的子系统,我们从以下几个方面来学习和理解图形系统的整体框架:

  • 图形系统整体框架
  • Hal 层原理分析
  • SurfaceFlinger 实现与剖析
  • WMS 实现与剖析
  • Android View 系统分析
  • VSync 原理解析
  • Android 图形系统面试题分析

11.Android 输入系统

输入系统主要分为输入子系统和 IMS,我们重以下几个角度来学习 Android 的输入系统:

  • 输入系统整体框架
  • 事件的读取
  • 事件的分发
  • 事件的处理
  • Android 输入系统面试题分析

12.系统应用

系统开发的大部分内容是做系统应用开发,常修改的系统应用如下:

  • Settings
  • Launcher
  • SystemUI
  • 系统应用开发相关面试题分析

总结

在掌握了这 11 个专题后,不论是继续研究 Framework 中其他模块,或是参与 App 开发,又或是研究内核与驱动,我相信,你一定早已是是游刃有余了!

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/20357,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?