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 站分享的系列课程
基础部分已分享内容:
- Ubuntu 使用快速入门
- Make 构建工具入门
- 理解 Unicode UTF-8 UTF-16 UTF-32
- Linux Shell 脚本编程入门——核心基础语法
- SEAndroid 使用极速上手
- 理解 C++ 的 Memory Order
- Linux Shell 脚本编程入门1——核心基础语法
- Linux Shell 脚本编程入门2——脚本自动化基础
- Android 平台如何编译执行 C C++ 可执行程序
- 如何阅读 Android 系统源码 —— Java 篇
- 如何阅读 Android 系统源码 —— C/C++ 篇
- JNI 编程上手指南之 HelloWorld 实战
- JNI 编程上手指南之 JNI 数据类型
- JNI 编程上手指南之描述符
- JNI 编程上手指南之 JNIEnv 详解
- JNI 编程上手指南之 JavaVM 详解
- JNI 编程上手指南之字符串处理
- JNI 编程上手指南之数组访问
- JNI 编程上手指南之 Native 访问 Java
- JNI 编程上手指南之异常处理
- JNI 编程上手指南之从内存角度再看引用类型
- JNI 编程上手指南之 JNI 调用性能优化
- JNI 编程上手指南之多线程
3. AOSP快速上手路线
这部分内容提供有免费配套视频教程
这部分内容主要是让大家上手 Android 系统源码,对系统开发有一个感性的认知,主要有以下内容:
- AOSP 极速上手
- 系统开发工具
- 添加 Product
- 系统模块添加
- 添加 C/C++、Java 可执行程序
- 添加 C/C++、Java 库
- 添加配置文件与删除已有模块
- 系统 App 开发入门
- 系统 App 源码添加
- 使用 Android Studio 开发系统 App
- 添加开机自启动 Shell 脚本
- 添加开机自启动 C++ 程序
- APK 预制详解
- 系统源码管理工具 Gerrit 搭建与使用
这部分内容已整理到 https://github.com/yuandaimaahao/AOSPTutorial
4.Binder
Binder 是一套 linux 上的 远程过程调用(RPC) 编程框架,是整个 Android 系统的核心基础组件,在体验的系统开发的“快乐”以后,我们需要第一时间掌握 Binder 的里里外外。计划分享以下内容:
- 学习 Binder 的预备知识
- 虚拟内存与 Linux 文件访问接口
- Linux 内核常用数据结构
- linux 驱动开发入门
- Binder 基本原理
- Binder 程序示例之 C 语言篇
- Binder 服务注册过程情景分析之C语言篇
- Binder 服务获取与使用过程情景分析之C语言篇
- Binder 驱动情景分析之 ServiceManager 启动过程
- Binder 驱动情景分析之服务注册过程
- Binder 驱动情景分析之服务获取与使用过程
- Binder C++ 程序示例
- Binder 程序示例之 aidl-cpp 篇
- Binder C++ 程序分析之主要类解析
- Binder 服务注册过程情景分析之 C++ 篇
- Binder 服务获取与使用过程情景分析之 C++ 篇
- Binder 程序示例之 Java 篇
- Binder Java 程序分析之主要类解析
- Binder 服务注册过程情景分析之 Java 篇
- Binder 服务获取与使用过程情景分析之 Java 篇
- Binder 多线程分析
- Binder 匿名服务分析
- Binder 死亡通知机制
- Binder 相关疑难 bug 解析
- Binder 面试题解析
这部分内容已整理到 https://github.com/yuandaimaahao/AndroidBinderTutorial
5.基础组件
所谓基础组件,就是系统源码中使用的较多的模块,需要学习的内容主要包括:
- Android 源码中的智能指针
- Android 属性系统使用与分析
- Android 日志系统使用与分析
- Android 中的权限管理
- Android 匿名共享
- 基础组件面试题解析
6.Hal 与硬件服务
Hal 主要是对驱动功能做一些封装,下接驱动,上接 Framework,主要学习以下内容:
- Kernel 下载与编译
- Linux 驱动开发入门
- Hal 层添加访问 linux 驱动的接口
- 通过 JNI 访问到 Hal 层接口
- Framework 中添加访问 Hello Driver 的硬件服务
- 编写 App 访问硬件服务
- HwBinder 分析上
- HwBinder 分析中
- HwBinder 分析下
- Hal 层面试题分析
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