上一篇文章讲到了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