JNI开发之方法签名与Java通信(二),请查收

本文详细介绍了JNI中如何访问Java的静态和非静态方法、字段,包括创建Java类实例、更新字段内容、处理异常以及常用函数封装。通过示例代码展示了JNI与Java之间的交互过程。
摘要由CSDN通过智能技术生成

jni代码

//访问Java中的show方法
JNIEXPORT void JNICALL Java_com_zzy_ndkdemo_MainActivity_showString(JNIEnv *env, jobject instance, jstring s) {

//获取instance的类名称
jclass cls = (*env)->GetObjectClass(env,instance);
if(cls==NULL)
{
LOGD(“Class %s not found”);
}

//获取方法ID,第二个参数为类名称,第三个参数为方法名称,第三个参数为方法签名,详细参见签名对照表
jmethodID id =(*env)->GetMethodID(env,cls,“show”,"(Ljava/lang/String;)V");
if(id !=NULL)
{
//访问方法,第二个为类实例,第三个参数为方法ID,第四和第四以后为方法参数,
// 根据返回类型不同,调用不同的CallXXXMethod方法,xxx返回类型
(*env)->CallVoidMethod(env,instance,id,s);
}
}

2.4、jni访问java中的静态方法

java代码

public static void showStatic(String s){
Log.i(“MainActivity”,“show static:”+s);
}
public native void showStaticString(String s);

jni代码

//访问Java中的showStatic静态方法
JNIEXPORT void JNICALL Java_com_zzy_ndkdemo_MainActivity_showStaticString(JNIEnv *env, jobject instance, jstring s) {

//获取instance的类名称
jclass cls = (*env)->GetObjectClass(env,instance);
if(cls==NULL)
{
LOGD(“Class %s not found”);
}

//获取静态方法ID,第二个参数为类名称,第三个参数为方法名称,第三个参数为方法签名,详细参见签名对照表
jmethodID id =(*env)->GetStaticMethodID(env,cls,“showStatic”,"(Ljava/lang/String;)V");
if(id !=NULL)
{
//访问方法,第二个为类名称,第三个参数为方法ID,第四和第四以后为方法参数,
// 根据返回类型不同,调用不同的CallStaticXXXMethod方法,xxx返回类型
(*env)->CallStaticVoidMethod(env,cls,id,s);
}
}

1、从中我们可以看出静态方法比非静态方法的访问多加了一个static,访问函数由类实例,变成类引用。

2、如果静态方法不存在instance类中,我们可以通过FindClass进行访问,其中第二个参数为类的全路径

jclass cls = (*env)->FindClass(env, “com/zzy/ndkdemo/JniDemo”);
if (cls == NULL) {
LOGD(“Class %s not found”);
}

2.5、jni访问java中的字段

java代码

User user = new

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值