Android的系统架构栈分为4层,从上往下分别是Applications、Application framework、Libraries  & Android Runtime、Linux  Kernel。每层提供不同的Service功能以供上层调用。

一:Linux Kernel(Linux 内核):

位于Android系统架构栈的底部,整个Android系统基于该层,最新的Android Kitkat 4.4基于Linux Kernel 3.8构建的。它提供的硬件设备抽象接口,以供其他架构层使用。 Linux内核层的主要功能分为2类:提供设备驱动(WIFI、蓝牙、照相机等), 操作系统管理功能(内存、进程管理等等)。

•内存管理(Memory Management)

•电源管理(Power Management)

•硬件抽象(Hardware Abstraction)

•进程管理(Process Management)

•设备管理(Device Management)

•安全设置(Security Settings)

•网络协议栈(Network Stack)

•硬件的驱动程序(Hardware Drivers)

二:Libraries  & Android Runtime(Android 原生库和Android运行时):

位于Linux内核层之上,基本由C、C++写的Android原生类库,每个负责特定的硬件设备结合或者响应UI的输入请求,如2D、3D的渲染等。功能列表如下:

•Webkit:浏览器引擎,让网页浏览的应用程序中。

•OpenGL:3D图形

•SGL:2D图形

•Surface Manager:屏幕上窗口管理器,用于视图渲染

•SQLite:数据库引擎

•Open SSL:互联网安全协议,支持SSL、TSL协议

•Media Framework:提供播放、录制各种视频、音频的格式。

•libc:远程C系统库。

•网络:提供对网络栈

•硬件:提供访问硬件的东西。

•操作系统:提供访问操作系统服务

•小工具:提供UI组件集合(如按钮,标签等)

•Free Type: 字体渲染

Android运行时包含DVM(Dalvik Virtual machine)和核心Java库, DVM的作用类似JVM(Java virtual machine),它的功能如运行字节码(byte Code),内存管理,线程管理等;它可运行.dex文件格式。

Android应用程序打包的流程如下图所示:

Android 内核日志方法 android系统内核_Android

Core Java Libraries (Java核心库)

用Java编写的核心API库,提供了强大的功能,如:

• Data structures
• Utilities
• File access
• Network Access
• Graphics

三 Application framework (应用程序框架层)

Android开发调用的系统服务功能,列表如下:

Core Platform Services

• Activity Manager: 管理App的生命周期

• Package Manager :用于找到设备上安装的Apps包

• Window Manager : 将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window

• Resource Manager :同App的资源管理

• Content Providers :多个Apps之间共享数据

• View System: 用于在UI创建一组视图

Hardware Services

• Telephony Service :电话呼叫管理

• Location Service :GPS定位管理

• Bluetooth Service :蓝牙管理

• WiFi Service :WIFI管理

• USB Service :USB管理

• Sensor Service :传感器管理

GPS定位代码:

LocationManager lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE);

四 Applicatoin(Android 应用程序)

Android架构栈的顶层,有系统原生的App以及第三方的App。一般,开发者和用户大都关心本层,因为开发者编写的App要运行在本层。

系统原生的App有:

SMS: 短信

Dialer :电话

Web browser:浏览器

Contact manager :通讯录

Email :电子邮件

Games etc.:内置的一些游戏等

———————————————————-

Android系统简介(上):历史渊源

上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...

"浅谈Android"第一篇:Android系统简介

近来,看了一本书,名字叫做,是一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

【译】Android系统简介—— Activity

续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

【译】Android系统简介

简介  本文主要介绍Android的基础知识和体系结构,本文主题: 简介什么是Android,为什么开发者需要关注Android: Android体系结构(如Linux Kernel, Librari ...

Android系统的安全设计与架构

Android系统的安全设计与架构 一.安全策略 1.Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层. Android框架层.Dalvik虚拟机层.用户空间原生代 ...

Android 获取系统相册中的所有图片

Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...

Android 向系统日历中添加事件

查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

android开发中系统自带语音模块的使用

android开发中系统自带语音模块的使用需求:项目中需要添加语音搜索模块,增加用户体验解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求.这个问题很好解决,网上能找到很 ...

Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent ...

随机推荐

读取xml数据装配到字典中之应用场景

前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...

DevExpress GridView中加入CheckBox方法

添加一列,FieldName为 "check",将ColumnEdit 设置为 复选框 样式.gridview1 editable设置为true 将要绑定的DataTable添加列 ...

JQuery:JQuery遍历详解

JQuery:遍历一.什么是遍历?jQuery 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找"(或选取)HTML 元素.以某项选择开始,并沿着这个 ...

ArcGIS_系列视频教程::精品大放送

ArcGIS_系列视频教程::精品大放送 文件名: ArcG ...

深入探索C++对象模型-5

虚拟继承下的对象构造: 由于虚拟基类对象在子类中只能保持一个实例,那么,子类构造的时候调用父类的构造函数的时候必须保证虚拟基类对象不能够重复构造. 那么如何保证基类对象的唯一性? C++规定虚拟基类对 ...

vmware设置centos虚拟机nat联网(转)

今天在vmware虚拟主机中安装hearbeat,为了使用最新的版本,选用编译安装了.在编译过程中,需要连接被墙的网站下载文件,那只能用vpn,但我使用的是桥接方式联网,使用不了真实主机的vpn,于是 ...

C#操作Kentico cms 中的 content(winform环境)

前段时间做了个winform程序,去管理kentico网站的content,包括content节点的增删改查,以及相应节点内容的修改.现在将对content的操作方法简单的介绍一下. 我们想要操作ke ...

C# 插入排序(数据结构与算法)

1                                                                   }

js模块化规范

1. CommonJS 用于服务端模块化编程,比如nodejs就采用此规范: 一个文件就是一个模块,require方法用来加载模块,该方法读取一个文件并执行,最后返回文件内部的module.expor ...

Linux 学习笔记_12_文件共享服务_4_SSH

SSH文件共享服务 一.ssh远程登录[一般的Linux系统都会默认安装并启用] 1.Linux上远程命令行登录:ssh 用户名@远程主机IP地址 常用选项: -2:表示SSH2,强制使用第二代SSH ...