我有一个专有的JNI应用程序,我需要为MIPS设备构建。我已经阅读了"Initializing a Build Environment",部分NDK文档,一些Google网上论坛帖子以及众多StackOverflow问题,但我仍然缺少答案。
到目前为止,我已使用Google的repo脚本检查了Android源代码并将其保存在~/AndroidSource
下。我还单独下载了~/AndroidSDK
下的SDK和~/AndroidNDK
下的NDK。我正在尝试构建的代码位于一个单独的位置。 SDK和NDK二进制文件在我的路径中。对于构建,我尝试使用两个不同版本的NDK以及Android源代码树下的一个版本,并遇到了不同的问题集。我目前的设置使用NDK r8b,与Android源分开下载。
该应用程序有Android.mk
和jni/Android.mk
。但是,后者的几个指令指向诸如
frameworks/base/include
system/core/include
没有前缀。我认为这些是指向Android源中的相应目录,因此我将它们符号链接到当前目录。经过一些更多的符号链接和makefile以及源代码黑客攻击之后,我得到了应用程序进行编译,但我目前仍处于链接阶段,其中包含许多对缺少方法体的引用。在整个过程中,我知道我做错了什么。
我在Linux x86_64主机上,如果它有任何问题。
所以我的问题是:
为JNI应用程序设置构建环境的正确方法是什么?我应该设置哪些环境变量,符号链接和/或路径扩展?我需要在每次ndk-build
调用之前或之前调用任何脚本吗?
另外,如果你纠正了我错误的任何概念或术语,我会很高兴。
答案 0 :(得分:1)
我在构建中使用以下内容(YMMV)。
arm-linux-androideabi-gcc
作为编译器或链接器(应位于PATH中)。-I"$(NDK_PLATFORM)/arch-arm/usr/include"
传递给编译器-nostdlib -L"$(NDK_PLATFORM)/arch-arm/usr/lib/" -lgcc -lc -lm
传递给链接器答案 1 :(得分:1)
您的方法是将系统标题的AOSP树符号链接正确。您现在需要的是为MIPS编译的系统库。获取它们的最简单方法是从目标设备(或模拟器映像)adb pull
获取它们。但您也可以自己构建这些库,作为AOSP构建的一部分(请参阅您下载的源代码树的构建说明)。
如果您仍然遇到任何问题,请使用参数ndk-build
运行V=1
并发布链接命令及其结果。