美文网首页Android开发录程序员Android开发经验谈
Android系统架构,方方面面都在这

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

作者: 奔跑吧李博 | 来源:发表于2017-12-14 11:12 被阅读1437次
    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系统,各个厂家硬件,虚拟菜单等,给开发者带来一定的复杂性。

    截至目前发行历史版本:
    • 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(奥利奥)
    系统架构图:
    image.png

    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请求需认证
    • 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应用程序所需的一系列类库,高度封装直接调用。

    类库名称 简介
    视图系统(View System) 创建应用所需的组件
    活动管理器(ActivityManager) 管理各个应用程序生命周期,为所有程序的窗口提供交互的接口
    窗口管理器(Window Manager) 对窗口程序进行管理
    内容提供者(Content Provider) 提供一个应用程序访问另一个应用程序数据的功能,实现应用间共享数据
    通知管理器(Notification Manager) 使应用可以在系统状态栏中显示通知消息
    包管理器(Package Manager) 管理应用安装、卸载,应用版本号、版本名,查询相关权限等功能
    资源管理器(Resource Manager) 提供各种非代码资源供应用程序使用,如字符串,颜色,图片,音频等
    位置管理器(Location Manager) 提供位置服务
    电话管理器(Telephony Manager) 提供设备电话相关功能
    XMPP服务 Google在线即时交流软件中一个通用的进程,提供后台推送服务
    应用层(Applications)

    包括设备系统自带的工具,日历,音乐,浏览器,图片查看等应用,还有开发者开发应用程序。

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

    相关文章

      网友评论

      • 狂欢T:虽然看不懂。。还是为你点个赞
        奔跑吧李博:@狂欢T 感谢支持
      • omyrobin:这张系统架构图有点老了,Android系统架构中增加了HAL层,新的架构可以在source.android.com 中看到
        奔跑吧李博:@omyrobin 我写了硬件抽象层,图中没有画出来,我找找换个新的
      • AWeiLoveAndroid:纠正一下 Android8.0是 Oreo(奥利奥),不是oatmeal cookie(燕麦饼干)
        奔跑吧李博:@阿韦爱Android 哦,对的,奥利奥,以更正
      • 白菜哈啊哈:没听过有硬件抽象层啊,这是什么
        奔跑吧李博:@白菜哈啊哈 可以去看看
      • 侑兮君:不错,为你打call
        奔跑吧李博:@农民伯伯哈哈 感谢你
      • 7a1c17143bdc:这个作者制作的简书平台很适用, 看了写得很好,支持……

      本文标题:Android系统架构,方方面面都在这

      本文链接:https://www.haomeiwen.com/subject/gsvvixtx.html