C代码回调java方法

* ① 找到字节码对象 
    *  //jclass      (*FindClass)(JNIEnv*, const char*); 
    *  //第二个参数 要回调的java方法所在的类的路径 "com/itheima/callbackjava/JNI"


* ② 通过字节码对象找到方法对象
    * //jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
    * 第二个参数 字节码对象 第三个参数 要反射调用的java方法名 第四个参数 要反射调用的java方法签名
    * javap -s 要获取方法签名的类的全类名 项目/bin/classes 运行javap 


* ③ 通过字节码创建 java对象(可选) 如果本地方法和要回调的java方法在同一个类里可以直接用 jni传过来的java对象 调用创建的Method
    * jobject obj =(*env)->AllocObject(env,claz);
    * 当回调的方法跟本地方法不在一个类里 需要通过刚创建的字节码对象手动创建一个java对象
    * 再通过这个对象来回调java的方法
    * 需要注意的是 如果创建的是一个activity对象 回调的方法还包含上下文 这个方法行不通!!!回报空指针异常 


* ④ 反射调用java方法
    * //void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
    * 第二个参数 调用java方法的对象 第三个参数 要调用的jmethodID对象 可选的参数 调用方法时接收的参数 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值