动态注册jni函数
来源:互联网 发布:c语言幻数 编辑:程序博客网 时间:2024/06/04 20:08
android系统中,JNI的注册对文件的路径与名字有特定的规范,以下以模块ModuleAAA的开发为例来说明JNI调用的使用方法。
1、在frameworks/base/core/java/android/hardware/路径下创建文件ModuleAAA.java 声明本地方法。
其内容大致如下:
package android.hardware;
public class ModuleAAA{
public void modulePowerOn(){
JNI_modulePowerOn();
}
public void modulePowerOff(){
JNI_modulePowerOff();
}
private static native int JNI_modulePowerOn();
private static native int JNI_modulePowerOff();
}
ModuleAAA.java解说:(1) 方法 modulePowerOn() 与 modulePowerOff() 作为向JAVA层提供的接口,应用程序可通过如下方式调用此JNI接口:
import android.hardware.ModuleAAA;
public class xxxxx extends Activity{
private ModuleAAA instance = new ModuleAAA(); //创建实例
public void function_B {
instance.modulePowerOn();
instance.modulePowerOff();
}
}
(2)方法 JNI_modulePowerOn() 与 JNI_modulePowerOff() 为 android_hardware_moduleAAA.cpp 中数组 static JNINativeMethod gMethods[] 中声明的函数
2、 在frameworks/base/core/jni/ 路径下创建文件 android_hardware_moudleAAA.cpp ,实现本地方法。
其内容大致如下:
#include "jni.h"
#include "JNIHelp.h"
#include "android_runtime/AndroidRuntime.h"
...#include ...
using namespace android ;
void xxxCCC ()
{
....
}
void xxxDDD ()
{
....
}
/********************************************************************
* Current JNI
*******************************************************************/
/* native interface */
static jint android_hardware_modulePowerOn
(JNIEnv *env, jobject object)
{
...
xxxCCC();
return 0;
}
static jint android_hardware_intercomPowerOff
(JNIEnv *env, jobject object)
{
...
xxxDDD();
return 0;
}
/*
* JNI registration.
*/
static JNINativeMethod gMethods[] = {
{ "JNI_modulePowerOn", "()I",
(void*)android_hardware_modulePowerOn},
{ "JNI_modulePowerOff", "()I",
(void*)android_hardware_modulePowerOff},
};
int register_android_hardware_moduleAAA(JNIEnv* env)
{
return jniRegisterNativeMethods(env, "android/hardware/ModuleAAA", gMethods, NELEM(gMethods));
}
android_hardware_moudleAAA.cpp解说:
(1).语句jniRegisterNativeMethods(env, "android/hardware/ModuleAAA", gMethods, NELEM(gMethods));中声明了声明本地方法的类的路径 android/hardware/ModuleAAA(其前缀还有frameworks/base/core/java/);
(2).数组static JNINativeMethod gMethods[]的第一个变量名必须与.java声明的方法名字一致;
(3).数组static JNINativeMethod gMethods[]的第三个变量名为其对应的本地方法名字;
(4).可以本地方法(如android_hardware_modulePowerOff)中调用C函数。
(5)数组JNINativeMethod 的用法 详见 http://blog.csdn.net/duxingke15/article/details/7357587
3、修改frameworks/base/core/jni/Android.mk,将实现本地方法的源码(android_hardware_moduleAAA.cpp)添加到系统中
LOCAL_SRC_FILES += android_hardware_moduleAAA.cpp
4、修改frameworks/base/core/jni/AndroidRuntime.cpp,注册JNI方法
extern int register_android_hardware_intercom(JNIEnv* env); //声明外部jni函数,见android_hardware_moduleAAA.cpp
static const RegJNIRec gRegJNI[] = {
...
...
REG_JNI(register_android_hardware_moduleAAA), //注册Jni函数
...
};
至此完成jni方法的注册。
- 动态注册jni函数
- android 动态注册Jni函数
- JNI函数的动态注册
- Android 动态注册JNI函数
- Android 动态注册JNI函数
- [Android]JNI动态注册Java函数教程
- Android开发值JNI函数动态注册
- [JNI学习]---JNI动态注册
- 动态注册JNI
- 动态注册JNI
- jni动态注册
- 动态注册JNI
- JNI动态注册
- 动态注册JNI
- 动态注册JNI
- Android 动态注册JNI
- 动态注册JNI
- jni动态注册
- VBS与.Net Jet共同实现将大量数据导入Excel
- 出现"eh.h is only for C++!"错误的解决方法
- json解析的简单例子
- 第六周实验报告5
- Android录制音频
- 动态注册jni函数
- soket编程
- Groovy小应用-文件拷贝
- 【搜索】Dancing Links——01矩阵
- js jquery 在弹出对话框里写内容后获取有动画效果
- 为什么在Kconfig添加了模块,然后在make menuconfig中找不到选项
- jquery.ui.draggable中文文档jquery 自由拖拽类~study~
- zhk7jx
- jquery插件笔记