Java调用C++
静态注册
1.1将需要用本地代码实现的Java方法加上native声明
1.2使用javac命令编译Java类
1.3使用javah命令生成.h头文件
1.4使用本地语言实现头文件中声明的方法
1.5将本地代码编译生成动态链接库
1.6在Java类中加载这一动态链接库
C++调用Java
为了能获取java层面的一些参数或调用java层的函数
jni调用java对象的方法
调用对象的某个方法 Call<返回类型>Method<传参类型>,比如调用AppInfo
的getVersionCode
对应的就是CallIntMethod
,调用setVersionCode
对应的就是CallVoidMethod
方法
jni获取java对象的属性值
获取java对象的属性对应的值的方法为GetXXXXField
,XXXX 为数据类型,比如GetIntField
,GetShortField
等等,如果不是基本型则为GetObjectField
,如果属性为static
的则加上Static
,比如GetStaticIntField
,GetStaticObjectField
。在jni中是不看成员变量的作用域的,不管你是private
,protected
,public
的,加finnal
也一样,它都可以读取里面的值,和反射不一样
-
基础类型
java c++ size/type
| boolen | jboolean | unsigned 8 |
| byte | jbyte | signed 8 |
| char | jchar | unsigned 16 |
| short | jshort | signed 16 |
| int | jint | signed 32 |
| long | jlong | s 64 |
| float | jfloat | s 32 |
| double | jdouble | s 64 |
| void | void | 0 |
-
引用类型
java c++ All objects jobject java.lang.Class 实例 jclass java.lang.String 实例 jstring arrays jarray Object[] jobjectArray boolean[] jbooleanArray byte[] jbyteArray