Android的五层架构:

从上到下一共5层:
一、| 应用层(APP)|
二、| 应用框架层(framework) |
三、| 系统运行库层 |
四、| 硬件抽象层HAL |
五、| Linux内核层 |

接下来大致解释一下各个层是干什么的,自己学习心得,逻辑有些杂乱。

1.应用层(APP层):简单点说就是手机上面的app软件,你能直接使用的手机功能,就是负责和用户直接交互的东西。


2.应用框架层(framework)
项应用开发者提供统一的API(Application Programming Interface,应用程序编程接口),主要是面向JAVA开发程序员。有一些资源管理器(ResourceManager)[以前老版本安卓手机获取ROOT权限后用RE文件管理器可以换一些开机动画等等],位置管理器(LocationManger),通知管理器(NotificationManager)等等。


3.系统运行库层
Android的系统运行库层由两部分组成:系统库Android运行时名字就是:Android运行时!)。
系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。
Android运行时:因为Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

系统库
1、 Libc。系统c库,一个从BSD继承来的标准C系统函数库,专门为基于EmbeddedLinux的设备定制。
2、 Media Framework。多媒体库,Android系统多媒体库,基于PacketVideoOpen、CORE。该库支持录放.并且可以录制许多流行的音频视频格式.还有静态映像文件,包括MPEG4、H.264、MP3、AAC、JPG、PNG等。
3、 Surface Manager。主要负责管理针对显示系统的访问,并且为多个应用程序提供2D和3D图层的无缝融合。
4、 Webkit浏览器。一个最新的web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。
5、 SGL。一个内置的2D图形引擎。
6、 SSL。位于TCP/IP与各种应用层协议之间.为数据通信提供支持。
7、 OpenGL ES。3D效果的支持。基于OpenGLES 1.0 APIs实现;该库可以使用硬件3D加速或者使用高度优化的3D软加速。
8、greeType。提供位图bitmap和向量vector的字体描述与显示。
9、SQLite。一个对于所有应用程序可用、功能强劲的轻型关系型数据库引擎。

Android运行时
1、核心库。核心库提供了Java语言API中的大多数功能,同时也包含Android的一些核心API.如android.OS、android.net、android.media等。
2、Dalvik虚拟机。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。


4.硬件抽象层HAL
硬件抽象层是位于操作系统 内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。
(换句话说就是做软件开发的可以不用看电路图,不用懂硬件,通过这一层的一些驱动程序可以实现软件和硬件的正确对接,软件正确操作硬件,软件通过更改一小部分代码就能移植到其它硬件平台)


5.Linux内核层
(会在另外文章详解Linux内核结构)
Android是在Linux内核的基础上构建的,Android的内核属于Linux内核的一个分支,它并不GNU/Linux,因为一般在GNU/Linux中被支持的功能,在Android大多没有被支持。众所周知,Linux是一个开源的操作系统,由非营利的组织——Linux基金会所管理。虽然Linux是开源的,但是Android必须在GNU GPL(用于保护开源软件的一个授权规范)的许可下使用Linux的源码,才可以商用。所以为了达到商业应用的目的,Android必须去除被GNU GPL所约束的部分。Android去除了Cairo、X11、Alsa、FFmpeg、GTK、Pango和Glibc等,并以Bionic取代Glibc、以Skia取代Cairo、以Opencore取代FFmpeg等。Android并没有用户空间驱动,而是将所有的驱动都放在内核空间中,并以HAL隔开版权问题。

Linux内核层提供了几乎所有手机、平板电脑相关设备的驱动程序,实现系统与各种硬件的通信,如显示屏、摄像头、内存、键盘、无线网络、音频设备、电源等组件。

主要的驱动如下所示:
1、显示驱动(DisplayDriver):基于Linux的帧缓冲(FrameBuffer)驱动。
2、键盘驱动(KeyBoardDriver):作为输入设备的键盘驱动。
3、Flash内存驱动(FlashMemoryDriver):基于MTD的Flash驱动程序。
4、照相机驱动(CameraDriver):常用的基于Linux的v4l2(VideoforLinux)驱动。
5、音频驱动(AudioDriver):常用的基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动。
6、蓝牙驱动(BluetoothDriver):基于IEEE802.15.1标准的无线传输技术。
7、WiFi驱动:基于IEEE802.11标准的驱动程序。
8、Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
9、PowerManagement(电源管理):比如电池电量等。

更多相关文章

  1. Android(安卓)version and Linux Kernel version
  2. 编译android的linux内核
  3. Android架构分析之使用自定义硬件抽象层(HAL)模块
  4. android 电容屏(二):驱动调试之基本概念篇
  5. CyanogenMod 编译 Google Galaxy Nexus (GSM) 全过程
  6. Android简介
  7. what is Android?
  8. android版本与linux内核版本对应关系
  9. android driver for ubuntu 手机驱动

随机推荐

  1. Android的界面设计规范-1
  2. Android工作实践总结:Aidl 远程调用(aidl
  3. Android简单的使用listview动态生成不同
  4. 一个「Pure Android」主义者的手机桌面
  5. Android闹钟开发
  6. Android进阶——使用Pull解析和生成轻量
  7. Android 鍜?iOS 寮€鍙戣€呮槰澶╄寰
  8. android显示缓存大小和清除缓存功能
  9. 智能电视是Android新的研发战场
  10. [置顶] 【Bugly干货分享】那些年我们用过