分析Android系统的话,有一些比较基础的知识需要先掌握,至少要达到透彻理解原理的程度吧,不然分析具体的模块时肯定会比较吃力的,这也是为什么面试官喜欢问一些基础问题的原因吧,我这里所指的基础,指的是Android各个子系统都可能涉及到的一些概念,属于最基础的一些东西。首先看一下Android系统的软件架构图:

从这张图可以看出,整个Android系统层次是非常分明的,从下到上依次为:
- Linux内核层
众所周知,Android系统是一个基于Linux内核的移动端图形化系统,Linux内核提供了如内存管理,进程管理,文件系统,ipc机制,网络协议栈和设备驱动等通用功能,Android在通用Linux内核的基础上,增加了binder驱动、电源管理、匿名共享内存等。 -
HAL层
这层是为了给上层业务模块提供一个统一的硬件抽象层接口,适配不同的硬件模块,屏蔽掉不同厂商硬件模块的差异,即使硬件模块发生变化,也无需对业务模块做改动。这层包括了各个厂家实现的硬件抽象层模块。 - native framework层
这层包括Android runtime,即Android虚拟机实现,各种native层应用程序和服务,各种系统服务、应用程序组件native层实现,各种功能库等,该层也集成了大量通用开源库代码。 - java framework层
这层包括各种系统服务和应用程序组件、控件等。 - app层
这层就是各种各样的app。
分析完软件架构,那么到底有那些是比较基础的呢?这里我先列出一部分:
- 通信方式
Android作为一个含有大量服务和应用的系统,肯定存在着进程间/线程间通信的需求,Android在通用Linux进程间通信机制(比如socket)的基础上又增加了binder机制和handler机制。 - jni
这属于java基础知识范畴了,Android系统中很多功能都跨越了java framework到native framework调用,因此掌握也是jni是必须的。
网友评论