在JNI开发时,C/C++函数有时需要获取Java的静态全局变量,此篇主要是获取CCallJavaTools静态全局变量strContent2;
1. Java的com.niubashaoye.ndk.jni.CCallJavaTools类:
public class CCallJavaTools {
public int num = 2017;
public String strContent = "我是牛八少爷!";
public static String strContent2 = "我是欧阳少爷!";
}
2. Java的 com.niubashaoye.ndk.jni.JNITools的native函数:
/**
* c获取java的全局静态变量
*
* @return
*/
public native String globalStaticVariables();
3. C/C++的函数:
jstring getstringByObjInfo(JNIEnv *env, jclass jcs, jobject cobj,
const char * fileName);
jint getIntByObjInfo(JNIEnv *env, jclass jcs, jobject cobj,
const char * fileName);
/*
* Class: com_niubashaoye_ndk_jni_JNITools
* Method: globalStaticVariables
* Signature: ()Ljava/lang/String;
* 访问全局静态变量
*/
JNIEXPORT jstring JNICALL Java_com_niubashaoye_ndk_jni_JNITools_globalStaticVariables(
JNIEnv *env, jobject obj) {
jclass jcs = env->FindClass("com/niubashaoye/ndk/jni/CCallJavaTools");
jfieldID fileID = env->GetStaticFieldID(jcs, "strContent2",
"Ljava/lang/String;");
jstring str = (jstring) env->GetStaticObjectField(jcs, fileID);
return str;
}
/**
* 通过int类型变量名称获取值
*/
jint getIntByObjInfo(JNIEnv *env, jclass jcs, jobject cobj,
const char * fileName) {
jfieldID fileId = env->GetFieldID(jcs, fileName, "I");
//获取int的值
return env->GetIntField(cobj, fileId);
}
/**
* 通过String类型变量名称获取值
*/
jstring getstringByObjInfo(JNIEnv *env, jclass jcs, jobject cobj,
const char * fileName) {
jfieldID fileId = env->GetFieldID(jcs, fileName, "Ljava/lang/String;");
//获取String的值
return (jstring) env->GetObjectField(cobj, fileId);
}
4. Java调用native函数:
resultStr = jniTools.globalStaticVariables();
代码下载: https://download.csdn.net/download/niuba123456/10533304