Android系统架构

说到Android,大家都知道他是目前移动市场最大的终端系统,拥有着广阔的市场价值,因此,作为一名开发者,深入了解Android是很有必要。

其实,Android的本质就是在标准的Linux系统上增加了Java虚拟机Dalvik/ART,为了方便开发,以及生态建设,谷歌又在Java虚拟机Dalvik/ART这一层上搭建了一个JAVA的application framework,而所有的应用程序都是基于JAVA的application framework之上。

android整体的系统架构又可以分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。每一层都担任着不同的角色,分管着不同的功能,而且从上往下都是越来越复杂的,它们分层明确,相互协调,从而组成了独特的Android系统。

体系结构图如下:

揭破四层功能

  • 应用程序层(application层)

该层是整个Android系统的最表层,也就是基础层。它主要提供了一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言/kotlin言语(kotlin语言是谷歌后来主推的一种开发Android的语言)设计和编写属于自己和市场需求的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处,从而不断丰富和完善了整个移动互联的生态圈。

  • 应用程序框架层(application framework层)

应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。

应用程序框架层常见的API大概包括了以下几种管理器。

  • 系统运行库层

系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。这也是高级Android开发师必经之路。

(一)  C/C++程序库

C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务。C/C++程序库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。这九层的职责大致如下:

(二)Android运行时库

运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART的机制与Dalvik不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

  • Linux内核层

Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。Linux内核也是作为硬件与软件栈的抽象层。

整体结构
Android7.0的根目录结构说明如下表所示:

|– Makefile (全局Makefile文件,用来定义编译规则)
|– abi (应用程序二进制接口)
|– art (ART运行环境)
|– bionic (bionic C库)
|– bootable (启动引导相关代码)
|– build (存放系统编译规则及generic等基础开发包配置)
|– cts (Android兼容性测试套件标准)
|– dalvik (dalvik JAVA虚拟机)
|– developers (开发者目录)
|– development (应用程序开发相关)
|– device (设备相关配置)
|– docs (参考文档目录)
|– external (android使用的一些开源的模组)
|– frameworks (核心框架——java及C++语言)
|– hardware (部分厂家开源的硬解适配层HAL代码)
|– kernel
|– libcore (核心库相关文件)
|– libnativehelper (动态库,实现JNI库的基础)
|– ndk (NDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码)
|– out (编译完成后的代码输出与此目录)
|– packages (应用程序包)
|– pdk (Plug Development Kit 的缩写,本地开发套件)
|– prebuilts (x86和arm架构下预编译的一些资源)
|– sdk (sdk及模拟器)
|– system (底层文件系统库、应用及组件——C语言)
|– tools (工具文件)
|– toolchain(工具链文件)
|– vendor (厂商定制代码)

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都位于应用层。源码根目录中的packages目录对应着系统应用层。

|– apps (核心应用程序)
|– experimental (第三方应用程序)
|– inputmethods (输入法目录)
|– providers (内容提供者目录)
|– screensavers (屏幕保护)
|– services (通信服务)
|– wallpapers (墙纸)

从目录结构可以发现,packages目录存放着系统核心应用程序、第三方的应用程序和输入法等等,这些应用都是运行在系统应用层的,因此packages目录对应着系统的应用层。

应用框架层部分
应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:

|– api (定义API)
|– core (核心库)
|– docs (文档)
|– include (头文件)
|– libs (库)
|– media (多媒体相关库)
|– nfc-extras (NFC相关)
|– opengl 2D/3D (图形API)
|– sax (XML解析器)
|– telephony (电话通讯管理)
|– tests (测试相关)
|– test-runner (测试工具相关)
|– tools (工具)
|– wifi (wifi无线网络)
|– cmds (重要命令:am、app_proce等)
|– data (字体和声音等数据文件)
|– graphics (图形图像相关)
|– keystore (和数据签名证书相关)
|– location (地理位置相关库)
|– native (本地库)
|– obex (蓝牙传输)
|– packages (设置、TTS、VPN程序)
|– services (系统服务)

