fdio vpp与app软件架构对比:解析架构差异

Android系统到底是什么样子的?app为什么能够在Android系统中运行,怎样运行的。

下图是官方标准的Android系统架构图:

fdio vpp 软件架构 app软件架构图_应用程序

(蓝色:java程序,java代码编写;黄色:运行JAVA程序而实现的虚拟机;绿色:C/C++语言编写的程序库;红色:linux内核+driver)



由上图我们知道Android系统分为四层:

1、Applications(应用程序层):就是我们的app层,各种app。

2、Framework(应用程序架构层):提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发。Activity、Service、Notification等等都是framework提供给我们的。

应用程序框架层类库名称功能
活动管理器(Activity Mananger)管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
窗口管理器(Window Manager)对所有开启的窗口程序进行管理
内容提供器(Content Provider)提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
视图系统(View System)创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器。
通知管理器(Notification Manager)使应用程序可以在状态栏中显示自定义的客户提示信息
包管理器(Package Manager)对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
资源管理器(Resource Manager)提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
位置管理器(Location Manager)提供位置服务
电话管理器(Telephony Manager)管理所有的移动设备功能
XMPP服务是Google在线即时交流软件中一个通用的进程,提供后台推送服务

我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。


1.用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。


2.用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。



3、Libraries(系统运行时库层):从系统结构图,这层有两个部分。

3.1、Librares:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。各类库说明如下:

系统类库名称说明
Surface Manager执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持
Media Framework基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
SQLite本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API
OpenGL|ES基于OpenGL ES 1.0API标准实现的3D跨平台图形库
FreeType用于显示位图和矢量字体
WebKitWeb浏览器的软件引擎
SGL底层的2D图形引擎
Libc(bionic l ibc)继承自BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备
SSL安全套接层,是为网络通信提供安全及数据完整性的一种安全协议



3.2、Android runtime(Core Librares + Dalvik虚拟机):

Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机(JVM),并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。(这里提到java虚拟机,简单叙述一下与Dalvik虚拟机区别:a、java虚拟机运行的是.class,Dalvik虚拟机运行的是.dex;b、java虚拟机基于栈架构。程序在运行时虚拟机需要频繁的从栈上读取或写入数据。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快的多)

关于Dalvik虚拟机这是比较低版本4.4以下的了,从android4.4开始就出现了ART(android runtime),用来代替Dalvik的新型运行环境。当然在4.4的正式环境中用的还是Dalvik,真正开始用ART取代Dalvik是从android5.0开始的。在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升(这里不进行详细讨论)。

这里还有个重点,在上一层(Framework层:java代码)与这一层(系统运行时库层:C\C++代码)他们又是怎么能调用的呢?这里就涉及到了一个JNI:

JNI:Java本地接口( Java Native Interface),它是一个协议。用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码。

涉及到JNI的开发,又要说NDK了。

NDK:Google开发的一套开发和编译工具集, 主要用于Android的JNI开发,是一个用于开发JNI的工具。

这里涉及到的JNI与DNK不进行详细,只是简单叙述一下感念。



4、Linux Kernel(linux内核层):提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。作为一个应用层开发者,这一层可以不太深入研究。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空