Framework学习(一)深入Android 系统架构
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 系统架构相关推荐
- android phone驱动_一文带你掌握 Android 系统架构
引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...
- Android系统架构开篇
Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...
- 《Android 网络开发与应用实战详解》——2.3节Android系统架构
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...
- Android零基础入门第2节:Android 系统架构和应用组件那些事
继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统. ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统运行库分为,Android系统架构
Android系统架构可分为五层,从上到下依次是应用层.应用框架层.系统运行时库层.硬件抽象层和Linux内核层 应用层 (System Apps) 系统内置的应用程序以及非系统级应用程序都属于应用层 ...
- 《深入理解Android 5 源代码》——第1章,第1.2节剖析Android系统架构
本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第1章,第1.2节剖析Android系统架构,作者 李骏,更多章节内容可以访问云栖社区"异步社区"公众 ...
- Android系统架构及生态链
目录 一.Android系统架构 二.Android生态链 一.Android系统架构 最底层是 Linux Kernel 层.Android OS 的基石是 Linux Kernel Android ...
- 安卓进阶之android系统架构
安卓进阶之android架构 安卓进阶躲不开阅读源码和深入了解安卓的底层,这是一篇入门级别的文章,可以对安卓架构有个大体的认识. AOSP与Android系统架构 首先要理解andriod和AOSP的 ...
最新文章
- MyBatis点滴积累
- CSS布局之-水平垂直居中
- OS_CORE.C(10)
- ABAP [div '/'] 的区别与妙用
- request的setAttribute()怎么用的?
- 【深度学习】研究揭秘:神经网络越大、表现越好的“神秘力量”
- vue office在线编辑_VUE和Antv G6实现在线拓扑图编辑
- 人工神经网络模型与分类
- Java Bullshifier –生成大量随机代码库
- JavaScript中带有示例的Math.max()方法
- Maven学习总结(16)——深入理解maven生命周期和插件
- vxworks驱动开发基础
- Linux下的HDFS命令
- python 拼音性命按照姓出现的次数排序_Python按姓氏排序字典列表
- 所谓的进步和提升,就是完成认知升级
- iOS主线程卡顿监测
- 从零开始的MYSQL数据库命令行使用指南
- 分布式锁的实现【转载】
- 算法--分治法归并排序 python
- (转载)FPGA工程师必上的论坛