目录
前言
学习路线:
1.基础知识
2、AOSP 源码学习
3. AOSP 源码编译系统
4. Hal与硬件服务
5.基础组件
6. Binder
7. 系统启动过程分析
8. 应用层框架编辑
9. 显示系统
10. Android 输入系统
11. 系统应用
前言
Android Framework 涉及的行业相当广泛,可以是手机,汽车,手表,冰箱,微波炉,电视,机顶盒,空调等等设备。
Framework 学习门槛也较高,而且需要的调试环境也需要成本,但薪资也比大部分 App 开发岗位高出不少。如果能系统地学习Framework,就显得更加尤为重要。
以下是一张android 经典框架图
·Linux kernel层,驱动程序
·HAL层,封装驱动硬件操作,向 App 提供统一稳定的驱动操作接口
·Native层,C/C++库以及Java 虚拟机
·Java 层,Java 库,系统服务等
·App 层,系统和三方APP
Framework 大多数指的是中间三层的开发,即 Java层、Native层、HAL层
Android 系统启动过程
1.由 Boot Loader引导开机
2.进入 -> Kernel
3.进入 ->Native
4.进入->Framework
5.进入 -> App
kernel层主要向上提供了驱动,Hal 层加以封装后,向上提供驱动程序功能·Native 层通过 init 进程2启动了很多守护进程用于支持系统的运转·Java 层通过 Zygote 孵化了 Java 守护进程,用于支持系统的运行和 App 的运行
Framework 能开发什么?
1.添加自己的硬件、驱动、HAL和硬件系统服务,硬件的提供商可能会提供相应软件支持.
2.定制系统 App,比如 Launcher Setting System Ul Message Camera 等.·
3.开发厂商自己的系统 App,比如 音视频播放器 应用商店 主题 红外遥控等·个性化功能开发,比如软件多开,手机分身,语音变声,录屏,双卡双待等等·
4.集成一些常用三方应用,比如 微信 淘宝 爱奇艺等
5.系统稳定性 性能 安全相关优化
6.系统裁剪
学习路线:
1.基础知识
开发语言我们必须掌握
C/C++
Java
JNI
对一些工具类的语言有一定的了解
Python:源码下载工具 repo 使用 python 对 git 操作做了封装,以适应多个 qit 仓库的操作
Shell 编程:Android 编译系统包含了大量的 Shell 脚本
go 语言,Android 编译系统中部分脚本使用 qo 语言编写
早期 Android 编译系统使用 make 构建,后来逐步使用 Soong 进行替换,Android 的官方博客指出未来会使用 Bazel 来替换掉目前 make 和 Soong 混合的结构,鉴于 Android 代码量庞大这些替换都是部分的逐步开展的。
对于 Linux 需要掌握三个方面,
熟悉 Linux 的基本使用,主要是常用的命令和常用服务搭建
熟悉 Linux 系统编程,Native 层使用了很多系统编程接口,熟悉 Linux 系统编程是读懂Native 层的基础
Linux 系统编程可能或多或少需要我们对 Linux 内核有基本的了解另外在 Linux 的学习工程中兼顾一下操作系统基础的学习
2、AOSP 源码学习
3. AOSP 源码编译系统
掌握基本的编译命令,能够通过源码编译为固件烧录进入设备中
4. Hal与硬件服务
完成一个简单字符驱动程序的编写
完成 Hal层编写,首先掌握传统方式,再学习基于 HwBinder 的现代方式最后就是在系统中添加硬件服务,写个简单的 App 访问我们的硬件服务
5.基础组件
基础组件就是被使用的比较多的组件,主要包含了
Android 智能指针
Android 属性系统
Android 日志系统
SeAndroid
Android 权限系统
匿名共享内存
6. Binder
Binder 是 Android 最核心的基础,整个 Android 都是基于 Binder 搭建的,不夸张的讲,不懂 Binder 就不懂 Android。
Binder 涉及了内核驱动层,C 层,C++ 层,Java 层,涉及知识多,流程复杂,很多人学了一遍有一遍,还是没有掌握。
7. 系统启动过程分析
主要熟悉整个系统启动的流程:
重点掌握:
1.init 的实现细节
2.Zygote 的具体实现
3.SystemServer 的内部实现
8. 应用层框架
主要搞懂:
- AMS/ATMS
- Handler 和 Looper
- PackageManagerService
9. 显示系统
在掌握了 Android 显示系统整体框架后,再逐步学习一下内容:
- Hal 层的 Gralloc 和 Hwcomposer
- Surfaceflinger
- WMS
- View 系统
10. Android 输入系统
输入系统主要三个方面来具体学习:
- 读取事件
- 分发事件
- 处理事件
11. 系统应用
对系统应用的开发要有所了解,主要学习一下几个 App:
- Launcher
- SystemUI
- Settings