C/C++调用Java函数参数和返回值均为String类型;
Java的CCallJavaTools类:
package com.niubashaoye.ndk.jni;
public class CCallJavaTools {
/**
* C/C++调用Java函数传递String参数并返回String类型值
*
* @param str
* @return
*/
public String simpleStr(String str) {
return str + ",你好!我是牛八少爷!";
}
}
Java调用C/C++传递参数:
Java的JNITools类中的native函数:
/**
* 简单的参数和返回值都是String类型
*
* @param str
* @return
*/
public native String simpleStr(String str);
Java调用native:
JNITools jniTools=new JNITools();
String resultStr = jniTools.simpleStr("欧阳无敌");
C/C++函数调用Java函数:
/*
* Class: Java_com_niubashaoye_ndk_jni_JNITools_simpleStr
* Method: simpleStr
* Signature: (Ljava/lang/String;)Ljava/lang/String;
* 参数类型和返回类型都是String的函数
*/
JNIEXPORT jstring JNICALL Java_com_niubashaoye_ndk_jni_JNITools_simpleStr(
JNIEnv *env, jobject obj, jstring str) {
//获取java传递的参数
const char *strCont = env->GetStringUTFChars(str, JNI_FALSE);
//通过反射获取java类
jclass ccallj = env->FindClass("com/niubashaoye/ndk/jni/CCallJavaTools");
//实例化该类
jobject jobj = env->AllocObject(ccallj);
//得到方法id
//参数列表:反射类,方法名称,方法签名
jmethodID methodId = env->GetMethodID(ccallj, "simpleStr",
"(Ljava/lang/String;)Ljava/lang/String;");
//调用方法
jstring result = (jstring) env->CallObjectMethod(jobj, methodId,
env->NewStringUTF(strCont));
return result;
}
执行流程:Java调用C/C++的SimpleStr函数并传递String参数,C/C++调用Java的CCallJavaTools类的SimpleStr,并对参数进行追加返回给C/C++函数,C/C++函数又返回Java调用native函数;
代码下载:https://download.csdn.net/download/niuba123456/10533304
代码下载:https://download.csdn.net/download/niuba123456/10533304