对Android 系统的理解

来源:互联网 发布:c语言疯狂讲义 pdf 编辑:程序博客网 时间:2024/06/05 20:30

Android采用层次化系统架构,官方公布的标准架构如下图所示。
Android由底层往上分为4个主要功能层,
分别是linux内核层(Linux Kernel),
系统运行时库层(Libraries和Android Runtime),
应用程序架构层(Application Framework)
和应用程序层(Applications)

这里写图片描述

应用层:
咱们平常app开发的层次 用java 编写的应用程序 和 服务等。

应用框架层:
应用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。
应用程序框架层类库名称
活动管理器(Activity Mananger) 管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
窗口管理器(Window Manager) 对所有开启的窗口程序进行管理
内容提供器(Content Provider) 提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
视图系统(View System) 创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器。
通知管理器(Notification Manager) 使应用程序可以在状态栏中显示自定义的客户提示信息
包管理器(Package Manager) 对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
资源管理器(Resource Manager) 提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
位置管理器(Location Manager) 提供位置服务
电话管理器(Telephony Manager) 管理所有的移动设备功能
XMPP服务 是Google在线即时交流软件中一个通用的进程,提供后台推送服务

系统运行库层
官方的系统架构图中,位于Linux内核层之上的系统运行库层是应用程序框架的支撑,为Android系统中的各个组件提供服务。系统运行库层由系统类库和Android运行时构成。
(1) 系统类库
Surface Manager
Media Framework
SQLite
OpenGL|ES
FreeType
WebKit
SGL
Libc(bionic l ibc)
SSL
(2)Android NDK(Native Development Kit)
即Android原生库,也十分重要。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。实际上,NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和java应用程序一起打包成应用程序包文件,即.apk文件。
注意,使用原生库无法访问应用框架层API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。
(3) 核心库 和 Dalvik
其中 核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。然后 Dalvik 并不是传统的java虚拟机本质上也是不同的
下班说下区别
1.Dalvik基于寄存器,而JVM基于栈 栈是基于内存吧,寄存器在cpu里。 安利一下,cpu 中有寄存器 可以处理数据。 硬盘可以存储数据,好像这样就可以完成一个计算机的功能了吧,但是 寄存器数据太少, 早期的硬盘又是机械硬盘(现在的ssd 也没有内存快) 所以加了一个内存 用于 慢速 高速之间的媒介。我是这么理解的。 好了 元归正传
所以 Dalvik 比 jvm 要快 , 然后 Dalvik 比 jvm 依赖 cpu架构。
2.Dalvik经过优化,允许在有限的内存中同时高效地运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例。Android这种基于Linux的进程“沙箱”机制,是整个安全设计的基础之一
3.Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。
4.Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX); 第三方的应用程序则可在运行时在缓存中优化与保存,优化后的格式为DEY(.dey文件)。

硬件抽象层 hardware abstraction layer
现在 一般会加上 硬件抽象层 hardware abstraction layer 他是对硬件设备的具体实现加以抽象
能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。

linux kernel 层
Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核
Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。Linux3.4增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持

Android linux kernel 驱动模块(内核主要功能驱动硬件)
Android电源管理(Power Ma nagement)
低内存管理器(Low Memory Keller)
日志(Android Logger)
定时器(Anroid Alarm)
物理内存映射管理(Android PMEM)
Android定时设备(Android Timed device)
匿名共享内存(Ashmem)
Android定时设备(Android Timed device)
Yaffs2文件系统
Android Paranoid网络

原创粉丝点击