1.2.1 jni经验
1.2.1 jni经验
vimer-hz
书是越读越薄的
展开
-
Local Reference不可存入到一个static变量里,Global Reference可存入一个static变量里
来看下如下代码的stringClass:/* This code is illegal */jstring MyNewString(JNIEnv *env, jchar *chars, jint len){ static jclass stringClass = NULL; jmethodID cid; jcharArray elemArr; jstrin...原创 2019-12-25 15:51:46 · 228 阅读 · 1 评论 -
JNI经验积累
long是基本类型,直接赋值即可。默认情况下是自动转换的。原创 2023-04-11 23:18:28 · 405 阅读 · 0 评论 -
在JNI编程中避免内存泄漏
4 使用 Local reference 时,如果 Local reference 引用了大的 Java 对象,当不再需要访问 Local reference 时,应当调用 JNI 函数 DeleteLocalRef() 删除 Local reference,从而也断开对 Java 对象的引用。进程的很多资源都是存储在 JVM 的 native memory 中,例如载入的代码映像,线程的堆栈,线程的管理控制块,JVM 的静态数据、全局数据等等。运行结果证明,实例 2 的结果与实例 1 的完全相同。转载 2023-04-11 23:06:03 · 738 阅读 · 0 评论 -
JNI/NDK开发指南
这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法。2:本地代码不应在 JVM 内部分配新对象:为什么不能分配新对象?这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。下面通过一个示例来了解在JNI中是如何调用对象构造方法和父类实例方法的。再次调用newString接口,cls_string变为野指针!一维数组中套一维数组,就形成了一个所谓的二维数组。问题:PC环境是指不用手机实际测试么?isCopy一直以来,都用错了!一、访问基本类型数组。转载 2023-04-11 22:57:54 · 93 阅读 · 0 评论 -
FindClass
FindClassjclass FindClass(const char* name)返回一个类的引用env->FindClass("java/lang/String");env->FindClass(HELLOLIBS_JNI_CLASS_NAME);#define HELLOLIBS_JNI_CLASS_NAME "com/test/hello_libs/...原创 2019-12-26 10:19:18 · 2545 阅读 · 1 评论 -
GetStringLength与GetStringUTFLength的区别
代码:jclass strCls = env->FindClass("java/lang/String");jmethodID mid = env->GetMethodID(strCls,"<init>","([C)V");jstring strUnicode = env->NewStringUTF("aaa"); jint len = env-&...原创 2019-12-26 15:10:32 · 4191 阅读 · 1 评论 -
截断jboolean类型问题
jboolean是一个8位的unsigned类型,值范围为0~255.0对应JNI_FALSE,1~255对应JNI_TRUE.对于32位或16位的变量a赋值给jboolean时,如果a的低8位为0会出现逻辑问题.代码:void print(jboolean condition){ if (condition) { printf("true\n"); ...原创 2019-12-28 17:48:41 · 771 阅读 · 0 评论 -
缓存域ID(Filed ID)和方法ID(Method ID)
下面举例说明了没有缓存域ID可能带来的bug:class C { private int i; native void f();}(1)不缓存域ID:1) 获取对象的类,GetObjectClass.2) 找出变量i的域ID,GetFieldID.3) 基于域ID获取域值,GetIntField.// No field IDs cached.JNIE...原创 2020-01-04 10:44:14 · 477 阅读 · 1 评论 -
Accessing Arrays
分两种情况:(1)基本元素数组(2)对象数组(1)基本元素数组(i)拷贝基本元素数组:JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr){ jint buf[10]; jint i, sum = 0; (*env)->...原创 2020-01-04 16:28:37 · 144 阅读 · 1 评论 -
jni层设置对象数组到java层
java层:class RECT{ int left; int top; int right; int bottom;} public class HAND{ public RECT[] prtHands; public HAND(){ }}jni层:#define HAND_JNI_...原创 2020-01-04 17:51:31 · 793 阅读 · 1 评论 -
java层传递byte[][]到jni层
java层:public class ANIM{ public byte[][] mAnim;}ANIM anim = new ANIM();anim.mAnim = new byte[2][];anim.mAnim[0] = new byte[512];anim.mAnim[0][0] = 1;anim.mAnim[1] = new byte[512];anim.mA...原创 2020-01-06 10:22:50 · 1243 阅读 · 1 评论