0

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

到目前为止,我已经使用 Google 的 repo 脚本检查了 Android 源代码,并将其放在~/AndroidSource. 我还分别下载了下的SDK~/AndroidSDK和下的NDK ~/AndroidNDK。我正在尝试构建的代码位于单独的位置。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调用之前或之前调用任何脚本?

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

4

2 回答 2

1

我在我的构建(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给链接器
于 2012-11-17T14:43:32.807 回答
1

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

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

于 2012-11-17T15:58:18.763 回答