Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++

Android Studio: How to define custom macros in build.gradle (for different build variants) and let native C/C++ code detect them?

本文关键字:构建 C++ 原生 build Studio gradle 自定义 定义 Android      更新时间:2023-10-16

我需要在Android Studiobuild.gradle文件中定义一些自定义宏,例如">DEBUG",">RELEASE",">DEMO_VER"和">FULL_VER",以便我的C/C++代码可以检测到它们,例如:

#ifdef DEBUG
...
#else //RELEASE
...
#endif

#ifdef DEMO_VER
...
#else //FULL_VER
...
#endif

我的理解是,这些宏应该定义为构建变体块中的 g++ 编译器选项,如以下代码:

buildTypes 
{
release 
{
cmake   <<====== Error!!!!!: could not find method cmake() for ...BuildType
{
cppFlags += "-DRELEASE"
}
}
debug 
{
cmake   <<====== Error!!!!!: could not find method cmake() for ...BuildType
{
cppFlags += "-DDEBUG"
}
}
}
flavorDimensions "version"
productFlavors 
{
demo 
{
cmake   <<====== Error!!!!!: could not find method cmake() for ...ProductFlavor
{
cppFlags += "-DEMO_VER"
}
}
full
{
cmake   <<====== Error!!!!!: could not find method cmake() for ...ProductFlavor
{
cppFlags += "-DFULL_VER"
}
}
}

问题是我不能在">BuildType"或"ProductFlavor"中使用">cmake",找不到该方法。 那么,为不同的产品风格/构建类型传递编译器宏的正确方法是什么?

自己找到答案: "cmake" 方法属于类 "externalNativeBuild"类,因此需要嵌入到 "externalNativeBuild" 块中,如下所示:

release
{
externalNativeBuild
{
cmake
{
cppFlags += "-DRELEASE"
}
}
...
}

现在,build.gradle中定义的所有预处理器都传递到 C/C++ 编译器中。