どのように事前に構築された共有ライブラリをapkにeclipseで含めるか

libfoo.soという共有ライブラリがあり、Androidアプリで使用する必要があります。

私の最初の試みはAndroid.mkにあることでした:

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo
include $(BUILD_SHARED_LIBRARY)

私の活動では、私は持っています:

statis
{
    System.loadLibrary("foo");
}

これは正しくビルドされていますが、作成されたapkにはlibfoo.soが含まれていないことに気付きました(libs/armeabiにはコピーされていません)。私は私のアプリを実行するときUnsatisfiedLinkErrorを持っている理由を推測する。

私は他の投稿で$(PREBUILD_SHARED_LIBRARY)を追加する必要があることを知ったので、Android.mkに以下を追加します:

include $(CLEAR_VARS)
LOCAL_MODULE:= foo
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
include $(PREBUILD_SHARED_LIBRARY)

しかし、今私はビルドエラーを取得しています:

foo: LOCAL_SRC_FILES points to a missing file.

パスが正しいと確信しています。 libfoo.soは最後にバージョン番号を持っていたことに注意してください.ndk-buildが不平を言ってから削除しなければなりませんでした。

私は間違って何をしていますか?

7

3 答え

解決策を見つけた! LOCAL_SRC_FILESには絶対パスまたは相対パスは使用できません。ファイル名のみです。パスはLOCAL_PATHに設定する必要があります。

だから私の場合は、代わりに:

LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so

私が今持っています:

LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so

そして、これは大丈夫です。

5
追加された
Downvote。 LOCAL_SRC_FILESには絶対に相対パスを含めることができます。
追加された 著者 Paul Du Bois,
ちょっと..あなたはそれにいくつかの光を置くことができます。同じ問題に直面している。私は3つの.soファイルを読み込み、何を.mkファイルに書き込むべきですか?
追加された 著者 Chaitanya Chandurkar,
はい、それは相対的な道を持つことができると同意した
追加された 著者 pauld,
絶対パスがありますか?
追加された 著者 Kadinski,

インクルードが誤っているように見える:

include $(PREBUILD_SHARED_LIBRARY)

すべきである

include $(PREBUILT_SHARED_LIBRARY)
5
追加された

eclipseでは、パスproject/libs/armeabi /にあるファイルをコピーして静的ライブラリを追加し、プロジェクトをクリーニングした後にプロジェクトを再構築します。これにはapkの.soも含まれます。

1
追加された
これは私のためには機能しません(ADT22、Indigo、ndk-r9)。 libはビルド時に削除されます。
追加された 著者 WindRider,