Android系统架构,方方面面都在这

image.png
关于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
系统架构图:
image.png

基于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运行时组成。

  • 系统类库(Libraries)

系统类库大部分由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应用编译及运行流程:


image.png
aapt:

即Android Asset Packaging Tool(Android 打包工具),在SDK的build-tools目录下,也行平时没有用到过,但是开发工具生成Apk时会自动使用aapt将代码和资源文件打包在其中。

Apk打包流程:


image
SDK和NDK的关系:
image

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在线即时交流软件中一个通用的进程,提供后台推送服务
系统应用

根据Google给出的官方架构图,Android系统应用开发处于Android架构的System Apps层,像桌面,拨号盘,日历,相机,邮件,设置等,但这些app属于系统app,系统app本质上跟第三方app没什么区别,只是最终存放在Android系统中的位置不同,系统app存放在/system/priv-app/和/system/app/中,第三方app存放在/data/app/当中,这三个目录的权限不一样,按照权限大小排序分别为,/system/priv-app/ > /system/app/ > /data/app/。

应用层(Applications)

系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。包括设备系统自带的工具,日历,音乐,浏览器,图片查看等应用,还有开发者开发应用程序。

源码根目录中的packages目录对应着系统应用层,目录结构图:


在线阅读Android源码

在Android系统源码官网,各个Android版本的源码任君挑选。
Android在线阅读源码地址

屏幕快照 2020-08-30 10.13.45.png

虽然我们平时开发应用主要行走在Applications层上,但是并不限制我们往下走,虽然这条路是艰难漫长的,坚持下去总有拨云见雾的一天。该篇文章保持更新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268