一、实现的功能

以DHT11温湿度传感器为例,实现一个简单的Android硬件访问服务。实现的功能是:通过编写Android APP来读取温湿度的数值并将它们显示出来。

二、基本的开发环境

PC端 :

操作系统 Ubuntu12.04

交叉编译工具版本 gcc version 4.5.1

开发板:

友善之臂 Tiny4412(Cortex-A9)

操作系统 Android-5.0.2

内核版本 Linux-3.0.86

三、基本的开发流程

51c06ee96a041c70e676af456cb573e9.png

通过对上图进行分析,可以看出,编写一个Android硬件访问服务所涉及的基本的层级结构:

Dht11 driver 层 :Android系统是基于Linux开发出来的,所以在很多时候Android驱动程序的开发就等于Linux驱动程序的开发(有一些是针对Android平台开发的特定驱动,如Binder、Ashmem等),这部分的实现可以参考这篇博文:http://blog.csdn.net/tech_pro/article/details/70231235,这里就不再进行赘述。

HAL 层 :HAL的全称是Hardware Abstract Layer,即硬件抽象层。它是用C/C++编写而成,从上图也可以看出,它的主要功能是向下访问驱动程序来驱动硬件,向上提供访问接口,起到承上启下的作用。

JNI 层 : JNI的全称是Java Native Interface,即Java本地化访问接口,我们知道Android系统的上层是用Java语言来编写的,Android APP也几乎都是用Java语言编写的,但Android系统底层为了实现对硬件的访问和提高系统的性能,几乎都是用C/C++来编写的。这样就引出了一个问题,用Java语言编写的程序如何和用C/C++编写的程序之间实现相互调用呢,而JNI就是用来实现这样的功能,关于JNI的具体介绍请参看相关的数据或者文章。

Service Layer :系统服务层,Android系统的核心就是服务,服务又分为应用服务和系统服务两大类,系统服务又分为本地系统服务和Java系统服务。本文所讲的服务属于系统服务,实现的功能较为简单。Android系统为了更好的实现对硬件资源的管理,所以对硬件的操作也放在了Android的系统服务中来实现。

Application : Android的应用程序,通过编写Android应用程序来访问硬件系统服务并最终驱动硬件。

从上面分析可以看出,构建一个简单的Android硬件服务所涉及的基本步骤:编写硬件驱动、HAL、JNI、Service、Android APP。本文采用自顶向下的开发方式,先实现Service层,再实现JNI和HAL层,驱动层已经完成,不需要额外实现,最后来编写一个Android应用程序进行测试。具体实现,请参考后续博文。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