【问题标题】:Cross-compiling a C library for Android NDK为 Android NDK 交叉编译 C 库
【发布时间】:2012-12-28 17:52:45
【问题描述】:

我对我目前正在尝试的内容有点困惑:我想通过 NDK 交叉编译一个 C 库以与 Android 一起使用,这样我就可以创建一个 JNI 包装器并从我的安卓java代码。

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

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

我的问题是:

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

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

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

    李>

【问题讨论】:

    标签: android android-ndk java-native-interface cross-compiling


    【解决方案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

    【讨论】:

    • 是的,但是我不确定如何将那个位添加到我已经存在的 Android.mk 中。例如,在我的 Android.mk 中,LOCAL_PATH 变量已经定义为 $(call my-dir)。如果我只是将它复制粘贴到我现有的 Android.mk 中,那不是问题吗?
    • 好吧,如果你愿意,你可以从上面的 makefile sn-p 中删除 LOCAL_PATH 分配,并在 LOCAL_SRC_FILES 中指定 lib 的完整路径。
    • 它似乎在一定程度上奏效了。这是我当前的问题:stackoverflow.com/questions/14325440/…
    猜你喜欢
    • 2013-06-11
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多