Android Studio: How to define custom macros in bui

2019-08-29 01:11发布

问题:

I need to define some custom macros such as "DEBUG", "RELEASE", "DEMO_VER" and "FULL_VER" in Android Studio build.gradle file so that my C/C++ code can detect them like:

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

or

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

My understanding is that these macros should be defined as g++ compiler options in the build variant blocks like the following code:

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"
        }
    }
}

The problem is that I can not use "cmake" inside either "BuildType" nor "ProductFlavor", the method can not be found. So what is the correct way to pass in compiler macros for different product flavors / build types?

回答1:

Found answer myself: The "cmake" method belongs to class "externalNativeBuild" class, therefore it needs to be embedded inside "externalNativeBuild" block, like this:

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

Now all the preprocessors defined in build.gradle are passed into the C/C++ compiler.