一、先定义Java方法如下:
public void testParameter(int x) { Log.e(TAG, "C++调用Java x =" + x); } public void testParameter(int x, int y) { Log.e(TAG, "C++调用Java x =" + x + " y = " + y); } public void testParameter(int x, String string) { Log.e(TAG, "C++调用Java x =" + x + " string = " + string); }
二、定义C++函数并进行方法调用
void testParam(JNIEnv *env, jobject thiz) { //获取java对象类 jclass jclazz = env->GetObjectClass(thiz); /** * 获取java对象方法ID * clazz:对象类 * name:方法名 * sig:方法签名 */ jmethodID jmethodID = env->GetMethodID(jclazz, "testParameter", "(I)V"); /** * obj:参数是对象 * methodID: 方法名ID * ... :动态参数(有几个就传几个对应类型的参数) */ int i = 2; env->CallVoidMethod(thiz, jmethodID, i); } void testParam2(JNIEnv *env, jobject thiz) { //获取java对象类 jclass jclazz = env->GetObjectClass(thiz); /** * 获取java对象方法ID * clazz:对象类 * name:方法名 * sig:方法签名 */ jmethodID jmethodID = env->GetMethodID(jclazz, "testParameter", "(II)V"); /** * obj:参数是对象 * methodID: 方法名ID * ... :动态参数(有几个就传几个对应类型的参数) */ int x = 2, y = 3; env->CallVoidMethod(thiz, jmethodID, x,y); } void testParamStr(JNIEnv *env, jobject thiz) { //获取java对象类 jclass jclazz = env->GetObjectClass(thiz); /** * 获取java对象方法ID * clazz:对象类 * name:方法名 * sig:方法签名 */ jmethodID jmethodID = env->GetMethodID(jclazz, "testParameter", "(ILjava/lang/String;)V"); /** * obj:参数是对象 * methodID: 方法名ID * ... :动态参数(有几个就传几个对应类型的参数) */ int i = 2; string str = "测试字符串"; jstring jstr = env->NewStringUTF(str.c_str()); env->CallVoidMethod(thiz, jmethodID, i,jstr); }
三、运行结果

博客介绍了JNI传递参数相关内容。先定义Java方法,接着定义C++函数并进行方法调用,最后给出运行结果,展示了在JNI中实现Java与C++交互传递参数的过程。

3万+

被折叠的 条评论
为什么被折叠?



