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

1,777 views
Skip to first unread message

Toothy Bunny

unread,
Oct 17, 2018, 4:10:32 PM10/17/18
to android-ndk

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?

Kostiantyn....@snapchat.com

unread,
Oct 17, 2018, 4:19:30 PM10/17/18
to android-ndk
You forgot to declare externalNativeBuild block
full {
    externalNativeBuild {
        cmake {
            cppFlags += "-DFULL_VER"
        }
Reply all
Reply to author
Forward
0 new messages