设为首页 加入收藏

TOP

Android java层和C层的相互调用
2014-11-24 14:37:04 来源: 作者: 【 】 浏览:3
Tags:Android java 相互 调用

于是,我们可以在JNI_Onload函数里进行一些初始化工作,可以向java层注册c层的native函数,实现java层向c层的调用。


利用传入的vm我们可以得到JNIEnv 指针,然后利用jniResiterNativMetheds函数来实现向java层注册C函数。首先定义一个结构:


static JNINativeMethod sMethods[] = {


/*name,signature,funcptr */


{"close","(I)V" ,(void*)android_close},


{....... },


};


return jniRegisterNativeMethods(env,"com/android/server/AlarmService",sMethods,NELEM(sMethods));


然后在C层实现static void android_close(JNIEnv *env, jobject obj)函数。


OK,到这就可以在java的AlarmService类里声明一个这样的函数:


private static native void close();


调用它就进入了该so模块。所有这一切都是android的java虚拟机帮我们完成的。


反之,利用java虚拟机,我们也可以完成从c层回调java层。利用的还是那个很重要的类变量JNIEnv env.


FindClass();


GetMethodID();


CallObjectMethod();


CallStaticObjectMethod();


具体的细节可以参考手册。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Qt应用中检测内存泄露——VLD 下一篇Python版DNW

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: