Search code examples
androidandroid-studiogradleandroid-productflavorsandroid-build-flavors

How to control multiDex and minifying from product flavors?


I am using following flavors to improve debug builds for devices with Android 5 and above:

productFlavors {
    // Define separate dev and prod product flavors.
    dev {
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
      // to pre-dex each module and produce an APK that can be tested on
      // Android Lollipop without time consuming dex merging processes.
      minSdkVersion 21
    }
    prod {
      // The actual minSdkVersion for the application.
      minSdkVersion 16
    }
  }

However not all of my devices runs under api 21+, thus I want to control multiDex and minifying. E.g.:

  productFlavors {
    dev {
      minSdkVersion 21
      multiDexEnabled false
      minifyEnabled false
    }
    prod {
      minSdkVersion 16
      multiDexEnabled true
      minifyEnabled true
    }
  }

But that's gives me:

Error:(44, 0) Could not find method minifyEnabled() for arguments [false] on ProductFlavor_Decorated

How can I combine those properties together?


Solution

  • minifyEnabled() propery available only in BuildType DSL object. While multiDexEnabled refers to ProductFlavor object. So if you want to combine these properties, you have to specify it in both of these objects. E.g.:

    productFlavors {
        dev {
            minSdkVersion 21
            multiDexEnabled false
        }
        prod {
            minSdkVersion 16
            multiDexEnabled true
        }
    }
    
    buildTypes {
        debug {
            minifyEnabled false
        }
        release {
            minifyEnabled true
        }
    }
    

    For debug builds use devDebug build variant, for release - prodRelease.