android 系统架构分析
来源:互联网 发布:你的眼神网络歌手 编辑:程序博客网 时间:2024/05/24 02:05
了解系统架构对知识点梳理以及学习方向把控都要一定好处。Android分为4个主要功能层,分别是Linux内核层(Linux Kernel),系统运行时库层(Libraries和Android Runtime),应用程序架构层(Application Framework)和应用程序层(Applications)。
应用层(Application Framework)
应用层上包含系统内置的应用程序以及非系统级的应用程序。负责与用户进行直接交互。
应用框架层(Application Framework)
应用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件以及相关功能,也可以通过继承实现个性化的扩展。
系统运行库层(Libraries、Android Runtime)
系统运行库层分为两部分,分别是系统类库和Android运行时库。系统类库通俗讲就是C/C++程序库,该层会用到NDK的开发,所以大家一般习惯称Native层。
1.系统类库
系统类库大部分由C/C++编写然后由Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务
刚刚文章中提到了NDK,Android NDK(Native Development Kit),是Android原生库。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和Java应用程序一起打包成应用程序包文件,即.apk文件。
使用原生库无法访问应用框架层API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。
2.Android运行时库
当我们使用Android 应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其能更好地为我们服务。每个Java程序都运行在Dalvik虚拟机之上。与PC一样,每个Android应用程序都有自己的进程,Dalvik虚拟机只执行.dex的可执行文件。当Java程序通过编译,最后还需要通过SDK中的dx工具转化成.dex格式才能正常在虚拟机上执行。Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式dex(Dalvik Exceutable)的文件。
Dalvik虚拟机有几个主要特征,专有的dex文件格式;.dex的优化,dex文件的结构是紧凑的;基于寄存器;一个应用,一个虚拟机实例,一个进程。每一个Android应用度运行在一个Dalvik虚拟机实例中,每一个虚拟机实例都是一个独立的进程空间。
Linux内核层(Linux Kernel)
Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和硬件设备驱动等都依赖于Linux内核服务。
硬件抽象层(HAL)
硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。
- Android系统架构分析
- Android系统架构分析
- Android 系统架构分析
- Android系统架构分析
- Android系统架构分析
- android系统架构分析
- Android系统架构分析
- android 系统架构分析
- android自学----------系统架构分析
- Android架构之从startActivity追踪分析Android系统架构
- [MDIT每天一小时]Android系统架构分析
- rk3188--5.android input 系统架构分析
- Android背景相关与系统架构分析
- Android Camera 系统架构源码分析
- Android核心分析之系统架构
- android系统架构MVP案例分析
- Android系统架构特点及优劣分析
- 【Android】系统架构层次与异常分析
- [树套树] BZOJ3196: 二逼平衡树
- 词向量之word2vec(1)
- MD5大概简述
- pyqtgraph如何设置字符串类型横坐标
- 谈谈移动硬盘或者手机连接到PC提示“无法访问,拒绝访问”或“您没有访问该设备的权限”的解决办法
- android 系统架构分析
- C++复习之友元和const修饰类成员
- Head First SQL 第五章
- PE文件结构图
- jquery遍历详细解析
- UML的5种视图、9种图的系统介绍
- JavaOOP 带缓冲区
- Android 开发 Tip 2 -- 多主题下drawable.xml使用?attr的问题
- python构建指数平滑预测模型