一 、背景:
app包直接运行debug版本不会报错,打包release版就会崩溃,日志定位到 jni 函数位置;
二、jni 函数主要内容
char result;
jobject resultObj = (*env)->CallObjectMethod(env, instance, midGet, ipStr);
const char *result_str = (*env)->GetStringUTFChars(env, resultObj, NULL);
strcpy((char *) result, result_str);
char *p;
strtok_r(result, ",", &p);
strtok_r(NULL, ",", &p)
strtok_r(NULL, ",", &p)
(*env)->ReleaseStringUTFChars(env, resultObj, result_str);
(*env)->DeleteLocalRef(env, resultObj);
三、分析
刚开始看到jni报错第一反应是分割字符串是不是出问题了,最后问题在于对 char result 没有分配空间,照理说直接运行应该会报错,但是debug版本没错,在release的时候才会;
char result[128];