0

JNI 経由でネイティブ C 呼び出しを Java に公開する .so ファイルを作成しました。これはうまく機能し、C コードでシステム ライブラリを使用するだけで、アプリを Android システムにデプロイできます。ただし、他の .so ファイル内の関数を呼び出したい場合、プロジェクトを正しくリンクできません。

たとえば、「libMyJNILibrary.so」を生成するために使用している「MyJNILibrary.c」コードから呼び出すことができる C で定義された API を含む「libotherso.so」ファイルがあるとします。

Android.mk ファイルを次のように変更しようとしました。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c

LOCAL_LDLIBS += -lotherso

include $(BUILD_SHARED_LIBRARY) 

しかし、これで ndk-build を呼び出すと、-lotherso を見つけるエラーが発生します。「libotherso.so」ファイルをどこに置いて、ndk-build が取得できるようにしますか?

ご協力いただきありがとうございます。

4

1 に答える 1

5
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := otherso
LOCAL_SRC_FILES := ../lib/libotherso.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c
LOCAL_SHARED_LIBRARIES := otherso
include $(BUILD_SHARED_LIBRARY) 

LOCAL_SRC_FILES は LOCAL_PATH に対して相対的であることに注意してください。

独自の JNI ライブラリの前に依存関係をロードすることを忘れないでください。

static {
  System.loadLibrary("otherso");
  System.loadLibrary("MyJNILibrary");
}
于 2013-01-17T09:25:46.507 に答える