Android 笔记之 Android 系统架构
Android笔记之Android系统架构
h2{
color: #4abcde;
}
a{
color: blue;
text-decoration: none;
}
a:hover{
color: red;
text-decoration: underline;
}
.p1{
font-size: 22px;
color: #787878;
font-weight: bold;
}
.img1{
width: 644px;
height: 525px;
}
p{
font-size: 16px;
}
一、Android 系统架构
Android 系统架构分为四层:Linux 内核层、系统库层、应用框架层、应用层

图1 Android 系统架构图(图片来源于网络)
1. Linux 内核层(Linux Kernel)
- 这一层提供的功能有:安全性、内存管理、进程管理、网络协议栈、驱动程序模型等
2. 系统库层(Libraries)
- 这一层包括两方面的内容: C/C++ 语言编写的程序库、Android 运行时
- C/C++ 语言编写的程序库
- SQLite : 提供数据库支持
- OpenGL|ES : (Open Graphic Libraries for Embedded Systems)提供 3D 绘图支持
- Free Type : 字体渲染引擎
- Webkit : 提供浏览器内核支持
- SGL : (Skia Graphics Library)2D 图形渲染引擎,Skia 是美国的一家公司,后来被 Google 收购
- SSL : (Secure Sockets Layer 安全套接层)是一种安全协议,为互联网通信,提供安全及数据完整性保障
- libc : (Bionic libc)C标准库,由 Google 开发,采用 BSD 授权条款,应用于嵌入式系统上
- Android 运行时
- 核心库 : 包括 Java API 和 Android API
- Dalvik 虚拟机 : 在有限的内存中,允许每一个 Android 的应用程序都拥有自己的 Dalvik 虚拟机实例,并且运行于独立的进程当中(Android 5.0 系统之后改为 ART 虚拟机),独立的进程可以防止当虚拟机崩溃的时候,所有程序都被关闭
3. 应用框架层(Application Framework)
- 这一层主要是提供开发应用程序所需的框架,使程序员可以进行快速开发
4. 应用层(Applications)
- 安装在手机上的应用程序都属于这一层
5. 其他
- 开发人员
- 如果从事 Android 应用开发,那么应该研究 Android 的应用层和应用框架层
- 如果从事 Android 系统开发,那么应该研究 Android 的系统库层
- 如果从事 Android 驱动开发,那么应该研究 Android 的 Linux 内核层
- Dalvik 虚拟机 与 ART(Android Runtime) 虚拟机
- Android 5.0 系统之后 ART 虚拟机取代 Dalvik 虚拟机,主要是为了提升 Android 系统的流畅性
- 在 Dalvik 虚拟机下,应用程序每次运行的时候,字节码都需要通过JIT(Just-in-Time 即时编译)转换为机器码,这也是为什么每次开启程序的时候都会很慢的原因
- ART 虚拟机,在应用程序安装的时候,就将字节码预先编译成了机器码,在应用程序运行的时候无需再次编译,使用的技术是 AOT(Ahead-of-Time 预编译)
- ART 虚拟机也有缺点,预编译会占用更大的内存空间,而且应用程序的安装时间也会延长
- 接口
- 这里采用知乎上某位大牛类似的回答来说明一下
- 比如说,小 A 通过某种技术,在网络上搜索了很多高质量的美女图片,然后发布在他的微博上,恰好小 B 也是这方面的爱好者,那么小 A 的微博就是接口,小 B 只需关注小 A 的微博便可以查看大量的美女图片,无需关心小 A 是通过什么技术来获得这些图片的
- HAL(Hardware Abstraction Layer 硬件抽象层)
- 如图 2 所示,这是比较新的 Android 系统架构图,图中还有一层叫 HAL(Hardware Abstraction Layer 硬件抽象层)
- HAL 的由来
- Linux 内核的发布遵循 GPL 协议,GPL 协议规定:所有对源码的修改都必须开源
- 如果 Google 在 Linux 内核中编写驱动程序模块,那么修改的源码就必须全部公布出来,但是这样一来会损害硬件厂商的利益,毕竟公开源码的话,硬件的实现细节和参数也就暴露了。为了解决这个问题,Google 提出了 HAL,厂商可以在不公开源码的情况下,将硬件的相关实现以库(.so)的形式放在 HAL 中,当然,硬件驱动不可能完全脱离 Linux 内核,所以 Google 也在Linux 内核中做了相应的修改,基于 GPL 协议,这部分修改的源码要公布出来,但是因为 HAL 不属于对 Linux 内核的修改,所以这里的源码就没有开源的必要了
- HAL 的功能
- HAL 提供了将设备硬件的功能暴露给 Application Framework 层的标准接口
- HAL 由许多库模块组成,每个库模块都实现了特定类型的硬件组件接口,通俗地讲就是通过库模块就可以调用相应的硬件组件,比如:蓝牙模块在 HAL 中有特定的库模块,当 Application Framework 层的 API 访问蓝牙设备时,Android 系统会加载相应的库模块以供 API 使用
- 这里有必要理清一下,库模块是提供给 API 的接口,而 API 是提供给程序员的接口
图2 Android 系统架构图(图片来源于网络)
Android 笔记之 Android 系统架构的更多相关文章
- Android笔记之调用系统相机拍照
参考链接: 拍照 | Android Developers, Android相机拍照方向旋转的解决方案:ExifInterface - 简书 Demo链接:https://pan.baidu.co ...
- Android笔记: Android版本号
由于有2套版本号 总是对应不准 记下来做过标记 Android 4.3 ----18 Android 4.2---17 Android 4.1---16 Android 4.0.3---15Andro ...
- 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化
系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...
- 本书已出版<拨云见日:基于android的内核与系统架构源代码分析 >
已陆续倒到各大电商站点及新华书店 http://item.jd.com/11594135.html http://product.china-pub.com/4472138 http://www.am ...
- Android笔记:android的适配
public int Dp2Px(Context context, float dp) { final float scale = context.getResources().getDisplayM ...
- Android群英传笔记——第一章:Android体系与系统架构
Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起 ...
- Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触
第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...
- Android进阶加密-第1章-Android系统架构-读书笔记
第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...
- (1)-Android学习笔记之:初识Android系统架构和项目结构
Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是And ...
随机推荐
- 【Linux】DNS服务-BIND基础配置
1.BIND简介 现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Intern ...
- 移动像素的px ,dp/pt,dpr的关系
一:基础知识 px:逻辑像素,浏览器使用的抽象单位 dp,pt:设备无关像素 也叫物理像素 dpr:devicePixelRatio 设备像素缩放比 计算公式:1px=(dpr)^2*dp; ipho ...
- linux的目录和基本的操作命令
目录相关操作:( ctrl+l 清空当前的屏幕中的命令 ) 一:目录说明: . 当前目录.. 上一层目录- 前一个工作目录~ 当前[用户]所在的家目录 蓝色的文件: 都是目录 白 ...
- AngularJs依赖注入写法笔记
下面两种依赖注入写法等价: [第一种] app.controller('lrNListingController', function (Notifier, Private, timefilter, ...
- 洛谷 P3177 [HAOI2015]树上染色
题目链接 题目描述 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0~ N\) 之内的正整数 \(K\) ,你要在这棵树中选择 \(K\)个点,将其染成黑色,并将其他 的\(N-K\)个 ...
- POJ_1862 Stripies 【贪心】
一.题面 POJ1862 二.分析 反省一下,自己英语水平着实不行,该题其实就是问若给出若干个这种生物,根据这种体重变换方式,最终合并成一个后,体重最少是多少.根据公式 $m = 2\sqrt{m_{ ...
- 加、减、乘、除 高精度 string
#include<stdio.h> #include<string> #include<string.h> #include<iostream> usi ...
- UVA - 10543 LIS
题意:见大白Page93 真没想到是两边分别设为终点和起点的LIS和..LDS? 注意,要求对称,所以分别取min #include<iostream> #include<algor ...
- [转] Spring Boot实战之Filter实现使用JWT进行接口认证
[From] http://blog.csdn.net/sun_t89/article/details/51923017 Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(j ...
- 移动端数据爬取(fidlde)
一.什么是Fiddler? 1 什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 . 它能够记录客户端和服务器之间的所有 HTTP请求, ...