JNI个人笔记1

JNI方法记录

java声明lib.so


static{
	System.loadLibrary("lib");
}

c++ 字符串 转 Java 字符串
env->NewStringUTF(“xxxx”);

javah -classpath (class路径)

JNIEXPORT jstring JNICALL Java_com_example_hellojni_stringFromJNI(JNIEnv *,jobject);

JNIEnv是指向可用JNI函数表的接口指针, jobject是HelloJni类实力的Java对象引用

原生代码可通过JNIEnv 调用Java方法

Java类型 | 原生类型

java.lang.Class -> jclass
java.lang.Throwable -> jthrowable
java.lang.String -> jstring
Other objects -> jobjects
java.lang.Object[] -> jobjectArray
boolean[] -> jbooleanArray
byte[] -> jbyteArray
char[] -> jcharArray
short[] -> jshortArray
int[] -> jintArray
long[] -> jlongArray
float[] -> jfloatArray
double[] -> jdoubleArray

字符串操作

创建字符串

jstring javaString;
javaString = env->NewStringUTF(“xxx”);

将 Java 字符串转换成 C字符串

const jbyte* str;
jboolean isCopy;

str = env->GetStringUTFChars(javaString, &isCopy);

释放字符串

JNI GetStringChars 函数 和 GetStringUTFChars 获得的C字符串在原生代码中使用完需要释放

env->ReleaseStringUTFChars(javaString, str);

数组操作

1.创建数组

jintArray javaArray;
javaArray = env->NewIntArray(10);
if(0 != javaArray) {
	
}

2.访问数组元素

2.1 将java数组转换为c数组

对副本的操作

jint nativeArray[10];
env->GetIntArrayRegion(javaArray,0,10,nativeArray);

再通过 env->SetArrayRegion(javaArray, 0, 10, nativeArray);

2.2 通过JNI提供直接指向数组元素的指针

对直接指针的操作

jint* nativeDirectArray;
jboolean isCopy;

获取
Get<Type>ArrayElements;

nativeDirectArray = env->GetIntArrayElements(javaArray, &isCopy);
释放
Release<Type>ArrayElements;

释放模式

0 -> 将内容复制回来并释放原生数组
JNI_COMMIT -> 将内容复制回来但是不释放原生数组
JNI_ABORT -> 释放原生数组但不用将内容复制回来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值