Android系统Java源码探索(1)—系统架构及源码说明

一 前言

Android 系统庞大复杂,按照经典的模块化方式可以自下而上分为Linux内核层,系统类库,运行时,应用框架层,应用层,图1是一张经典的Android 四层架构图。可以看出Android系统采用了低耦合、高复用的组件化思想设计。下面是老罗对Android组件化设计说明。

Android的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程即使由于内存紧张被强行杀掉了,但是运行在里面的组件还是存在的。这样就可以在组件再次需要使用时,原地满血复活,就像什么都没发生过一样。这种设计思想非常适合内存较小的移动设备 ——罗升阳

由于我们接下来要研究Java层的源码,所以需要了解整个系统的启动流程, 方便我们理解源码,但是图1只是体现了Android的模块化架构,并未真实反映Android系统内部架构和运行流程。

图1 Android 经典模块架构.png

二 系统架构

图2是一张官网的系统架构图,结合自己的认知绘制了图3,就以图3说明系统内部的架构图:


图2 Andorid 官网系统架构.png
图3 Android 系统架构.png

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等。
  • Binder IPC层
    Binder作为Android系统提供的一种进程间通信机制,是个难点,后面会好好看看源码。
  • APP层
    该层是我们利用四大组件开发的APP,以及系统开发的APP,通过Binder和系统框架层之间通信,这层离应用开发最近,要重点理解一下。

三 Android O Java部分源码说明

上面说了Android系统庞大复杂,源码总共有30G左右,所以我们摘出来APP应用层和JAVA Framework层的部分代码有浅入深分析我们的常用组件;


APP应用层的核心源码.png

JAVA Framework层核心源码.png

四 总结

我们以上一篇提到的几个知识点为思路,结合JAVA层源码(主要是图3中这一部分),对应用层组件由浅入深分析。包括Window Manager,Activity Manager,Package Manager,View System,Content Providers等。


Android JAVA部分结构图.png

由于能力有限,有的方面可能理解不当,后期会根据情况随时调整。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容