今天看笔试题的时候,遇到了关于Android架构的问题,之前看笔试题的时候也去了解过,只是没有做更详细的笔记,于是现在准备在上做一下遇到的笔试题目的笔记,以方便以后的复习。

老版:4层架构
Android的系统构架层一共有4层,由下而上分别是:Linux内核层,Android系统运行层,Android应用框架层,Android应用层。

之前在牛客网刷笔试题目的时候,也遇到了这样的一道题,结果答案是5层,于是去网上找,发现4层架构是老版本的了,新的版本添加了一个,硬件抽象层 ,原因是由于制作手机的工厂不愿意分享源码导致

新版:5层架构
由下而上分别是:Linux内核层,硬件抽象层,Android系统运行层,Android应用框架层,Android应用层

以下是官方公布的标准架构图:


1000px-Android-System-Architecture.svg.png

Linux内核层:Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。Linux3.4将会增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持

硬件抽象层:它是对硬件设备的具体实现加以抽象。HAL没有在Android官方系统架构图中标明。鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。

Android系统运行层:它位于Linux内核层之上的系统运行库层是应用程序框架的支撑,为Android系统中的各个组件提供服务。Android系统运行层由系统类库和Android运行时构成。
1.系统类库
系统类库大部分由C/C++编写,所提供的功能通过Android应用程序框架为开发者所使用,主要的系统类库及说明如下表:

图片.png

除上表列举的主要系统类库之外,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运行时
核心库:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。

本质而言,Dalvik虚拟机并非传统意义上的java虚拟机(JVM)。Dalvik虚拟机不仅不按照Java虚拟机的规范来实现,而且两者不兼容。


图片.png

(从android4.4开始就出现了ART(android runtime),但是这个ART并不是指这一节的主题,而是一种用来代替Dalvik的新型运行环境。当然在4.4的正式环境中用的还是Dalvik,真正开始用ART取代Dalvik是从android5.0开始的。)

另外补充一点sdk和ndk的关系:


20160107235017221.jpg

很显然地,ndk可以通过native code跨过使用dalvik runtime,直接调用到android内核资源,而sdk则需要在dalvik runtime环境下才能调用到内核资源。然而两者并不是各司其职,各不相关。android提供了JNI(java native interface)使两者可以进行相互调用和通信。

Android应用程序框架层:
用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。具体包括的模块如表:


图片.png

Android应用层:
Android平台的应用层上包括各类与用户直接交互的应用程序,或由java语言编写的运行于后台的服务程序。例如,智能手机上实现的常见基本功能 程序,诸如SMS短信,电话拨号,图片浏览器,日历,游戏,地图,web浏览器等程序,以及开发人员开发的其他应用程序。

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. 开发商为什么仍然忽视Android系统?
  3. Android文件系统破坏,导致系统无法启动解决办法
  4. Android核心分析之一
  5. Android(安卓)HOME键那些事
  6. android ANR处理方法
  7. App测试在IOS和android系统中的区别
  8. [置顶] Android访问控制系统测试与评估
  9. 面试问题之:Android中消息系统模型和Handler Looper

随机推荐

  1. Android(安卓)App监听软键盘按键的方式与
  2. 重温Android——调节屏幕亮度
  3. Ubuntu操作系统配置阿里云镜像方法一
  4. JS事件监听与派发及form常用事件、JS字符
  5. 获取表单元素、Dom遍历及增删改、JS操作
  6. 如何从阿里云官方镜像站下载ubuntu并安装
  7. 再解 JavaScript 原型 与原型链
  8. Windows 10配置阿里云DNS
  9. html的class命名规范(前端类名取名)
  10. JavaScript 数组常见操作(一)