java.lang.UnsatisfiedLinkError
一部のデバイスでクラッシュを報告している公開アプリケーションがあります。より正確に言うと、起動時にアプリがクラッシュし、次のログメッセージが表示されます。
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load qcc: findLibrary returned null
実際のクラッシュはSystem.loadLibrary("qcc");
命令に含まれているため、アプリはライブラリを確実に検出していません。
問題は、自分で問題を再現できなかったことです。実際、同じapkは多くの異なるデバイスやバージョンで完全に機能します。
このアプリは、第三者によって作成およびコンパイルされた2つの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です。
アーキテクチャの問題か、インストール中の奇妙な問題のいずれかである可能性があると思います。
誰かが問題が何であるか知っていますか?
アップデート:
Android2.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;