JNI开发基础(二)

本文介绍了JNI开发中如何从C/C++调用Android Java方法,包括普通方法、构造函数,以及处理中文字符、传递和返回数组的方法。还讨论了JNI引用类型(局部引用、全局引用、弱全局引用)、异常处理和缓存策略等关键点。
摘要由CSDN通过智能技术生成

上一篇文章讲到了C/C++端调用Android端的属性,下面接着上篇文章。

1、C/C++访问java方法:
在Android端写一个产生随机方位的随机数的方法

    public int genRandomInt(int max){
        Log.e("TAG","getRandomInt被调用了");
        return new Random().nextInt(max);
    }

函数声明为:
public native void accessMethod();

JNI中函数:

extern "C"
JNIEXPORT void JNICALL
Java_com_sportmoo_jni01_MainActivity_accessMethod(JNIEnv *env, jobject jobj) {
    // jclass
    jclass  cls = env->GetObjectClass(jobj);
    //jmethodId
    jmethodID mid = env->GetMethodID(cls, "getRandomInt", "(I)I");
    //调用
    jint random = env->CallIntMethod(jobj, mid, 200);
}

其中,在上面得到函数id的时候,三个参数,一个是jclass,一个是Android中方法名,一个是数据类型的签名,详情见上一篇文章的最后表格,也可以利用javap函数查找。
这里写图片描述
列出所有的属性已经方法,找到需要的那个签名类型。

访问静态方法与访问方法类似,不同的是:

1、GetStaticMethodID vs GetMethodId
2、CallStatic<Type>Method vs Call<Type>Method

2、C/C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值