java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_On



我正在开发一个包含本地代码的android应用程序

首先,我编译了一个预构建的库。Android.mk文件是项目路径/jni/qt库/Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := qt5Core-prebuilt
LOCAL_SRC_FILES := libQt5Core.so
LOCAL_EXPORT_C_INCLUDES += qtbase/include
include $(PREBUILT_SHARED_LIBRARY)

然后我编译我的库,其Android.mk文件为project_path/jni/my-library/Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myLibrary
LOCAL_SRC_FILES := com_example_qtsignaux_Library.cpp
LOCAL_SRC_FILES += Receiver.cpp
LOCAL_SRC_FILES += Emitter.cpp
LOCAL_SRC_FILES += moc_Receiver.cpp
LOCAL_SRC_FILES += moc_Emitter.cpp
LOCAL_SHARED_LIBRARIES := qt5Core-prebuilt
LOCAL_C_INCLUDES += ../qt-library/qtbase/include
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

当我使用ndk构建脚本编译jni文件夹时,一切都很好,但在调用时会出现以下错误:

  static {
    System.loadLibrary("myLibrary");
  }
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.qtsignaux-1/lib/arm/libmyLibrary.so"

注意,我解压缩了apk文件夹和每个库:libQt5Core.so、libmyLibrary.so和libgnustl_shared.so都在lib/armabi/和lib/armeabi-v7a/文件夹中

我的Application.mk文件看起来像:

APP_ABI += armeabi armeabi-v7a
APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions 

我真的不明白这个错误意味着什么,也不明白为什么系统试图加载application_package_name/lib/arm文件夹中的库。这个文件夹真的存在吗?或者在我的情况下这只是armeabi和armeabi-v7a?

提前感谢您的帮助

我终于解决了我的问题。这是因为libQt5Core.so文件

实际上,这个库实现了JNI_OnLoad()函数,在该函数中,它试图加载外部jar文件中包含的一些java类。

为了解决我的问题,我在/libs 中包含了正确的jar文件

最新更新