我发布的应用程序报告某些设备发生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;