android NDK,在另一个android NDK项目中使用已编译的.so库中的函数

时间:2012-11-07 09:54:07

标签: android android-ndk shared-libraries

我的问题是,我不知道如何调用函数表单.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 从这一点来说,我不知道如何使用该库。如何调用该库中的任何函数?

1 个答案:

答案 0 :(得分:0)

从我对问题的理解,你已经编写了一个so文件,它运行起来让我们说项目A及其工作。现在,您想在项目B中使用它。 您不能直接在Project B中使用编译库。问题是您的功能 代码中的签名。对于不同的包名,相应的功能签名将会改变。

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

}

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

这是它的工作原理项目B将调用jar,它将调用编译的so文件并将结果返回给A.