您的位置:首页 > 运维架构 > 网站架构

Android架构分析填坑

2015-08-27 09:00 357 查看


ok,我们今天来填坑 -- Android的架构图

曾经,学习这幅图的时候只会死机硬背,这层的功能是xxxx,那层是xxxx

现在回想起来,那和读死书确实没什么区别,而应该从设计人员的本质出发,理解这些意义。

Android的诞生与2011年,主要是为了应付苹果,以及谷歌公司看到了未来的手机巨大潜力,从而研发了安卓操作系统。

为了增加抗衡ios的砝码,设计android是这样的,要开发方便,语言要许多人会使用,还要开源...

于是,基于开源的linux kernel,用了许多个优秀的开源库,以及世界最广泛的面相对像的java语言,android就此诞生了!

那么设计一个移动操作系统需要有什么呢,这也是android架构图的本质?

要有网络 要有影音 要有存储 还可以打电话 还要支持一堆传感器...

于是框架就确定了,从整体上看,android的操作系统都是“拼凑出来的”,各个层次大部分都是现成的东西,下面我们慢慢由下到上分析一下。

最底层,linux kernel,主要两个部分的作用,一个是一些管理,比如内存管理,进程管理,网络栈等等

另一个是驱动,比如Android的专用驱动,logger binder 等等

再上一层,library层,这一层细分其实分为3个部分,分别是HAL c++的常用库 以及Android运行时。

需要注意的是HAL硬件抽象层,为了保护厂商利益而特别定制的层次,分为用户空间和内核空间两个部分,具体详细信息可以去阅读老罗的博客。

library层的其他,比如SQLite WebKit OpenGL啊等等,这些c库都是开源的,我们调用的API最底层其实就是调用到这里的库。

library还有一个重要的组成,那就是Android Runtime。

Android运行时包括Davik虚拟机以及java核心类库。Dvm虚拟机和JVM虚拟机最主要的区别就是前者基于寄存器,虽然占用空间比基于堆栈的JVM虚拟机大,但是指令少,所以执行速度快,同时,dex也比jar占用内存小,比较适合移动端用。java核心类库就不多说了。

再上一层的应用层和框架层,框架层就是API了,也可以看成是c库层的封装,采用广泛的java语言,通过JNI调用c++层的库,从而达到实现Android特性的功能;应用层不多说了,把业务逻辑封装好成为一个完整的apk,就是应用层的程序了。

一个例子:调用系统硬件的过程

组件 -- 系统服务 -(BInder IPC)- HAL Model -(device file)- 内核驱动 -- 硬件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: