Android 系统从下至上分为四层:Linux 内核、Android 核心库及Android 运行时环境(Android Runtime)、

应用程序框架以及应用程序等。

Linux 内核(Linux Kernel)
Android 的核心系统服务依赖于Linux 2.6,例如,安全、内存管理、进程管理、网络堆栈、驱动模型。
Linux Kernel 也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
除了标准的 Linux 内核以外,Android 系统还增加了内核的驱动程序,例如,显示驱动、蓝牙驱动、
相机驱动、闪存卡驱动、Binder IPC 驱动、输入设备驱动、USB 驱动、WiFi 驱动、音频系统驱动、电源管
理等,为Android 系统的运行提供基础性支持。
这样分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本
层及以下层发生了变化时,不会影响到上层。也就是说,各层各尽其职,各层提供固定的SAP(Service Access
Point),即高内聚、低耦合。

Android 核心库(Libraries)
Android 包含一个C/C++库的集合,以供Android 系统的各个组件使用。这些功能通过Android 的应用
程序框架(Application Framework)展现给开发者。下面列出一些核心库:
 1、系统 C 库——由BSD 继承衍生的标准C 系统函数库(libc),调整为基于嵌入式Linux 设备的库。
 2、媒体库——基于 PacketVideo 的OpenCORE。这些库支持播放和录制多种流行的音频和视频格式,
以及多种媒体格式的编码/解码格式,包括MPEG4、 H.264、 MP3、AAC、AMR、JPG、PNG。
3、 界面管理——显示子系统的管理器,管理访问显示子系统和无缝组合多个应用程序的二维和三维
图形层。
    4、LibWebCore——新式的Web 浏览器引擎,驱动Android 浏览器和可嵌入的Web 视图。
5、 SGL——Skia 图形库,基本的2D 图形引擎。
6、 3D libraries——基于OpenGL ES APIs 的实现。该库使用硬件3D 加速或使用高度优化的3D 软加
速。
7、 FreeType ——位图(Bitmap)和矢量(Vector)字体渲染。
8、 SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。

Android 运行时环境(Android Runtime)
在 Linux 内核层上还有一个Android 运行时层,该层包括Dalvik 虚拟机及Java 核心库,提供了Java
编程语言核心库的大多数功能。
Dalvik 虚拟机是Android 使用的Java 虚拟机。每一个Android 应用程序是Dalvik 虚拟机中的实例,运
行在它们自己的进程中。Dalvik 虚拟机设计成在一个设备上可以高效地运行多个虚拟机。Dalvik 虚拟机可
执行的文件格式是.dex,.dex 格式是专为Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机(包括JVM)都是基于栈的,而Dalvik 虚拟机则是基于寄存器的。两种架构各有优劣,
一般而言,基于栈的机器需要更多的指令,而基于寄存器的机器指令更大。DX 是一套工具,可以将
Java .class 转换成 .dex 格式。一个.dex 文件通常会有多个.class。由于.dex 有时必须进行最佳化,会使文
件大小增加1~4 倍,以ODEX 结尾。
Dalvik 虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

Android 应用程序框架(Application Framework)
位于 Android 程序库和运行时上面的是应用程序框架层。通过提供开放的开发平台,Android 使开发
者能够访问核心应用程序所使用的API 框架,这样使得组件的重用得以简化,任何应用程序都能发布它的
功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。从而使开发者可以编制极
其丰富和新颖的应用程序,自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态
栏添加通知等。
每个应用程序其实是一组服务和系统,包括:
 视图(View)——丰富的、可扩展的视图集合,用来构建应用程序。包括列表(ListView)、网格
(Grid)、文本框(EditText/TextView)、按钮(Button)等,甚至是可嵌入的网页浏览器(WebView)。
 内容提供器(Content Providers)——使应用程序可以访问其他应用程序(如通讯录)的数据,或
共享自己的数据。
 资源管理器(Resource Manager)——提供对于非代码资源的访问,如本地化字符串、图形和布局
文件。
 通知管理器(Notification Manager)——使应用程序能够在状态栏显示自定义的提示信息。
 活动管理器(Activity Manager)——管理应用程序生命周期,并提供常用的导航回退功能

