1. JNIEnv里面常用的方法
2. JNIEnv里面基本数据类型
jstring : java String
jint : java int
jfloat : java float
jdouble : java double
jobj : java object
jintArray : java int []
3. 回收
如 字符串的回收: (*env)->ReleaseStringUTFChars(env,j_uuid,c_uuid);
pbulic Point test (int x, float y) : (IF)Ljava/awt/Point;
String: Ljava/Lang/String
Object [ ] : [L全类名;
4. 常用签名 方法的签名 (参数)返回值
命令: javap -p -s com.amn.JniSimple
5.常量指针
常量变量: 被常量修饰的变量,不能再次被赋值(和java 差不多)const 关键字修饰
如:const int number = 100;
常量指针:关键字const 在指针之前,指针的地址可以修改,指针指向的值不能修改。
如
int num1 = 100;
int num2 = 200;
const int * n_p = &num1;
n_p = &num2;
注: *n_p =300;这样修改指针地址上的内容是不能修改的,n_p=&num2是可以的
6.指针常量:
指针常量: 指针在前,关键字const在后。可以修改内容但是不能修改地址
如:
int num1 = 100;
int num2 = 200;
int * const n_p = &num1;
*n_p = 300;(可以修改地址上的内容)
//n_p = &num2;(不能修改地址)
7.Native 层构建 java对象
1.通过全类名获取jclass:jclass point_clazz = (env)->FindClass(env, "com/amn/Point");
2.获取构造函数 jmethodID : jmethodID j_md = (env)->GetMethodID(env,point_clazz,"<init>","(II)V");
3.构建java层的Point 对象 : jobject point=(*env)->NewObject(env, point_clazz, j_md,10,20);
JNIEXPORT jobject JNICALL java_com_amn_JniSimple_createPoint
(JNIEnv *env, jclass jclz){
//获取Point 的class FindClass(env,"全类名") 注: 全类名要反斜杠
jclass point_clazz = (*env)->FindClass(env, "com/amn/Point");
//构建函数id jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"方法名","签名");
jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"<init>","(II)V");
//构建java层的Point 对象 (*env)->NewObject(env, "构建对象的class","构造函数的id",函数参数)
jobject point=(*env)->NewObject(env, point_clazz, j_md,10,20);
return point;
}
package com.amn;
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
package com.amn;
import java.util.UUID;
public class JniSimple {
static {
System.load("D:/VisualStudio/work_place/NDK_02/x64/Debug/NDK_02.dll");
}
public static void main(String[] args) {
// callStaticMethod();
Point point=createPoint();
System.out.println(point.getX());
}
private native static Point createPoint();
private native static void callStaticMethod();
public static String getUUID() {
return UUID.randomUUID().toString();
}
}
网友评论