JNI开发-C/C++获取Java的静态全局变量

       在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();

/**
	 * 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);
}

		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

 

 

代码下载:https://download.csdn.net/download/niuba123456/10533304

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值