步骤:

1.通过类名获取jclass对象

2.通过jclass对象拿到jmethodId

3.通过JNIEnv*对象调用jmethodId对象

  1. JNIEXPORT void JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_sayHello
  2. (JNIEnv *env, jobject obj, jstring str){
  3. //1.通过反射拿到 class
  4. //     jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
  5. //env :jni指针对象  ,"com/vincent/jni/callback/JNI_dataprovider" 类全名
  6. jclass clazz =(*env)->FindClass(env,"com/vincent/jni/callback/JNI_dataprovider");
  7. if(clazz==0){
  8. LOGI("find class error");
  9. return;
  10. }
  11. //2.拿到相应方法的methodID
  12. //    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
  13. LOGI("find class success");
  14. // env,clazz(java对象),方法名,方法签名(javap获取)
  15. jmethodID methoID = (*env)->GetMethodID(env,clazz,"javaSayHello","(Ljava/lang/String;)V");
  16. //3.调用方法
  17. //    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
  18. (*env)->CallVoidMethod(env,obj,methoID,str);
  19. }
  20. JNIEXPORT jint JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_subXAndY(
  21. JNIEnv * env, jobject obj, jint x, jint y) {
  22. //1.通过反射拿到 class
  23. //    jclass      (*FindClass)(JNIEnv*, const char*);
  24. jclass clazz2 = (*env)->FindClass(env,
  25. "com/vincent/jni/callback/JNI_dataprovider");
  26. if (clazz2 == 0) {
  27. LOGI("find class error");
  28. return 0;
  29. }
  30. //2.拿到相应方法的methodID
  31. //       jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
  32. LOGI("find class success");
  33. jmethodID methoID2 = (*env)->GetMethodID(env, clazz2, "javaSubXAndY", "(II)I");
  34. //3.调用方法
  35. //   jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);;
  36. return (*env)->CallIntMethod(env, obj, methoID2, x, y);
  37. }

转载于:https://blog.51cto.com/vincenttung/1172568

JNI学习-- C调用java方法相关推荐

  1. JNI中C调用Java方法

     我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...

  2. c jni 调用java_如何使用JNI从C调用JAVA方法

    我想使用JNI( Java Native Interface)来调用特定的java setter方法,将short []缓冲区作为参数传递给它. Java方法实现如下: public void set ...

  3. 【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )

    文章目录 I . 调用 Java 方法流程 II . 获取 jclass 对象 ( GetObjectClass ) III . 获取 jclass 对象 ( FindClass ) IV . JNI ...

  4. JNI基础 c语言调用java方法

    利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法     //打印     public void sayHelloFro ...

  5. 本地方法(JNI)——调用 java 方法

    [0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...

  6. android jni 结构体_Android应用开发Android JNI-c/c++调用java方法

    本文将带你了解Android应用开发Android JNI-c/c++调用java方法,希望本文对大家学Android有所帮助. " Android   JNI-c/c++调用java方法, ...

  7. android JNI基本库(jsting转string和C多线程调用java方法的说明)

    1.JNI开发时经常需要使用到jstring和string的转换,还有C++多线程中使用JNIEnv,因此特意写了这个类,方便以后的开发使用. 注意:  如果要使用打印日志的LOGI和LOGE需要在m ...

  8. c 调用java post方法_C#调用Java方法(详细实例)

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

  9. C#调用Java方法(详细实例)

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

  10. js调用java_Js调用Java方法并互相传参的简单实例

    Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. public class PluginTest extends P ...

最新文章

  1. Unity初学Shadergraph创建着色器学习教程
  2. java开发app启动跳转到一个广告,Android实现点击通知栏后,先启动应用再打开目标Activity...
  3. Oracle 序列的创建和使用
  4. 阿里云服务器被挖矿病毒minerd***的解决方法
  5. ecmsadmin.php空白,帝国CMS 后台登录空白 处理方法一则
  6. 白帽子讲web安全——认证与会话管理
  7. WordPress 添加网页图标
  8. iOS 15泄密,屏下指纹的iPhone 13真的要来了
  9. python-含参函数
  10. Python内置函数(66)——vars
  11. pycharm的使用技巧
  12. 优秀ASP.NET程序员的修炼之路(转)
  13. kettle 下载地址
  14. InnoDB存储引擎的数据存储方式(存储模式)
  15. 离散数学 第十三章 欧拉图与哈密顿图
  16. 数字地与模拟地解释及PBC底线布局
  17. 为什么要使用Memcached
  18. 服务器共享文件夹用户名和密码怎么设置,如何在共享文件夹设登录帐号和密码 - 卡饭网...
  19. 配备透明触摸屏 看3D全息投影概念手机
  20. 【PS功能学习】04:祖传抠图技法

热门文章

  1. python文件和目录访问File and Directory Access
  2. linux中移动光标的命令,linux命令行中常用光标移动快捷键
  3. C#工控上位机实例_HINET智能网关用于三菱FX1S/1N/2N/3S/3G/3UPLC远程编程和上位机监控...
  4. [编程题]vivo智能手机产能
  5. rk3399_android10编译说明
  6. MTK平台调试LCD步骤浅析
  7. Usb设备驱动5:usb-firmware简易框架
  8. Docker入坑指南之EXEC
  9. gitlab私服搭建
  10. Jmeter参数化HTTP request中Send Files With The Request的文件路径和文件名