作者:勿泊心 | 来源:互联网 | 2023-08-27 11:02
image.png
关于Android系统
Android,本义指“机器人”,是Google于2007年11月5日宣布的基于Linux平台的操作系统。
Android系统优缺点
开放性
关于Android系统
Android,本义指“机器人”,是Google于2007年11月5日宣布的基于Linux平台的操作系统。
Android系统优缺点
开放性
在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
丰富的硬件
这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带iPhone上使用、联系人等资料更是可以方便地转移。
跨平台
由于使用Java进行开发,Android继承了Java跨平台的优点。任何Android应用几乎无需任何修改就能运行于所有的Android设备。包括但不限于手机,平板,手环,车载系统,智能家居。
方便开发
Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。
Google应用
在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。
太碎片化
纷繁复杂的屏幕尺寸,分辨率,不同版本且订制开发的Android系统,各个厂家硬件,虚拟菜单等,给开发者带来一定的复杂性。
截至目前发行历史版本:
每个版本都是按照英文字母顺序取的字母,然把它作为单词第一个字母,去拼一个甜点的单词,可是到了M,N,O,P,到了Q的时候就变了,改为就叫Android 10了。
- 1.5 Cupcake(纸杯蛋糕)
- 1.6 Donut(甜甜圈)
- 2.2 Froyo(冻酸奶)
- 2.3 Gingerbread(姜饼)
- 3.x Honeycomb(蜂巢)
- 4.0 Ice Cream Sandwich(冰激凌三明治)
- 4.1 Jelly Bean(果冻豆)
- 4.4 KitKat(奇巧巧克力)
- 5.0 Lollipop(棒棒糖)
- 6.0 Marshmallow(棉花糖)
- 7.0 Nougat(牛轧糖)
- 8.0 Oreo(奥利奥)
- 9.0 Pie (派)
- 10.0 Android 10
系统架构图:
基于Android 8.0的系统根目录结构图:
Android从下往上层主要分为4层,如同网络的七层协议,这样做的好处是屏蔽本层与下层的差异。
- linux内核层(Linux Kernel)
- 系统运行时库层 (Libraries and Android Runtime)
- 应用程序框架层(Application Framework)
- 应用程序层 (Applications)
linux内核层(Linux Kernel)
驱动名称 |
简介 |
Android电源管理(Power Management) |
针对嵌入式设备的,基于标准Linux电源管理系统的,轻量级的电源管理驱动 |
低内存管理器 (Low Memory Keller) |
选择性杀死进程来释放需要的内存 |
匿名共享内存 (Ashmem) |
为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制 |
日志(Android Logger) |
一个轻量级的日志设备 |
定时器(Android Alarm) |
提供一个定时器把设备从睡眠状态唤醒 |
物理内存映射管理 (Android PMEM) |
DSP及其他设备只能工作在连续的物理内存上,PMEM用于向用户空间提供 连续的物理内存区域映射 |
Android定时设备(Android Timed device) |
执行对设备的定时控制功能 |
Yaffs2文件系统 |
Android采用大容量的NAND闪存作为存储设备,使用Yaffs2作为文件系统管理大容量MTD NAND Flash;Yaffs2占用内存小,垃圾回收简洁迅速 |
硬件抽象层
在linux内核层和系统运行时库层之间还有一层硬件抽象层(Hardware Abstract Layer,HAL),它是对硬件设备的具体实现加以抽象。鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。
系统运行库层
由系统类库和Android运行时组成。
系统类库大部分由C/C++编写,提供的功能通过Android应用程序框架来调用。
名称 |
简介 |
Surface Manager |
管理应用显示,另外也对2D和3D图形提供支持 |
Media Framework |
基于PacketVideo的OpenCORE的多媒体库,支持多种常见音视频格式的录制和播放 |
SQLite |
本地小型关系数据库,如平时用数据库用到 |
OpenGL |
基于OpenGL ES 1.0API标准实现的3D跨平台图形库 |
FreeType |
用于显示位图和矢量字体 |
WebKit |
Web浏览器的软件引擎 |
SGL |
基于2D图形引擎 |
Libc(bionic ibc) |
C函数库bionic libc,更适合基于嵌入式Linux的移动设备 |
SSL |
安全套接层,为网络通信提供安全及数据完整性的一种安全协议,如https请求需认证 |
几个常用且比较重要的C/C++程序库所在的目录如图:
-
Android运行时(Android Runtime)
由核心库和Dalvik虚拟机组成。
核心库:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。
Jvm、Dalvik和Art
java虚拟机 |
Dalvik虚拟机 |
java虚拟机基于栈,基于栈的机器必须使用指令来载入和操作栈上数据 |
Dalvik虚拟机基于寄存器 |
java虚拟机运行的是java字节码。(java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar获取相应的字节码) |
Dalvik运行的是自己专属的.dex字节码格式。(java类被编译成.class文件后,会通过一个dx工具将所有的.class文件转换成一个.dex文件,然后dalvik虚拟机会从其中读取指令和数据) |
– |
一个应用对应一个Diavik虚拟机实例,独立运行 |
Android应用编译及运行流程:
aapt:
即Android Asset Packaging Tool(Android 打包工具),在SDK的build-tools目录下,也行平时没有用到过,但是开发工具生成Apk时会自动使用aapt将代码和资源文件打包在其中。
Apk打包流程:
SDK和NDK的关系:
ndk可以通过native code跨过使用dalvik runtime,直接调用到android内核资源,而sdk则需要在dalvik runtime环境下才能调用到内核资源。然而两者并不是各司其职,各不相关。android提供了JNI(java native interface)使两者可以进行相互调用和通信。
应用框架层(Application Framework)
应用程序框架层提供开发Android应用程序所需的一系列类库,高度封装直接调用。
应用框架层的主要实现代码在frameworks/base和frameworks/av目录下,其中frameworks/base目录结构如图:
类库名称 |
简介 |
视图系统(View System) |
创建应用所需的组件 |
活动管理器(ActivityManager) |
管理各个应用程序生命周期,为所有程序的窗口提供交互的接口 |
窗口管理器(Window Manager) |
对窗口程序进行管理 |
内容提供者(Content Provider) |
提供一个应用程序访问另一个应用程序数据的功能,实现应用间共享数据 |
通知管理器(Notification Manager) |
使应用可以在系统状态栏中显示通知消息 |
包管理器(Package Manager) |
管理应用安装、卸载,应用版本号、版本名,查询相关权限等功能 |
资源管理器(Resource Manager) |
提供各种非代码资源供应用程序使用,如字符串,颜色,图片,音频等 |
位置管理器(Location Manager) |
提供位置服务 |
电话管理器(Telephony Manager) |
提供设备电话相关功能 |
XMPP服务 |
Google在线即时交流软件中一个通用的进程,提供后台推送服务 |
应用层(Applications)
系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。包括设备系统自带的工具,日历,音乐,浏览器,图片查看等应用,还有开发者开发应用程序。
源码根目录中的packages目录对应着系统应用层,目录结构图:
在线阅读Android源码
在Android系统源码官网,各个Android版本的源码任君挑选。
Android在线阅读源码地址
屏幕快照 2020-08-30 10.13.45.png
虽然我们平时开发应用主要行走在Applications层上,但是并不限制我们往下走,虽然这条路是艰难漫长的,坚持下去总有拨云见雾的一天。该篇文章保持更新。