前言
本篇文章只是作为本人学习Android操作系统知识和架构的总览记录贴,主要作用是立下目标,给自己一个方向和激励,当每完成一个部分,我都会来这里更新和总结,也希望自己能一直坚持下去。
正文
作为一个工作了好几年的Android应用层开发者,我准备在工作之余干一件事情,那就是学习Android系统知识,为什么要做这个决定呢,理由如下:
- 在Android应用层开发进阶。
这个说起来并非易事,可能在很多人的认知里,Android开发就是主要用来实现UI和交互,但是现在小程序和混合开发大行其道,真正留给Android开发的工作量可能会越来越少。
而对于复杂的Android应用来说,最大的问题就是性能,所以对于Android应用层进阶来说,就是不仅在实现业务需求的时候,还需要掌握各种性能优化、插件化等技能。
对于大厂常用的插件化或者热修复来说,理解其原理至少要明白Android组件的启动流程、Hook技术、IPC通信等;
而对于性能优化来说就更多了,拿我们最常用的卡顿优化来说,首先就是卡顿监控的方法,这里有消息队列、插桩、集成Linux的atrace等方法;然后就是监控帧率和组件生命周期耗时等,这些就需要了解Android系统的绘制和组件的运行原理;再然后还需要监控线程、进程的使用,这里要学会看懂各种Linux的性能数据;最后还要使用各种工具分析监控结果,比如保存卡顿线程、获取Java层和native层的堆栈信息等。
就这一个卡顿优化,就可以贯穿各种线程、Linux、native、Framework等知识,所以想在Android应用层开发更进一步,了解Android系统知识必不可少。
- 利于转型Android系统开发。
不知何时起,单纯的Android应用层开发越来越少了,主流技术演变也越来越快,从之前的rxjava到如今的协程,从之前MVC到如今的MVVM,还有Flutter、Compose等技术,可以说是日新月异。当我们在使用这些技术时,通常会犯一个毛病,那就是使用简单,深入困难。随便新技术,可能几天就上手了,但是没有深入理解,时间久了,就容易欠下许多技术债。
这里我提到了转到Android系统开发,也并非是一定的好方向,只是觉得可以多一条路而已,毕竟有很多相通之处。在Android系统中,涉及的知识更多,从充当基石的Linux,到各种C++库的native层,再到我们熟悉的Java Framework层,还包括虚拟机、驱动等,这里关联的知识非常多,更适合个人能力提升和沉淀。
所以在以后的技术路上,还需要多积累、多思考,给自己多一个方向选择。
基本方向
说完了理由之后,这里开始立Flag了,首先就是Android系统的架构,官方经典图给上:
从下到上分别是:
-
Linux内核:Android平台的基础是Linux内核,Android虚拟机依靠Linux内核来执行底层功能,比如线程和底层内存管理。同时基于Linux内核可以让Android系统更加稳定,并且允许设备制造商为著名的内核开发硬件驱动程序。
-
硬件抽象层(HAL):为特定类型的硬件提供标准的接口,比如相机和蓝牙模块,这样各个硬件厂商就可以按需开发驱动程序。
-
Android Runtime:这个便是Java代码运行需要的虚拟机,现在一般都是ART虚拟机,ART虚拟机可以执行DEX文件来运行Java代码。
-
原生C/C++库(native层):许多核心Android系统组件和服务都是用C/C++代码编写,比如OpenGL ES等,而Java和Native由JNI技术打通。
-
Java Framework层:这里就是我们经常使用的一些Java API,包括各种服务,比如AMS、WMS等,也是Android framework开发最常修改的部分。
-
APP层:这里就是我们平时开发的APP所在的层级,这里就更侧重前面说的性能优化和各种黑科技了。
上面大致列了Android系统的层级,这里就要对每个层级所需要的相关知识做如下列举,后续会继续补充和完善。
语言方向
- 学习C/C++
系统方向
- 学习Linux操作系统
系统启动系列
- init进程
- zygote进程
- system_server进程
- servicemanager进程
- app进程
# framework | SystemServer进程流程分析
Android进程系列
- Android进程创建
- 四大组件启动和运行过程
- Contenxt理解
# framework | Activity启动流程(android-31)
图形系统系列
- WMS相关
- SurfaceFlinger相关
- Choreographer相关
系统稳定系列
- Android ANR机制
- Native进程的Trace原理
- 崩溃原理
- 分析工具
通信系列
- AIDL原理
- Binder原理
- Handler在Java和native层原理
- JNI技术原理分析
虚拟机系列
- 常见虚拟机分析
- 内存布局和GC算法
插件化系列
- 热修复原理
- Hook技术
- 插件化原理
等等。
总结
上面只是罗列了很少一部分,后续会继续补充,而且每一个点讲明白都需要非常多的精力,后续关于这部分的文章,每更新一篇,都会来这个下面做记录和更新,加油!