[Android] Gradle एंड्रॉइड प्लगइन - कस्टम स्वाद विशेषता जोड़ें?


Answers

आप गतिशील रूप से एक संपत्ति को जोड़ने के लिए एक ऑब्जेक्ट का विस्तार कर सकते हैं तो आप ऐसा स्वाद ऑब्जेक्ट पर कर सकते हैं, जब कुछ जोड़ा जाए:

// First declare a class that holds a boolean
class BooleanExtension {
  boolean value
  BooleanExtension(boolean value) {
    this.value = value
  }

  public void setValue(boolean value) {
    this.value = value
  }

  public boolean getValue() {
    return value
  }
}

android {
  // add the boolean extension to all flavor object when they are created.
  productFlavors.whenObjectAdded { flavor ->
    flavor.extensions.create("useWidevineAppDrmLib", BooleanExtension, false)
  }

  // then we can set the value on the extension of any flavor object
  productFlavors {
    widevineAppDrm {
      useWidevineAppDrmLib.value true
    }
  }
}

हालांकि यह विलय वाले स्वाद को पारित नहीं किया जाएगा। तो आपको करना होगा

android.applicationVariants.each { variant ->
  if (variant.productFlavors.get(0).useWidevineAppDrmLib.value) {
    ...
  }
}

कोड को वास्तव में @ ब्लैकडिगर की प्रतिक्रिया से काम करने के लिए संपादित किया गया

Question

Gradle के लिए एंड्रॉइड प्लगइन में productFlavor या buildType में कस्टम विशेषताओं को जोड़ने का कोई तरीका है? मुझे buildVariants के विन्यास में ऐसी अतिरिक्त लचीलेपन करना है, ताकि मैं अपने कस्टम प्रॉपर्टी की जांच कर सकूं जब buildVariants के कार्यों को निर्दिष्ट करते हैं

productFlavors {
    flavorGroups "drm", "storeType"
    googlePlay {
        flavorGroup "storeType"
        buildConfig "public static final String TARGET_STORE = \"google\";"
    }
    samsungApps {
        flavorGroup "storeType"
        buildConfig "public static final String TARGET_STORE = \"samsung\";"
    }

    platformDrm {
        flavorGroup "drm"
    }

    widevineAppDrm {
        flavorGroup "drm"
        minSdkVersion 9
        useWidevineAppDrmLib true
    }

}

तो यहां आप देख सकते हैं कि मैंने स्वाद का निर्माण करने के लिए कस्टम ऐट्रिब्यूट "useWidevineAppDrmLib" जोड़ लिया है यह buildVariant.mergedFlavor में एक ही विशेषता को देखने के लिए अच्छा होगा, ताकि मैं उस विशेषता मान को देख सकूं और अतिरिक्त कार्यों को बनाऊं, जैसे अतिरिक्त पैकेज। इसलिए जब गुण सत्य पर सेट होता है:

android.applicationVariants.each { variant -> if(variant.mergedFlavor.useWidevineAppDrmLib ) { ... // add copy .so task } }

हो सकता है कि पहले से ही ऐसा करने का एक तरीका है लेकिन अभी तक मुझे पता नहीं चला ... substring (स्वाद का नाम) के लिए बिल्ड नाम के नाम का नाम मेरे लिए काम करता है, लेकिन यह गंदा लग रहा है।

आदर्श रूप में मैं बिल्ड प्रकार और उत्पाद के लिए विभिन्न प्रकार के कस्टम विशेषताओं का मानचित्र बनाना चाहता हूं।