我有一个已发布的应用程序,它在某些设备上报告java.lang.UnsatisfiedLinkError
崩溃。更确切地说,在应用程序崩溃与下面的日志消息启动: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
工具链编译的,而我用下面的Android.mk
文件整合他们在我的项目运行nkd-build
:
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。
我认为这可能是一个架构问题或安装过程中的一个奇怪的问题。
有谁知道这个问题可能是什么?
UPDATE:
我意识到,我可以重现该问题在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问题。以防万一,以防万一。 – 2013-03-04 18:03:29
Seva Alekseyev是对的,也许你可以尝试创建一个Application.mk文件(如果你还没有它): APP_ABI:= armeabi armeabi-v7a – Esparver 2013-03-05 19:42:20