我正在尝试在 Android 上构建原生守护进程。目的是控制一些特定的硬件,Java 应用程序将能够使用套接字与此守护进程通信。
同时我一直在使用 cmake 来编译我的库、演示和真正的守护进程(顺便说一句,它运行良好)。我现在正在尝试做两件不同的事情:
- 使用
ndk-build
构建相同的应用程序。 - 通过使 JNI 调用与 C++ 守护进程的工作方式非常相似,将 C++ 守护进程移植到 Android 服务。
据我所知,ndk-build
不能制作原生应用程序,只能制作原生库,而这些库又可以由 Java GUI 加载……我说得对吗?对于第 1 步,我并不真的需要 java(我已经证明了这一点),但我还没有找到一种方法让 ndk-build
吐出一个 elf 应用程序。
供引用 - 我正在使用 cmake,如下所述:http://opekar.blogspot.com/2011/06/android-cmake-is-much-easier-in-ndk-r5b.html
这样我就可以为“普通”linux 构建,也可以为使用源代码构建的 android 构建。如果你问我的话,这是相当不错的技巧。
最佳答案
另一种方法是使用与 NDK bundle 在一起的脚本 make-standalone-toolchain.sh
创建一个独立的工具链,然后使用它来编译您的项目。下面的 shell 代码说明了如何使用它:
# Assumed path to the NDK, change it to suit your environment.
NDK_HOME=$HOME/bin/android-ndk-r8e
# Desired API and NDK versions and destination folder of
# the stand-alone toolchain, change them to suit your needs.
api=14
ver=4.7
folder=$HOME/bin/android-$api-ndk-$ver
# Create folder if it doesn't already exist.
mkdir -p $folder
$NDK_HOME/build/tools/make-standalone-toolchain.sh \
--toolchain=arm-linux-androideabi-$ver \
--platform=android-$api --install-dir=$folder
运行上面的行将在 $HOME/bin/android-14-ndk-4.7
生成一个新的独立工具链,然后您可以将其用作任何常规的 C/C++ 交叉编译工具链。
使用独立工具链的优势在于,它使将 Linux 项目交叉编译到 Android 变得轻而易举;例如看我的 port of Valgrind to Android ARMv7 .
关于android - NDK 仅构建 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266291/