2

我对我目前正在尝试的东西有点困惑:我想通过 NDK 交叉编译一个 C 库以与 Android 一起使用,这样我就可以创建一个 JNI 包装器并从我的 Android java 代码中调用它的一些函数.

  • 我按照本指南交叉编译 libopus(我想在我的项目中包含的库):http ://mortoray.com/2012/08/21/android-ndk-cross-compile-setup-libpng-and-freetype/其中意味着我目前在 /opt/android-ext/ 有一个独立的工具链,其中包含一个包含我交叉编译的库 (libopus.a、libopus.so 等) 的 lib 文件夹

  • 我的 Android 项目上也已经有一个 jni 文件夹,其中包含一些带有我想要的 JNI 绑定的 C 代码,我可以从我的 Java 代码中调用它,但它什么也没做(我可以调用它,但它是一个空白函数) . 这意味着在我的项目中,有一个带有“libopusUtilsNative.so”(包装器)的 /lib/armeabi 目录。

我的问题是:

如何将刚刚交叉编译的库添加到项目中,以便(例如)我可以对已有的 C 源代码文件执行 #include 调用并访问库函数?我对如何:

  1. 将我交叉编译的库包含到我的项目中。

  2. 如何使我创建的包装器代码包含它(我猜这与向我的 Android.mk 文件中添加一些代码有关,但我一无所知)。

4

1 回答 1

1

您链接到的指南包含一个示例,说明如何修改 JNI 库(或在他的情况下,本机应用程序)的 Android.mk 文件以链接到交叉编译的库:

PLATFORM_PREFIX := /opt/android-ext/

LOCAL_PATH := $(PLATFORM_PREFIX)/lib
include $(CLEAR_VARS)
LOCAL_MODULE := libpng
LOCAL_SRC_FILES := libpng.a
include $(PREBUILT_STATIC_LIBRARY)

# The in your project add libpng
LOCAL_STATIC_LIBRARIES := android_native_app_glue libpng

如果您想静态链接到 libopus,这几乎就是您的做法。或者,如果您想链接共享库,请使用以下内容:Using my own prebuilt shared library in an Android NDK project

于 2013-01-14T18:20:13.763 回答