在 Android 中将构建时的变量传递给 externalNativeBuild

Pass a variable at build time into externalNativeBuild in Android

有没有办法在编译时将常量传递给 externalNativeBuild gradle 附件,并能够在代码中使用它?

例如:

externalNativeBuild {
    cmake {
        arguments "-DTEST=" + rootProject.ext.value
    }
}

并且能够像接下来那样以某种方式使用它:

void foo() {
   int bla = TEST;
   ....
}

请注意,上面的代码不起作用,因为 C++ 编译器无法识别 TEST,这正是我要解决的问题。

最简单的解决方案是使用 add_definitions:

add_definitions(-DTEST=${TEST})

到您的 CMakeLists.txt 文件。

另一种方法是使用 configuration file

基于来自 Android Studio 的本机示例应用程序:

  1. 创建文件:config.h.in 在与默认 native-lib.cpp 相同的文件夹中,内容如下:

    #ifndef NATIVEAPP1_CONFIG_H_IN
    #define NATIVEAPP1_CONFIG_H_IN
    
    #cmakedefine TEST ${TEST}
    
    #endif //NATIVEAPP1_CONFIG_H_IN
    
  2. 在CMakeLists.txt中添加:

    # This sets cmake variable to the one passed from gradle.
    # This TEST variable is available only in cmake but can be read in
    # config.h.in which is used by cmake to create config.h
    set(TEST ${TEST}) 
    
    configure_file( config.h.in ${CMAKE_BINARY_DIR}/generated/config.h )
    include_directories( ${CMAKE_BINARY_DIR}/generated/ ) 
    

(例如,在 add_library 调用上方添加它)

  1. 最后,在代码中添加 #include "config.h"(例如在 native-lib.cpp 中)以使用 TEST 宏。

  2. 重建