Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183914
  • 博文数量: 57
  • 博客积分: 719
  • 博客等级: 上士
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 17:15
文章分类

全部博文(57)

文章存档

2014年(1)

2013年(18)

2012年(9)

2011年(22)

2010年(7)

分类: LINUX

2010-12-20 10:35:02

android sensor 驱动以及app 的应用:是kernel到app的逐层封装

1. kernel中队硬件的操作,hardware 对kernel封装,jni 将hardware转换为java的接口
   hardware部分
./libhardware/include/hardware/sensors.h
./telechips/tcc92xx/module/sensors/sensors.c
   jni部分
frameworks/base/core/jni/android_hardware_SensorManager.cpp
   java的实现部分
frameworks/base/core/java/android/hardware  

2. framework部分给应用部分提供所需要的so,jni 主要通过JNINativeMethod实现
typedef struct{
        const char* name; /*JNI函数的名称*/
        const char* signature;/*描述JNI函数的参数和返回值*/
        void* fnPtr ;/*JNI对应的C语言的函数指针*/
};
在使用JNI,需要注意JNI函数的参数和返回值的类型,在JAVA中,定义函数由JNI实现时,需要指定为 native,并且使用参数和返回值与JNI中定义相一致。

比如:在JNI中声明JAVA 与 C 的关系;
static JNINativeMethod gMethods[] = {
       {"nativeClassInit","()V",       (void*)nativeClassInit},
       {"sensors_module_init","()I",   (void*)sensors_modules_init},
       {"sensors_module_get_next_sensor","Landroid/hardware/Sensor;I",             (void*)sensors_data_open},   /*将hardware的data_open 函数进一步封装*/   
};

通过 jniRegisterNativeMethods(env,"",gMethods,NELEM(gMethods))注册完成,注册之后还需要获取java环境以及向java中本地方法。
注册的接口:./dalvik/libnativehelper

3. 应用部分
应用部分的程序为*.apk,在应用部分中需要加载JNI的库与调用本地接口
system.loadLibrary("libName")
声明JNI的接口,以及直接将so载入








阅读(921) | 评论(0) | 转发(0) |
0

上一篇:2010_1214 build_1

下一篇:2010_1222_binder

给主人留下些什么吧!~~