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