手机移动访问 m.wenshu999.com
热搜: 心得体会  合同  年终总结
当前位置:首页 > 论文 > 论文范文

安卓设备管理论文

更新时间:2023-11-20 14:28:44 编辑:www.wenshu999.com

  近几年来,随着移动互联网时代的到来,Android操作系统已经从最初的智能手机领域逐渐进入教育、医疗、军事、汽车、家居等重要领域,并已经成为移动平台领域当之无愧的王者。

  【1】基于安卓车载终端平台的设备管理框架构建

  摘要

  2011 年1月至3月,Android占领了全球大部分的手机市场,市场份额首次超过了塞班系统上升到全球第一[1];

  2012 年第一季度数据显示,Android占领了中国68.4%的智能手机操作系统市场,在全球市场占有率为52.5%[2].

  Android在 国内的发展不仅仅局限于作为智能手机操作系统,现在已经开始向作为其他移动终端操作系统的方向发展,例如移动互联网设备、数字机顶盒、车载移动终端等领域。

  Android平 台是一个标准的通用平台,而在多媒体车载终端项目中增加了许多Android原生系统中没有的设备,例如DVD、GPIO、音频管理设备等。

  针对这些设备的控制,在Android原 生 系 统 中 最 常 用 的 做 法 就 是 使 用JNI方 式 进 行控 制。

  JNI是Java Native Interface的缩写,即“Java本地接口”.在Android系统代码层次结构中,JNI处于Java代码层与C/C++本地代码层之间的位置。

  在Android系统中提供JNI机制,使得在Java虚拟机内部运行的Java代码能够调用C/C++本地层的应用程序和库,从而将Java代码和C/C++本地层代码紧密联系在一起[3].但 是,在Android车 载终端平台上使用常规JNI方式进行设备管理的缺点在于:

  使 用JNI方 式 进 行 应 用 程 序 开 发 需 要 同 时 实 现Java、JNI、C/C++ 3个层次的代码,开发工作量大,开发难度也较大;应用程序如果要移植到其它平台上,C/C++本地层代码需要重新编写,移植的工作量较大;

  从逻辑结构方面考虑,一个JNI动 态库一般只适合管理一个外围设备,随着外围设备的不断增加,难以对这些设备进行统一管理;而且系统使用过程中存在多个应用程序同时访问一个设备的可能,易造成设备访问不可控,系统稳定性差。

  此外,Java虚拟机为Java代码提供了完善的安全机制使得Java代码不会导致程序崩溃、滥用数据等,而一旦使用了JNI机制,这种安全机制就无能为力了[4].

  可见,在包含较多非Android原始设备的Android车载终端平台上,对这些设备进行统一管理变得非常重要。

  为了实现 对 这 些 设 备 的 统 一 管 理,本 文 提 出 并 设 计 了 一 种 基 于Android Local Socket 和 Service 的方式,实现专门针对 Android车载终端平台的设备管理框架。

  该框架能够实现对系统中非Android 原生的众多设备进行统一控制和管理。

  1 设备管理框架的逻辑结构图

  基于 Android 车 载终 端 平 台 的 设 备 管 理 框 架 的 逻 辑 结构,如图 1 所示。

  设备管理框架的逻辑结构图

  设备管理框架包括下述层次:应用程序、设备管理服务、守护进程、设备功能动态库、内核设备驱动,以及设备硬件。

  2 设备管理框架的实现原理

  按照从上到下的调用层次关系,整个设备管理框架的设计实现原理如下。

  2.1 应 用程序层

  系统中对设备管理框架的调用操作均由应用程序发起。

  Android 应 用程序通过服务绑定接口绑定设备管理服务,绑定之后应用程序可获得设备管理服务中的 DVD、GPIO、音频管 理 等 所 有 设 备 的 AIDL(Android Interface DefinitionLanguage, 即 Android 接 口描述语言)接口。

  这些接口就是DVD、GPIO、 音 频 管 理 等 所 有 设 备,通 过 设 备 管 理 服 务 的AIDL 接 口提供给应用程序调用的功能接口。

  2.2 设备管理服务层

  设备管理服务位于 Android 系统中的 Java 框架层,介于Android 应 用 程 序 和 设 备 管 理 守 护 进 程 之 间,并 通 过 提 供AIDL 接 口为应用程序提供接口调用。

  设备管理服务向上层应用程序提供 AIDL 调用接口,与下层的设备管理守护进程通过 Socket 通信方式进行数据通信,作用至关重要。

  通过对整个设备管理框架的功能划分,设备管理服务需要实现如下功能:

  1)设 备管理服务感知应用程序的调用操作,并将应用程序 的 调 用 转 化 为 命 令 格 式,并 将 这 个 命 令 通 过 AndroidLocal Socket(本 质上即为 Socket 套 接字)通信传送给设备管理守护进程进行处理。

  2)建 立和维护与设备管理守护进程之间的数据通信,确定一套合理规范的通信协议。

  由于传输命令的内容较为简单,设备管理服务向设备管理守护进程传输的命令格式定义为:“Device Name @ Function # parameter1 # parameter2 # …#parameter N”,其中“Device Name” 表 示设备名称,“Function” 表示 功 能 接 口 名 称,“parameter1#parameter2#…#parameter N”则表 示 传 递 的 参 数,参 数 之 间 使 用 符 号 '#' 分 隔。

  以 命 令“GPIO@GPIOUP#fmpowon” 为 例,其 中“GPIO” 表 示 设 备 名称,“GPIOUP”表示功能接口名称,“fmpowon”表示功能接口的参数。

  3) 为 DVD、GPIO、 音 频 管 理等 每 个 设备 各 创 建(即 手 动编辑生成)一个 AIDL 接口文件,以供应用程序调用。

  这里的AIDL 文 件只是接口声明,需要在设备管理服务的其它 Java文件中完成这些 AIDL 接口的代码实现,实现的主要内容是生成命令格式并向守护进程发送该命令。

  由于设备管理服务对应用程序提供了设备管理框架内管理的所有设备的功能接口,设备管理服务的主要功能之一就是生成命令格式,命令格式中的“Device Name”字段即包含了要调用的外围设备模块,设备管理服务通过这个字段就可以将 AIDL 接口与外围设备联系起来。

  4) 能 稳定地为 Android 应 用程序提供服务,数据处理及时,协调应用程序之间的执行和数据同步。

  2.3 设 备管理守护进程层

  设备管理守护进程位于 Android 系统中的 HAL 层(即硬件抽象层),介于设备管理服务和设备功能动态库之间,通过Android Local Socket 与上层的设备管理服务 进 行数 据 通 信,向下层则调用相应设备功能动态库提供的接口,起着信息枢纽的作用。

  通过对整个设备管理框架的功能划分,设备管理守护进程需要实现如下功能:

  1)通过 Local Socket 与上层的设备管理服务层进行Socket数据通信,通过发送心跳包检测链路机制监测和更新上层客户端的连接情况,准确接收设备管理服务层发送的命令包并解析命令格式。

  2)根 据设备管理服务中规定的命令格式,从接收到的命令中解析得到调用的目标设备名称,这里假设是“GPIO”设备,如果是第一次调用该设备,则首先加载该设备的功能动态库,然后调用设备功能动态库中的初始化接口 XXXinit(其 中“XXX” 是 从 命 令 中 解 析 得 到 的 设 备 名 称),

  例 如GPIOinit,进 行初始化工作,否则直接调用该设备功能动态库 的 命 令 处 理 接 口 XXXprocess Cmd,例 如 GPIOprocessCmd,进 行处理。

  3)由 于有些功能接口存在获取响应数据的需求,这要求设备管理守护进程能够接收来自设备功能动态库的响应数据并向设备管理服务层进行传递,传递的数据封装格式定义为:设 备 名 称 +'@' + 功 能 接 口 名 称 +'#' + 有 效 数 据。

  以“AUDIO@Get Main Volume#80” 为 例, “AUDIO” 表 示 音 频 管 理设备名称,“Get Main Volume”表示功能接口名称,即获取系统主音量,“80”表示有效数据,即音量值。

  4) 能稳定地为设备管理服务层提供 Socket 连接的服务端,数据处理及时、可靠。

  2.4 设备功能动态库层

  在 Linux 系统中,Linux 内核提供了用户空间与内核空间进行交互的一组接口,即系统调用。

  这些系统调用接口允许应用程序受限地访问硬件设备。

  系统调用是应用程序访问内核空间的唯一手段;除了异常和陷入以外,它们是访问内核唯一的合法入口[5].

  设备管理框架中采用设备功能动态库和设备管理守护进程分离的设计思想。

  设备功能动态库主要封装与内核设备驱动进行交互的接口,应用程序向硬件模块传递的命令也将到达设备功能动态库。

  即设备功能动态库向上层提供接口给设备管理守护进程调用,通过 Linux 系统调用向下层调用内核设备驱动。