JNI学习-- C调用java方法
步骤:
1.通过类名获取jclass对象
2.通过jclass对象拿到jmethodId
3.通过JNIEnv*对象调用jmethodId对象
- JNIEXPORT void JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_sayHello
- (JNIEnv *env, jobject obj, jstring str){
- //1.通过反射拿到 class
- // jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
- //env :jni指针对象 ,"com/vincent/jni/callback/JNI_dataprovider" 类全名
- jclass clazz =(*env)->FindClass(env,"com/vincent/jni/callback/JNI_dataprovider");
- if(clazz==0){
- LOGI("find class error");
- return;
- }
- //2.拿到相应方法的methodID
- // jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
- LOGI("find class success");
- // env,clazz(java对象),方法名,方法签名(javap获取)
- jmethodID methoID = (*env)->GetMethodID(env,clazz,"javaSayHello","(Ljava/lang/String;)V");
- //3.调用方法
- // void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
- (*env)->CallVoidMethod(env,obj,methoID,str);
- }
- JNIEXPORT jint JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_subXAndY(
- JNIEnv * env, jobject obj, jint x, jint y) {
- //1.通过反射拿到 class
- // jclass (*FindClass)(JNIEnv*, const char*);
- jclass clazz2 = (*env)->FindClass(env,
- "com/vincent/jni/callback/JNI_dataprovider");
- if (clazz2 == 0) {
- LOGI("find class error");
- return 0;
- }
- //2.拿到相应方法的methodID
- // jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
- LOGI("find class success");
- jmethodID methoID2 = (*env)->GetMethodID(env, clazz2, "javaSubXAndY", "(II)I");
- //3.调用方法
- // jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);;
- return (*env)->CallIntMethod(env, obj, methoID2, x, y);
- }
转载于:https://blog.51cto.com/vincenttung/1172568
JNI学习-- C调用java方法相关推荐
- JNI中C调用Java方法
我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...
- c jni 调用java_如何使用JNI从C调用JAVA方法
我想使用JNI( Java Native Interface)来调用特定的java setter方法,将short []缓冲区作为参数传递给它. Java方法实现如下: public void set ...
- 【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )
文章目录 I . 调用 Java 方法流程 II . 获取 jclass 对象 ( GetObjectClass ) III . 获取 jclass 对象 ( FindClass ) IV . JNI ...
- JNI基础 c语言调用java方法
利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法 //打印 public void sayHelloFro ...
- 本地方法(JNI)——调用 java 方法
[0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...
- android jni 结构体_Android应用开发Android JNI-c/c++调用java方法
本文将带你了解Android应用开发Android JNI-c/c++调用java方法,希望本文对大家学Android有所帮助. " Android JNI-c/c++调用java方法, ...
- android JNI基本库(jsting转string和C多线程调用java方法的说明)
1.JNI开发时经常需要使用到jstring和string的转换,还有C++多线程中使用JNIEnv,因此特意写了这个类,方便以后的开发使用. 注意: 如果要使用打印日志的LOGI和LOGE需要在m ...
- c 调用java post方法_C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- js调用java_Js调用Java方法并互相传参的简单实例
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. public class PluginTest extends P ...
最新文章
- Unity初学Shadergraph创建着色器学习教程
- java开发app启动跳转到一个广告,Android实现点击通知栏后,先启动应用再打开目标Activity...
- Oracle 序列的创建和使用
- 阿里云服务器被挖矿病毒minerd***的解决方法
- ecmsadmin.php空白,帝国CMS 后台登录空白 处理方法一则
- 白帽子讲web安全——认证与会话管理
- WordPress 添加网页图标
- iOS 15泄密,屏下指纹的iPhone 13真的要来了
- python-含参函数
- Python内置函数(66)——vars
- pycharm的使用技巧
- 优秀ASP.NET程序员的修炼之路(转)
- kettle 下载地址
- InnoDB存储引擎的数据存储方式(存储模式)
- 离散数学 第十三章 欧拉图与哈密顿图
- 数字地与模拟地解释及PBC底线布局
- 为什么要使用Memcached
- 服务器共享文件夹用户名和密码怎么设置,如何在共享文件夹设登录帐号和密码 - 卡饭网...
- 配备透明触摸屏 看3D全息投影概念手机
- 【PS功能学习】04:祖传抠图技法
热门文章
- python文件和目录访问File and Directory Access
- linux中移动光标的命令,linux命令行中常用光标移动快捷键
- C#工控上位机实例_HINET智能网关用于三菱FX1S/1N/2N/3S/3G/3UPLC远程编程和上位机监控...
- [编程题]vivo智能手机产能
- rk3399_android10编译说明
- MTK平台调试LCD步骤浅析
- Usb设备驱动5:usb-firmware简易框架
- Docker入坑指南之EXEC
- gitlab私服搭建
- Jmeter参数化HTTP request中Send Files With The Request的文件路径和文件名