【问题标题】:Setting up an Android build environment for JNI applications为 JNI 应用程序设置 Android 构建环境
【发布时间】:2012-11-15 15:41:51
【问题描述】:

我有一个专有的 JNI 应用程序,我需要为 MIPS 设备构建它。我已经阅读了"Initializing a Build Environment"、部分 NDK 文档、一些 Google Groups 线程和大量 StackOverflow 问题,但我仍然没有答案。

到目前为止,我已经使用 Google 的 repo 脚本检查了 Android 源代码,并将其保存在 ~/AndroidSource 下。我还分别下载了~/AndroidSDK下的SDK和~/AndroidNDK下的NDK。我正在尝试构建的代码位于单独的位置。 SDK 和 NDK 二进制文件在我的路径中。对于构建,我尝试使用两个不同版本的 NDK 以及 Android 源代码树下的一个,并遇到了不同的问题。我当前的设置使用 NDK r8b,从 Android 源单独下载。

应用程序有其Android.mkjni/Android.mk。但是,后者中的几个指令指向诸如

之类的路径
frameworks/base/include
system/core/include

没有前缀。我认为这些是为了指向 Android 源代码中的相应目录,所以我将它们符号链接到当前目录。在进行了更多的符号链接、makefile 和源代码攻击之后,我得到了要编译的应用程序,但目前我停留在链接阶段,有很多对缺失方法主体的引用。一直以来我都知道自己做错了什么。

如果有任何问题,我在 Linux x86_64 主机上。

所以我的问题是:

为 JNI 应用程序设置构建环境的正确方法是什么?我应该设置哪些环境变量、符号链接和/或路径扩展?我是否需要在每次 ndk-build 调用之前或之前调用任何脚本?

另外,如果您在我弄错的任何概念或术语上纠正我,我会很高兴。

【问题讨论】:

    标签: android android-ndk java-native-interface installation build-environment


    【解决方案1】:

    您使用符号链接系统标头的 AOSP 树的方法是正确的。您现在需要的是为 MIPS 编译的系统库。获取它们的最简单方法是从目标设备(或仿真器映像)adb pull 它们。但您也可以自己构建这些库,作为 AOSP 构建的一部分(请参阅您下载的源代码树的构建说明)。

    如果您仍有任何问题,请使用参数 V=1 运行您的 ndk-build 并发布链接命令及其结果。

    【讨论】:

    • 我认为,我遇到的链接问题与要从应用程序代码构建的库有关,而不是在设备上预构建,但我现在无法测试。我不再使用该应用程序,并且我的本地 Android 源与其目标不匹配。但是,我一直在寻找“正确的方法”的答案。
    • 如果您的包含路径中有frameworks/base/includesystem/core/include,则很可能有-lutils-lcutils。这两个库实际上无处不在,但不是 NDK 附带的“稳定 API”的一部分。
    【解决方案2】:

    我在构建 (YMMV) 中使用以下内容。

    • 显式调用 arm-linux-androideabi-gcc 作为您的编译器或链接器(应该在 PATH 中)。
    • NDK_PLATFORM=/path/to/android-ndk-r*/platforms/android-14
    • -I"$(NDK_PLATFORM)/arch-arm/usr/include" 传递给编译器
    • -nostdlib -L"$(NDK_PLATFORM)/arch-arm/usr/lib/" -lgcc -lc -lm 传递给链接器

    【讨论】:

    • 我宁愿不走你的路,但链接器标志看起来很有用 - 我会研究它们以供将来构建。
    • @mcmlxxxvi:首先,请注意您需要将arm-linux-androideabi-gcc 替换为mipsel-linux-androideabi-gcc,并将arch-asm 替换为arch-mips。其次,如果您的项目中实际使用了非公共头文件和库,则这种方法无法弥补它们。第三,通常ndk-build 会为编译器和链接器提供正确且一致的参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2014-08-02
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多