NDK在构建脚本中设置环境变量

3
根据NDK文档中的OVERVIEW.html,您需要设置环境变量“NDK_LIBS_OUT”才能将库文件放到$PROJECT/libs以外的其他位置。
在我的情况下,Gradle似乎希望共享库文件放在$PROJECT/src/main/jniLibs目录下,因此我将NDK_LIBS_OUT设置为该目录。这很有效。
现在,我该如何在Android.mk或Application.mk中设置呢?我不想每次都设置这个环境变量,特别是如果我要将构建脚本交给其他人处理。

我不相信你能做到那个。环境只能从父级继承到子级,而不能从子级继承到父级。因此,要从该文件中执行它并在其他地方生效,您可能需要添加其他内容来扫描该文件以提取它,并将其设置在父级中。 - Chris Stratton
2个回答

3

正如Chris所说,你不能从*.mk文件中操纵这个变量。

你可以通过在Android.mk中构建后移动或复制库来重现此行为:

all: jniLibs/$(TARGET_ARCH_ABI) jniLibs/$(TARGET_ARCH_ABI): libs/$(TARGET_ARCH_ABI) $(call host-mkdir,$@) $(call host-cp,$<,$@)

否则,如果修改gradle构建脚本是一个选项,你可以在build.gradle中设置这个选项,使gradle查找位于libs文件夹中的库而不是jniLibs文件夹中的库:

android { sourceSets.main { jniLibs.srcDir 'src/main/libs' } }


第一个看起来不错...问题是Android.mk似乎没有将每个库输出指定为Makefile目标。这里涉及到一些非常奇怪的语法。因此,当它到达依赖项libs/$(TARGET_ARCH_ABI)时,它会感到困惑,因为显然没有定义如何制作每个依赖项的规则。也许include $(CLEAR_VARS)会清除它们? - sciencectn

1
如果您想自动化您的 make 文件,最好的选择是使用 CMake。使用 CMake 组织源代码非常酷,因为您可以快速生成 Windows 上的 Visual Studio 解决方案文件和 Linux 上的 make 文件,从而在不维护两个独立构建 脚本的情况下,在不同平台上构建和测试代码。
您的交叉编译文件将如下所示:
include(CMakeForceCompiler)
set(toolchain_path /opt/ndk/toolchains)
# Target system
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_SYSTEM_VERSION 1)

# Compiler to build for the target
set(CMAKE_C_COMPILER /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc)
set(CMAKE_FIND_ROOT_PATH /opt/ndk/toolchains)

所以,你只需要完成setups,就可以开始了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接