【发布时间】:2017-07-14 01:13:39
【问题描述】:
我有一个已发布的应用程序在某些设备上报告java.lang.UnsatisfiedLinkError 崩溃。更准确地说,应用程序在启动时崩溃并显示以下日志消息:
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load qcc: findLibrary returned null
实际的崩溃是在System.loadLibrary("qcc"); 指令中,所以应用肯定找不到库。
问题是我自己无法重现该问题。实际上,同一个 apk 在许多不同的设备和版本上都能完美运行。
该应用程序使用由第三方编写和编译的两个 C 库。它们是使用arm-linux-androideabi-4.6 工具链编译的,我将它们集成到运行nkd-build 的项目中,并使用以下Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libqcc
LOCAL_SRC_FILES := qcc/libqcc.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libqpe
LOCAL_SRC_FILES := qpe/libqpe.so
include $(PREBUILT_SHARED_LIBRARY)
在不同的设备上报告该错误,但目前它们都是以下 Android 版本之一:2.2、2.2.1 或 2.2.2。
我认为这可能是架构问题或安装过程中的奇怪问题。
有人知道问题出在哪里吗?
更新:
我意识到我可以在 Android 2.2 模拟器中重现该问题。这是我可以从 logcat 收集的额外信息。
11:14:59.962 I/dalvikvm( 287): Unable to dlopen(/data/data/.../lib/libqcc.so): Cannot load library: link_image[1995]: failed to link libqcc.so
11:14:59.962 W/dalvikvm( 287): Exception Ljava/lang/UnsatisfiedLinkError;
【问题讨论】:
-
可能是 armeabi 与 armeabi-v7a 的问题。为两者构建,以防万一。
-
Seva Alekseyev 是对的,也许您可以尝试使用以下行创建一个 Application.mk 文件(如果您还没有):APP_ABI := armeabi armeabi-v7a
标签: android android-ndk