我想使用其他项目的本地库。这是我的图书馆。
这是我第一次在android studio中使用ndk。我成功加载库.so,但是当我想访问该文件时失败了。这是错误
这是我加载库的java代码。
这是我的主要java代码
你能解决我的问题吗?谢谢
使用link到评论中提供的示例项目,生活非常简单。
您需要在项目中使用https://github.com/CassieLuoli/react-native-smartconnection/blob/master/android/src/main/java/com/mediatek/demo/smartconnection/JniLoader.java as is
文件。从GitHub下载它而不更改类名或包,并在Java应用程序中使用它,就像它们在example中一样。
您缺少C部分中的JNI图层。要让Java本机接口GetLibVersion()
能够在C部分中找到匹配的函数,您需要使用Java_ai_widya_mediatekso_JniLoader_GetLibVersion(JNIEnv *env, jobject thiz)
定义C函数名称,因为崩溃日志告诉您。不要错过C函数中的JNI参数。
如果要在C部分中具有与Java部件完全相同的功能名称,则可以向JVM注册新名称。在JNI_Onload()中调用以下函数。
static int registerNativeMethods(JNIEnv* env)
{
jclass clazz;
const char* className = "ai/widya/mediatekso/JniLoader";
clazz = env->FindClass(className);
if (clazz == NULL) {
ALOGE("Native registration unable to find class '%s'", className);
return JNI_FALSE;
}
JNINativeMethod methods[] = {
{"GetLibVersion", "()V", (void*) GetLibVersion },
{"GetProtoVersion", "()V", (void*) GetProtoVersion },
};
if (env->RegisterNatives(clazz, methods, 2) < 0) {
ALOGE("RegisterNatives failed for '%s'", className);
return JNI_FALSE;
}
return JNI_TRUE;
}
并且不要忘记将JNI参数添加到C函数中,例如GetLibVersion(JNIEnv *env, jobject thiz)
。