欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Jni遇到的常见异常和解决办法

程序员文章站 2022-05-16 16:16:47
android jni遇到的常见异常和解决办法 local reference table overflow (max=512) 当使用了大量的局部引用而没有及时释放的话,就可能出现局部引用表溢出,...

android jni遇到的常见异常和解决办法

local reference table overflow (max=512)

当使用了大量的局部引用而没有及时释放的话,就可能出现局部引用表溢出,所以变量用完以后回收一下就可以了,需要注意的是参数传的是jobject类型

(*env)->deletelocalref(env, jobject);
input is not valid modified utf-8: illegal start byte 0xa9

当调用(*env)->newstringutf时会出现,是因为传进去的char*不是utf-8,转成utf-8即可;

还有一种方法是转成jbytearray,传到java后再转成string。

c

void test(const char *text) {
 int len = strlen(text);
 if (len > 0) {
  jbytearray text_bytes = (*env)->newbytearray(env, len);
  //将c字符串转成jbytearray
  (*env)->setbytearrayregion(env, text_bytes, 0, len, (jbyte *) text);
  //回调给java
  (*env)->callvoidmethod(env, jobject, "javatest", text_bytes);
  (*env)->deletelocalref(env, text_bytes);
 }
}

java

public void javatest(byte[] textbytearray) {
 string text = new string(textbytearray);
}