我已经掌握了需要为MIPS设备构建的专有JNI应用程序。我读过"Initializing a Build Environment",部分NDK文档,一些Google网上论坛主题和众多StackOverflow问题,但我仍然没有回答。为JNI应用程序设置Android构建环境
到目前为止,我已经使用Google的回购脚本检出了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
之前或之前调用任何脚本吗?
另外,如果你纠正了我错误的任何概念或术语,我会很高兴。
我认为链接问题与应用程序代码构建的库有关,而不是预先构建在设备上,但现在我无法测试。我不再在该应用程序上工作,并且我的本地Android源与其目标不匹配。然而,我正在寻找“正确的做法”的答案。 – mcmlxxxvi
如果include路径中包含'frameworks/base/include'和'system/core/include',则很可能会有'-lutils'和'-lcutils'。这两个库实际上是无处不在的,但不是NDK附带的“稳定API”的一部分。 –