4

私の問題は、.soライブラリから関数を呼び出す方法がわからないことです。NDKライブラリspatialite-androidを正常にコンパイルしましたが、androidJavaアプリケーションで問題なく使用できます。しかし、別のNDKプロジェクトでどのように正確に使用するかはわかりません。Android.mkファイルに追加しました:

APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-8

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := UsingSpatialite
LOCAL_SRC_FILES := UsingSpatialite.c

LOCAL_LDLIBS := -llog -lGLESv1_CM

include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH := /home/spatialite/jni
include $(CLEAR_VARS)
LOCAL_MODULE := libjsqlite
LOCAL_SRC_FILES := libjsqlite/libjsqlite.so
include $(PREBUILT_SHARED_LIBRARY)

そして、ライブラリlibjsqlite.so(android-spatialite)が正常に追加されました:libs / armeabi / libjsqlite.soこの時点から、そのライブラリの使用方法がわかりません。そのライブラリから関数を呼び出す方法は?

4

1 に答える 1

0

質問から私が理解していることから、あなたは so ファイルをコンパイルしており、たとえばプロジェクト A とその作業のために実行されます。ここで、 Project B で使用します。プロジェクト B でコンパイル ライブラリを直接使用することはできません。問題は、コード内の関数シグネチャです。パッケージ名が異なると、対応する関数シグネチャが変わります。

JNIEXPORT jint JNICALL Java_com_your_packageA_class_method(JNIEnv *d, jobject e, jstring f)
{
//some action

}

Project B にアクセスできるようにするには、コンパイルした so ファイルでネイティブ関数を呼び出すためのクラスを含む jar が必要です。

これがどのように機能するかです プロジェクト B は jar を呼び出し、コンパイルされた so ファイルを呼び出し、結果を A に返します。

于 2012-11-07T14:29:36.427 に答える