4

我的问题是,我不知道如何从 .so 库中调用函数。我已经成功编译了 NDK 库 spatialite-android 并且在 android Java 应用程序中使用它没有问题。但我不知道如何在另一个 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

}

您需要一个包含类的 jar,以使用您编译的 so 文件调用本机函数,以使其可供 Project B 访问。

这就是它的工作方式 Project B 将调用 jar ,这将调用已编译的 so 文件并将结果返回给 A 。

于 2012-11-07T14:29:36.427 回答