在上两篇文章中,
我们介绍了如何为
Android
系统的硬件编写驱动程序,
包括
如何?/p>
Linux
内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实?/p>
这两者的目的是为了向更上一层提供硬件访问接口,即为
Android
?/p>
Application
Frameworks
层提供硬件服务。我们知道,
Android
系统的应用程序是?/p>
Java
语言
编写的,而硬件驱动程序是?/p>
C
语言来实现的,那么,
Java
接口如何去访?/p>
C
?/p>
口呢?众所周知?/p>
Java
提供?/p>
JNI
方法调用,同样,?/p>
Android
系统中,
Java
?/p>
用程序通过
JNI
来调用硬件抽象层接口。在这一篇文章中,我们将介绍如何?/p>
Android
硬件抽象层接口编?/p>
JNI
方法?/p>
以便使得上层?/p>
Java
应用程序能够使用?/p>
层提供的硬件服务?/p>
一
.
参照
?/p>
Ubuntu
上为
Android
增加硬件抽象?/p>
?/p>
HAL
?/p>
模块访问
Linux
内核
驱动程序
一文,
准备好硬件抽象层模块?/p>
确保
Android
系统镜像文件
system.img
?/p>
经包?/p>
hello.default
模块?/p>
?/p>
.
进入?/p>
frameworks/base/services/jni
目录,新?/p>
com_android_server_HelloService.cpp
文件?/p>
USER-NAME@MACHINE-NAME:~/Android$ cd frameworks/base/servic
es/jni
USER-NAME@MACHINE-NAME:~/Android/frameworks/base/services/jn
i$ vi com_android_server_HelloService.cpp
?/p>
com_android_server_HelloService.cpp
文件中,实现
JNI
方法。注意文?/p>
的命令方法,
com_android_server
前缀表示的是包名,表示硬件服?/p>
HelloService
是放?/p>
frameworks/base/services/java
目录下的
com/android/server
目录的,即存
在一个命令为
com.android.server.HelloService
的类。这里,我们暂时略去
HelloService
类的描述,在下一篇文章中,我们将回到
HelloService
类来。简单地
说,
HelloService
是一个提?/p>
Java
接口的硬件访问服务类?/p>
首先是包含相应的头文件:
view plain
1.
#define LOG_TAG "HelloService"
2.
#include "jni.h"
3.
#include "JNIHelp.h"
4.
#include "android_runtime/AndroidRuntime.h"
5.
#include <utils/misc.h>