私は、次の3つの部分で構成される非常に単純なAndroidアプリケーションの開発を開始しました。
- Javaアプリケーション自体
- 構築済みの共有ライブラリ(これを呼びます
libfoo
) - ビルド済みのライブラリを使用する別の共有ライブラリ(これを呼びます
libfoowrapper
)
ファイルシステムは次のようになります。
jni
Android.mk
libfoo.so
foowrapper.c
このAndroid.mk
ファイルには、次の内容が含まれています。
LOCAL_PATH := $(call my-dir)
#==============================
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)
#=========================
include $(CLEAR_VARS)
LOCAL_MODULE := foowrapper
LOCAL_SRC_FILES := foowrapper.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
Eclipseでアプリケーションをビルドすると、問題なく動作しているように見えます。エラーは報告されていません。ただし、アプリケーションをSamsung Discover(Android 4.0.4を実行)にアップロードすると、ログに次のエラーが表示されます。
03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found)
.so.0
Dalvikがファイルではなくファイルを探しているのはなぜ.so
ですか?このエラーを取り除くには、アプリにどのような変更を加える必要がありますか?