今天写了个android jni app,我的JNI_OnLoad是这么写的:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; jint result = -1; if((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_1) != JNI_OK) { return -1; } if(env == NULL) { return -1; } if(!registerNatives(env)) { return -1; } return JNI_VERSION_1_1; }结果运行后,很简单的代码却出错,查看错误信息为:
java.lang.UnsatisfiedLinkError: Bad JNI version returned from JNI_OnLoad in "/data/app/**.apk/lib/arm64/libsafe.so"
上androidxref查JNI_CreateJavaVM源码可知
android 1.6~4.3 version >= JNI_VERSION_1_2合法
android 4.4~7.1 version == JNI_VERSION_1_2 | JNI_VERSION_1_4 | JNI_VERSION_1_6
从历史急角度看,选用最新JNI版本最合适