android jni 的编写二 (NDK 开发中动态注册Jni)

原创 2016年08月31日 12:12:12
NDK 开发中动态注册Jni.在framework开发中经常见到的是动态注册,但是这需要android的一些特定的api.最近看了一些jin文章觉得也可以NDK也支持动态注册。首先看一下头文件,在NDK中有jni.h参看jni.h 在后边有这两个函数,说明NDK是支持动态注册的。

点击(此处)折叠或打开

  1. /*
  2. * Prototypes for functions exported by loadable shared libs. These are
  3. * called by JNI, not provided by JNI.
  4. */
  5. JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved);
  6. JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved);

而我们经常使用的另外一个头文件JNIHelp.h 在dalvik/libnativehelper 目录下,这个是android针对jni的一些封装。
development/samples/SimpleJNI给我们提供了一个例子,在这个例子中告诉我们动态注册的函数是怎样实现的。这就替换掉了
AndroidRuntime::registerNativeMethods(env,"sunniwell/stb/NetWorkNative", gMethods, NELEM(gMethods));


点击(此处)折叠或打开

  1. /*
  2. * Register several native methods for one class.
  3. */
  4. static int registerNativeMethods(JNIEnv* env, const char* className,
  5.     JNINativeMethod* gMethods, int numMethods)
  6. {
  7.     jclass clazz;

  8.     clazz = env->FindClass(className);
  9.     if (clazz == NULL) {
  10.         LOGE("Native registration unable to find class '%s'", className);
  11.         return JNI_FALSE;
  12.     }
  13.     if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
  14.         LOGE("RegisterNatives failed for '%s'", className);
  15.         return JNI_FALSE;
  16.     }

  17.     return JNI_TRUE;
  18. }

  19. /*
  20. * Register native methods for all classes we know about.
  21. *
  22. * returns JNI_TRUE on success.
  23. */
  24. static int registerNatives(JNIEnv* env)
  25. {
  26.   if (!registerNativeMethods(env, classPathName,
  27.                  methods, sizeof(methods) / sizeof(methods[0]))) {
  28.     return JNI_FALSE;
  29.   }

  30.   return JNI_TRUE;
  31. }

另外就是一些C++对象的处理。在framework中类一般要继承Ref 类,实现对象的自动管理。在Ndk 中要使用C++ 标准的new delect 。
另外一些就是java异常的处理要使用jni.h 中提供的api 
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

NDK开发 从入门到放弃(二:动态注册JNI、多JNI调用)

动态注册JNI、多JNI调用

Android Studio JNI 的静动态注册开发以及C/C++ JNIEnv的理解

看到这个题目似乎有点啰嗦,分两块: 一是关于JNI开发的静动态注册,因为涉及到一点逆向上的安全问题,因此有必要进行细细的琢磨和加以区别; 二是在关于JNI的开发过程中对于用.c与.cpp不同文件时注意...

Android JNI学习笔记(二)-动态注册native函数

1.前言在很久之前的一篇Android 开发艺术探索的笔记当中,学习了简单的jni开发流程,但是那会的步骤极其繁琐复杂,而且生成的头文件函数太长,那么,有没有方法能解决呢,让开发过程变得简单易懂。当然...

简单实现Android NDK编译jni调用动态库开发

做开发也有点时间了,之前就一直没有接触过jni相关的知识,换了一家公司跟硬件打交道的不得不学习起来,几经波折终于有点心得,所以特别分享一下!...

Android NDK编写之JNI规范升级版

  • 2013年12月02日 14:24
  • 603KB
  • 下载

Android底层开发jni_ndk视频教程

  • 2017年10月30日 17:44
  • 126B
  • 下载

android Jni NDK开发环境搭建及其简单实例的编写

android  jni-ndk开发, 环境搭建:http://blog.csdn.net/nxh_love/article/details/30993255 实例参考文章:http://...
  • rong_wz
  • rong_wz
  • 2015年03月22日 13:45
  • 427

Eclipse Android NDK JNI 详细开发流程

  • 2011年09月01日 11:25
  • 1.13MB
  • 下载

Android ndk开发swig编译jni接口配置文件(二)

之前写过一篇Android ndk开发swig编译jni接口。看这篇看不懂,看以去看看。c++与Java有些语言结构还是有一定区别,比如c++结构体,一些函数的返回值等都是有所不同,进行swig编译要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android jni 的编写二 (NDK 开发中动态注册Jni)
举报原因:
原因补充:

(最多只允许输入30个字)