【问题标题】:android NDK, use functions from compiled .so library in another android NDK projectandroid NDK,在另一个 android NDK 项目中使用编译的 .so 库中的函数
【发布时间】:2012-10-27 08:39:29
【问题描述】:

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

【问题讨论】:

    标签: android android-ndk shared-libraries


    【解决方案1】:

    根据我从问题中了解到的情况,您已经编译了一个 so 文件,并且它运行让我们说 Project 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 访问。

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

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2011-08-05
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多