How to set variable according to gradle flavors

后端 未结 2 1676
我在风中等你
我在风中等你 2021-02-01 17:01

I want to pass a variable test that I set differently per flavor as a define to the NDK. But for some reason he always passes the value of the last flavor.

2条回答
  •  一向
    一向 (楼主)
    2021-02-01 17:54

    I found the solution:

    First instead of def test specify a new field for all productFlavors

    productFlavors.all {
        ext.dTest = null
    }
    

    Then this field is set in each flavor (code unchanged)

    productFlavors {    
        flavorA {
            dTest = 1
        }
    
        flavorB {
            dTest = 2
        }    
    }
    

    And finally you can do this in the buildTypes

    buildTypes {    
        all {
             productFlavors {
                all {
                    ndk {
                        if (cFlags == null) { cFlags = "" }
                        cFlags = cFlags + " -DTEST="+dTest+" "
                    }
                }
            }
        }
        debug {           
            minifyEnabled false
            ndk {
                if (cFlags == null) { cFlags = "" }
                cFlags = cFlags + " -DLOGGING=1 "
            }
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
            ndk {
                if (cFlags == null) { cFlags = "" }
                cFlags = cFlags + " -DLOGGING=0 "
            }
        }
    }
    

    Here the full file:

    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
        defaultPublishConfig "flavorARelease"
        publishNonDefault true
    
        defaultConfig {
            minSdkVersion 15
            targetSdkVersion 17
    
            ndk {
                moduleName "dTest"
                ldLibs "log"
            }
        }
    
        productFlavors.all {
            ext.dTest = null
        }
    
        productFlavors {    
            flavorA {
                dTest = 1
            }
    
            flavorB {
                dTest = 2
            }    
        }
    
    
        buildTypes {    
            all {
                productFlavors {
                    all {
                        ndk {
                            if (cFlags == null) { cFlags = "" }
                            cFlags = cFlags + " -DTEST="+dTest+" "
                        }
                    }
                }
            }
            debug {           
                minifyEnabled false
                ndk {
                    if (cFlags == null) { cFlags = "" }
                    cFlags = cFlags + " -DLOGGING=1 "
                }
            }
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
                ndk {
                    if (cFlags == null) { cFlags = "" }
                    cFlags = cFlags + " -DLOGGING=0 "
                }
            }
        }
    
    }
    

提交回复
热议问题