一 前言
Android 系统庞大复杂,按照经典的模块化方式可以自下而上分为Linux内核层,系统类库,运行时,应用框架层,应用层,图1是一张经典的Android 四层架构图。可以看出Android系统采用了低耦合、高复用的组件化思想设计。下面是老罗对Android组件化设计说明。
Android的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程即使由于内存紧张被强行杀掉了,但是运行在里面的组件还是存在的。这样就可以在组件再次需要使用时,原地满血复活,就像什么都没发生过一样。这种设计思想非常适合内存较小的移动设备 ——罗升阳
由于我们接下来要研究Java层的源码,所以需要了解整个系统的启动流程, 方便我们理解源码,但是图1只是体现了Android的模块化架构,并未真实反映Android系统内部架构和运行流程。
二 系统架构
图2是一张官网的系统架构图,结合自己的认知绘制了图3,就以图3说明系统内部的架构图:
Android系统内部自下而上分为Linux 内核层,硬件抽象层,框架层(包括JAVA 和C++框架),BInder IPC通信层,APP应用程序层;
- Linux Kernel层
Android 底层使用Linux内核,Android对典型的Linux内核做了补充,提供了内存管理,和唤醒锁定Binder驱动程序等,对于开发驱动程序而言,和典型的linux内核驱动开发是一样的。 - 硬件抽象层
典型的Linux系统都是把硬件层放在内核空间的驱动模块实现,而Android系统放在了用户空间,有一个重要原因是保护厂商的利益,因为linux内核源码遵循的是GPL协议(这个协议你修改了源码,就要公开),但是把对于硬件的驱动开发完全放在用户空间是不可能实现的,所以android采用了折中的方案,加了一个在用户空间实现的硬件抽象层,封装了硬件的实现细节和参数,从而保证了厂商的利益。 - 系统框架层
该层主要包含系统服务(窗口管理器,搜索服务,通知管理器等)和媒体服务(与播放和录制有关)。- JAVA 框架层
该层主要是利用JAVA实现的系统服务,我们分析的源码主要是这一层,包括Window Manager的理解,Activity Manager,Package Manager,View System等。 - C++ 框架层
该层主要包含媒体服务,3D绘制库—OpenGL ,数据库—SQLite等。
- JAVA 框架层
- Binder IPC层
Binder作为Android系统提供的一种进程间通信机制,是个难点,后面会好好看看源码。 - APP层
该层是我们利用四大组件开发的APP,以及系统开发的APP,通过Binder和系统框架层之间通信,这层离应用开发最近,要重点理解一下。
三 Android O Java部分源码说明
上面说了Android系统庞大复杂,源码总共有30G左右,所以我们摘出来APP应用层和JAVA Framework层的部分代码有浅入深分析我们的常用组件;
四 总结
我们以上一篇提到的几个知识点为思路,结合JAVA层源码(主要是图3中这一部分),对应用层组件由浅入深分析。包括Window Manager,Activity Manager,Package Manager,View System,Content Providers等。
由于能力有限,有的方面可能理解不当,后期会根据情况随时调整。