我们正在尝试将Android的第一类构建支持添加到C ++库中。我们希望提供库存Android.mk
,并从Eclipse或Android Studio项目目录中的jni
子文件夹等依赖项中删除它。也就是说,我们希望:
cd library-src
ndk-build <options>
在上文中,library-src
不是 NDK_PROJECT_PATH
。相反,它是库的根文件夹。
我们访问了NDK的帮助(ndk-build -?
),但它没有告诉我们如何删除这些假设。我们尝试了以下方法,但它产生了错误:
$ ndk-build -f Android.mk
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/opt/android-ndk-r10e/build/core/build-local.mk:143: *** Android NDK: Aborting
Stop.
尝试设置NDK_PROJECT_PATH
会导致类似的错误:
$ NDK_PROJECT_PATH=. ndk-build -f Android.mk
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
/opt/android-ndk-r10e/.../add-application.mk:199: *** Android NDK: Aborting...
Stop.
尝试设置APP_BUILD_SCRIPT
会导致类似的错误:
$ NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk ndk-build -f Android.mk
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
/opt/android-ndk-r10e/.../add-application.mk:199: *** Android NDK: Aborting...
Stop.
我们如何在没有jni目录的情况下使用ndk-build?
重要的是我们删除了限制/假设。如果我们无法删除它们,那么我们就无法自动构建和测试。如果我们无法自动构建和测试,那么我们就无法添加支持,因为我们的治理具有一些我们无法通过的QA和测试门。 (我愿意容忍手册adb push
来测试设备上的内容。)
答案 0 :(得分:0)
我必须承认我不明白你的局限性。为什么添加文件library-src/Android.mk
没问题,但library-src/jni/Android.mk
会破坏您的质量保证和测试门。此外, Android.mk 通常不足以启动构建。无论您是要选择STL变体,还是选择ABI或工具链,都可以在不同的文件 Application.mk 中定义这些设置,这也是 jni 按惯例的目录。添加 library-src / jni 目录,Android开发人员会感谢他们的交易工具升级并且可以使用标准配置。
但Android构建是一个非常灵活的系统,你可以实现你所要求的字面意思。
你做的实验没有用,因为 ndk-build 只是一个围绕GNU make的瘦包装,并且处理低优先级的环境变量。
ndk-build APP_BUILD_SCRIPT=Android.mk NDK_PROJECT_PATH=.
很可能只是为你工作。如果您需要更多控制权,可以使用类似
的内容ndk-build APP_BUILD_SCRIPT=Android.mk NDK_PROJECT_PATH=. APP_STL=gnustl_static APP_ABI=armeabi-v7a APP_PLATFORM=android-19 NDK_TOOLCHAIN_VERSION=4.9
您也可以控制输出目录。请参阅 NDK_APP_OUT , NDK_APP_LIBS_OUT 。
最后一个提示:如果您的全局构建过程基于 make ,则可以直接调用 $(MAKE),而不是通过 ndk-build < / strong>即可。如果您需要standalone toolchain来保持与平台无关的 make 逻辑,也可以。