热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

image.png 关于Android系统 Android,本义指“机器人”,是Google于2007年11月5日宣布的基于Linux平台的操作系统。 Android系统优缺点 开放性
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
系统架构图:
Android系统架构,方方面面都在这
image.png

基于Android 8.0的系统根目录结构图:

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

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运行时(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应用编译及运行流程:

Android系统架构,方方面面都在这
image.png
aapt:

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

Apk打包流程:

Android系统架构,方方面面都在这
image
SDK和NDK的关系:
Android系统架构,方方面面都在这
image

ndk可以通过native code跨过使用dalvik runtime,直接调用到android内核资源,而sdk则需要在dalvik runtime环境下才能调用到内核资源。然而两者并不是各司其职,各不相关。android提供了JNI(java native interface)使两者可以进行相互调用和通信。

应用框架层(Application Framework)

应用程序框架层提供开发Android应用程序所需的一系列类库,高度封装直接调用。

应用框架层的主要实现代码在frameworks/base和frameworks/av目录下,其中frameworks/base目录结构如图:

Android系统架构,方方面面都在这
类库名称 简介
视图系统(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版本的源码任君挑选。
Android在线阅读源码地址

Android系统架构,方方面面都在这
屏幕快照 2020-08-30 10.13.45.png

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


推荐阅读
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 宝塔面板下启用HTTPS的详细指南
    本文提供了在宝塔面板环境中配置HTTPS的具体步骤,确保您的网站通信更加安全可靠。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 春季职场跃迁指南:如何高效利用金三银四跳槽季
    随着每年的‘金三银四’跳槽高峰期的到来,许多职场人士都开始考虑是否应该寻找新的职业机会。本文将探讨如何制定有效的职业规划、撰写吸引人的简历以及掌握面试技巧,助您在这关键时期成功实现职场跃迁。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 本文深入探讨了Linux内核中进程地址空间的设计与实现,包括虚拟地址空间的概念、内存描述符`mm_struct`的作用、内核线程与用户进程的区别、进程地址空间的分配方法、虚拟内存区域(VMA)的结构以及地址空间与页表之间的映射机制。 ... [详细]
author-avatar
勿泊心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有