我有一个已发布的应用程序,报告某些设备上的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;

最佳答案

在这种情况下,问题在于该库正在使用Android 2.2上不支持的某些C方法

link是发现问题的方法。

直到Android 2.3(source)才在系统的C库中实现pthread_rwlock_init之类的方法。

关于android - 在某些设备上java.lang.UnsatisfiedLinkError崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15207237/

10-12 00:35
查看更多