Android 应用程序
Android 装配一个核心应用程序集合,连同系统一起发布,这些应用程序包括电子邮件客户端、SMS
程序、日历、地图、浏览器、联系人和其他设置等。而所有应用程序都是用Java 语言编写的,由用户开发
的Android 应用程序和Android 核心应用程序是同一层次的。

Android 系统架构的更多相关文章

  1. Android系统架构说明介绍

    Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...

  2. Android进阶(十一)Android系统架构讲解

    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...

  3. Android进阶加密-第1章-Android系统架构-读书笔记

    第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...

  4. Android系统架构与系统源码目录

    前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...

  5. Android源码分析一 Android系统架构

    一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...

  6. 我收藏的技术知识图(每张都是大图)关于XX背后的知识、技术图,例如:Linux、Nginx架构、PHP知识卡、机会、HTML5移动、Android系统架构、YII架构的典型流程、Css知识表

    我收藏的技术知识图(每张都是大图) HTML5Linux/Unix系统设计思想读书笔记 LinuxMVCJava线程MVCSpring MVCCSS3Nginx架构VimCliCommandsPHP知 ...

  7. (转)android系统架构及源码目录结构

    转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...

  8. Android系统架构(一)

    一.Android系统版本简介 Android操作系统已占据了手机操作系统的大半壁江山,截至本文写作时,Android操作系统系统版本及其详细信息,已发生了变化,具体信息见下表,当然也可以访问http ...

  9. Android 笔记之 Android 系统架构

    Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...

  10. Android零基础入门第2节:Android 系统架构和应用组件那些事

    原文:Android零基础入门第2节:Android 系统架构和应用组件那些事 继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android ...

随机推荐

  1. C#为工作Sql而产生的字符串分割小工具(很实用,你值得拥有)

    写在前面 为什么要写这个工具? 工作需要,拼接字符串头晕眼花拼接的,特别是in 查询,后面的参数太多,想在数据执行一些这个sql语句老费劲了. 看正文 工作所有的(后台)攻城狮们都会接触到sql语句, ...

  2. SignalR-支持平台

    1.支持的服务器操作系统: SignalR 服务器组件可以驻留在下列服务器或客户端操作系统.请注意, SignalR 使用 Websocket,为 Windows Server 2012 或 Wind ...

  3. java获取class所在jar

    在类库的开发过程中,有些时候为了self-contain的原因,我们希望所有的资源都打包在jar中,但是有些工具好像无法支持从classpasth直接获取比如velocity的模板合并,此时我们就知道 ...

  4. Angular框架

    Angular 框架 Angular介绍 库和框架的区别 jQuery:库 库一般都是封装了一些常用的方法 自己手动去调用这些方法,来完成我们的功能 code $('#txt').val('我是小明' ...

  5. art-template引擎模板

    art-template简介 artTemplate(后文简称aT)才是模板引擎,而TmodJS(后文简称TJ,曾用名atc)则是依赖于前者的一款模板预编译器.两者都是由腾讯开发.其实aT完全可以独立 ...

  6. 可怜的js居然没有块级作用域

    js中在一个函数中定义一个for循环:for(var i=0;i<5;i++) 其中的i并不会随着for循环的结束就销毁,i会一直存在该函数中,这就是js和其他语言的区别,也就是js没有块级作用 ...

  7. Hexo建博小结

    本来只写在自己的github pages中的,想一想万一有人看呢,虽然同类的文章有不少了,但有些新坑他们没填啊,姑且放出来啦... 拥有自己的博客是一个很酷的事情,但自己建站总是太麻烦了,步骤繁多,管 ...

  8. 浅谈ES6中的Proxy

    Proxy是一个很有趣的对象,它能够修改某些操作的默认行为,等同于在语言层面做出修改,属于一种‘元编程’,即对编程语言进行编程. Proxy其实很好理解,就是在目标对象之前架设一层拦截,外界的访问都得 ...

  9. CLEAR REFRESH FEEE的区别

    clear,refresh,free都有用来清空内表的作用,但用法还是有区别的.clear itab,清空内表行以及工作区,但保存内存区.clear itab[],清空内表行,但不清空工作区,但保存内 ...

  10. windows 8 设置hyper-v网络设置

    1 windwos 8 设置hyperv 比较简单,和装操作系统都不多做解释.我只多说说网络的设置问题,因为可能装提windows 2008虚拟机,根据网上设置网络的方式都是要不然只能虚拟 机上网 , ...