这是我第一次决定写这篇文章,但我很长时间成功使用了stackoverflow,感谢那些花时间帮助别人的人! :)
现在,我还没有找到关于此的信息,我正在尝试使用在我的Android应用程序中使用Qt的库。问题是我无法加载libQt5Core.so。运行Android时会抛出 unsatisfiedLinkError:unknown failure 。
我试图以两种方式加载它
第一个,拥有自己的Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Qt5Core
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libQt5Core.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include \
$(LOCAL_PATH)/include/QtCore
include $(PREBUILT_SHARED_LIBRARY)
第二个,手动将其添加到lib目录。
我以这种方式从Native.java文件加载库:
System.loadLibrary("gnustl_shared");
System.loadLibrary("Qt5Core");
System.loadLibrary("mysharedlibray");
System.loadLibrary("thewholelibrary");
我 mysharedlibrary 有一个Makefile,它是使用Qt的库。 整个库包含jni代码和mysharedlibrary,我用ndk-build创建它。
我从 Necessitas 包中获得了 libQt5Core.so ,我想我可以从 Necessitas 系统中使用它。
我也想在Qt“内部”创建一个“独立的共享库”mysharedlibrary(因为我在Android中没有使用Qt的jt“但它不允许我这样做。
非常感谢!
答案 0 :(得分:1)
要在Android项目中加载libQt5Core.so
,您应该将依赖项添加到QtAndroid-bundled.jar
。您可以在jar目录下的Qt安装目录中找到该文件。完成此步骤后,您可以在不System.loadLibrary("Qt5Core");
的情况下致电UnsatisfiedLinkError
。
原因:QtCore的JNI_OnLoad
在启动时会加载一个名为QtNative
的活动,如果找不到则会返回JNI_ERR
。 QtNative
中定义了QtAndroid-bundled.jar
。我在这里说道:https://stackoverflow.com/a/25856689/1091536
答案 1 :(得分:-1)
我找到了一个解决方案:
static {
try {
System.loadLibrary("gnustl_shared");
System.loadLibrary("Qt5Core");
}
catch( UnsatisfiedLinkError e ) {
System.err.println("Native code library failed to load.\n" + e);
}
System.loadLibrary("mysharedlibray");
System.loadLibrary("thewholelibrary");
}
如果您的图书馆使用Qt,但只在其内部工作。