通过JNI实现Java和C++的相互调用_王肇朋的博客-CSDN博客
java调用c/c++
1.java 定义native方法 hello()
2.编译工程java类成class文件
3.执行javah 类路径名 生成.h文件 也就是c++入口声明 Java_包名(.用_代替)_java方法名
4.编写cpp文件和函数
例如上面 报名 com.test
生产的c++入口就是 Java_com_test_hello 这样这个名称也是唯一的
c/c++调用java呢
类似于反射
- /得到class
- jclass jclazz = (*env)->GetObjectClass(env,jobj);
- //jfieldID
- //签名:类型的简称
- //属性,方法
- jfieldID fid = (*env)->GetFieldID(env,jclazz,"name","Ljava/lang/String;");
- //获取key属性的值
- //注意:key为基本数据类型,规则如下
- //(*env)->GetIntField(); (*env)->Get<Type>Field();
- jstring jstr = (*env)->GetObjectField(env,jobj,fid);
- //jstring转为 C/C++字符串
- char * c_str = (*env)->GetStringUTFChars(env,jstr,NULL);
-
- strcat(c_str,"android");
- //拼接完成之后,从C字符串转为jstring
- jstring jstr_new = (*env)->NewStringUTF(env,c_str);
- //修改key的属性
- //注意规则:Set<Type>Field
- (*env)->SetObjectField(env,jobj,fid,jstr_new);
-
- return jstr_new;
(140条消息) AndroidStudio jni C++与Java互相调用_天空中的野鸟的博客-CSDN博客_android c++调用java