总结:

Android的大致体系就是这样的,但是,要想学好Android,并且深入,还是需要下一些功夫,比如研究一下Android系统的源码,看看这个庞然大物的设计理念,设计思想.....等等,不管是对于Android开发,还是其他开发都是有一定好处的。

犹豫国内限制,导致我们无法访问优秀的国外资源,为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界, 国内开发者可以访问(http://www.androiddevtools.cn/)上面已经有了所有你要的资源,同时可以下载到我们的主角framework。

Framework学习(一)深入Android 系统架构相关推荐

  1. android phone驱动_一文带你掌握 Android 系统架构

    引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...

  2. Android系统架构开篇

    Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...

  3. 《Android 网络开发与应用实战详解》——2.3节Android系统架构

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...

  4. Android零基础入门第2节:Android 系统架构和应用组件那些事

    继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统. ...

  5. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  6. Android系统运行库分为,Android系统架构

    Android系统架构可分为五层,从上到下依次是应用层.应用框架层.系统运行时库层.硬件抽象层和Linux内核层 应用层 (System Apps) 系统内置的应用程序以及非系统级应用程序都属于应用层 ...

  7. 《深入理解Android 5 源代码》——第1章,第1.2节剖析Android系统架构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第1章,第1.2节剖析Android系统架构,作者 李骏,更多章节内容可以访问云栖社区"异步社区"公众 ...

  8. Android系统架构及生态链

    目录 一.Android系统架构 二.Android生态链 一.Android系统架构 最底层是 Linux Kernel 层.Android OS 的基石是 Linux Kernel Android ...

  9. 安卓进阶之android系统架构

    安卓进阶之android架构 安卓进阶躲不开阅读源码和深入了解安卓的底层,这是一篇入门级别的文章,可以对安卓架构有个大体的认识. AOSP与Android系统架构 首先要理解andriod和AOSP的 ...

最新文章

  1. MyBatis点滴积累
  2. CSS布局之-水平垂直居中
  3. OS_CORE.C(10)
  4. ABAP [div '/'] 的区别与妙用
  5. request的setAttribute()怎么用的?
  6. 【深度学习】研究揭秘:神经网络越大、表现越好的“神秘力量”
  7. vue office在线编辑_VUE和Antv G6实现在线拓扑图编辑
  8. 人工神经网络模型与分类
  9. Java Bullshifier –生成大量随机代码库
  10. JavaScript中带有示例的Math.max()方法
  11. Maven学习总结(16)——深入理解maven生命周期和插件
  12. vxworks驱动开发基础
  13. Linux下的HDFS命令
  14. python 拼音性命按照姓出现的次数排序_Python按姓氏排序字典列表
  15. 所谓的进步和提升,就是完成认知升级
  16. iOS主线程卡顿监测
  17. 从零开始的MYSQL数据库命令行使用指南
  18. 分布式锁的实现【转载】
  19. 算法--分治法归并排序 python
  20. (转载)FPGA工程师必上的论坛

热门文章

  1. 关于选择,说一个同学的真实故事
  2. 【比赛经验】陈成龙博士Kaggle计算机编程竞赛数据挖掘经验分享
  3. 少儿编程线下培训水到渠成了吗?2018
  4. 程序员生涯之我见 找到自己的兴趣所在 (zz)
  5. 没信号也不怕?iPhone 14或将支持卫星网络连接呼救
  6. 星巴克饮品中竟喝出活蟑螂?官方回应了...
  7. 钉钉用户数破5亿 低代码应用数8个月增长86万
  8. 超70家影视传媒单位联合500余位艺人倡议:立即清理未经授权短视频
  9. 日赚4.5亿!腾讯游戏业务增长惊人:最赚钱的还是它两!
  10. 三星首款5nm A78旗舰芯Exynos 1080即将亮相