这篇文章运用简单易懂的例子给大家介绍详解jni中的java接口的使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
项目需求,需要在c++函数中监听相应的状态,并在java端进行一些列的处理。
这个需要在jni中写一个订户,注册后在需要的地方进行引入使用。
初始化是当上的c++工程文件,这边先暂时实现简单的演示,CdemoActivity是NativeActivity的实现,我们暂时别管,因为实现是c++层控制的,有兴趣可以去百度下
公共类JNIUtil { 静态{ System.loadLibrary (“native-event"); }//注册函数 公共静态原生空隙setJniCallBack (JniCallBack回调);//解注册函数 公共静态原生空隙unJniCallBack (); 公共接口JniCallBack { 空白>////创建86130年> # include & lt; jni.h> # include & lt; malloc.h> # include & lt; cstring> # include“jnicallback.h" # ifdef __cplusplus 外来的“C" { # endif JavaVM * g_VM; jobject用户; 外来的“C" JNIEXPORT空白JNICALL Java_com_demo_cdemo_JNIUtil_setJniCallBack (JNIEnv * env, jclass clazz, jobject call_back) { env→GetJavaVM(及g_VM); 用户=env→NewGlobalRef (call_back); } 外来的“C" JNIEXPORT空白JNICALL Java_com_demo_cdemo_JNIUtil_unJniCallBack (JNIEnv * env, jclass clazz) { 如果(订户!=NULL) { env→DeleteGlobalRef(订户); } } JNIEnv * getEnv () { JNIEnv * env; 如果(g_VM==NULL) { 返回NULL; } int envStat=g_VM→GetEnv (void * *), env, JNI_VERSION_1_6); 如果(envStat==JNI_EDETACHED) { 如果(g_VM→AttachCurrentThread(及env, NULL) !=0) { 返回NULL; } } 返回env; } jmethodID getMethodIdByNameAndSig (JNIEnv * env, const char *名字,const char *团体) { 如果(env==NULL | |用户==NULL) { 返回NULL; } jclass subscriberClass=env→GetObjectClass(订户); 如果(用户==0) { 返回NULL; } jmethodID methodId=env→GetMethodID (subscriberClass、名称、团体); 如果(methodId==0) { 返回NULL; } 返回methodId; }//头文件方法实现 空白>项目(Native-Activity) cmake_minimum_required(3.4.1版) #引入native_app_glue头文件 include_directories (F:/AndroidSdk/Sdk/ndk-bundle/资源/android/native_app_glue) add_library (native-activity共享 main.cpp jnicallback.cpp) add_library (native-event共享jnicallback.cpp) find_library (log-lib日志) find_library (OPENGLES3_LIBRARY GLESv3“OpenGL ES v3.0 library") find_library (EGL_LIBRARY EGL“EGL 1.4 library") find_library (android-lib android) #编译为静态库 add_library (app_glue静态 android_native_app_glue.c) target_link_libraries (native-event $ {log-lib} #链接日志库 $ {android-lib} #链接android库 ) target_link_libraries (native-activity app_glue #链接静态库native_app_glue $ {log-lib} #链接日志库 $ {android-lib} #链接android库 $ {OPENGLES3_LIBRARY} #链接opengl库 $ {EGL_LIBRARY} #链接EGL库 )
JNIUtil的使用
包com.demo.cdemo; 进口android.app.NativeActivity; 进口android.content.Intent; 进口android.os.Bundle; 进口android.os.Looper; 进口android.util.Log; 公开课CdemoActivity延伸NativeActivity { 静态{ System.loadLibrary (“native-activity"); } 布尔isFirst=false; @Override 保护空白>关于详解jni中的java接口的使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。详解jni中的java接口的使用