Android NDK jni调用java类的方法

前言
在NDK开发中,jni和java方法互调也是常用的,下面做个笔记记录下
1.实例化java类,然后对方法赋值

JNIEXPORT jobject JNICALL Java_com_darren_ndk_day13_Simple1_createPoint
(JNIEnv *env, jclass jclz){
	// jclz -> Simple1
	// 获取 Point 的 class ,name = "全类名"
	jclass point_clz = (*env)->FindClass(env,"com/darren/ndk/day13/Point");
	// 构建 java 层的 Point 对象,构造函数的id , 构造方法 <init>
	jmethodID j_mid = (*env)->GetMethodID(env,point_clz,"<init>","(II)V");
	jobject point = (*env)->NewObject(env, point_clz, j_mid,11,22);
	// 练习一下 y 重新付个值 ?调用 set 方法
	j_mid = (*env)->GetMethodID(env, point_clz,"setY","(I)V");
	/* va_list 集合
	void (JNICALL *CallVoidMethodV)
		(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
	// jvalue
	void (JNICALL *CallVoidMethodA)
		(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
	*/
	(*env)->CallVoidMethod(env, point,j_mid,33);
	return point;
}

2.获取java类的属性

JNIEXPORT void JNICALL Java_com_darren_ndk_day13_Simple1_callStaticMethod
(JNIEnv *env, jclass jclz){
	// 2.获取 methodId
	jmethodID j_mid = (*env)->GetStaticMethodID(env,jclz,"getUUID","()Ljava/lang/String;");
	// 1. 调用 getUUID 的方法 static 
	jstring j_uuid = (*env)->CallStaticObjectMethod(env, jclz,j_mid);
	// jstring -> c_str
	char* c_uuid = (*env)->GetStringUTFChars(env,j_uuid,NULL);
	// 回收,字符串回收 
	(*env)->ReleaseStringUTFChars(env,j_uuid,c_uuid);
	printf("c_uuid = %s",c_uuid);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值