[android] غرادل الروبوت المساعد - إضافة سمة نكهة مخصصة؟



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

هل هناك أي طريقة لإضافة سمات مخصصة ل برودوكتفلافور أو بيلديب في البرنامج المساعد الروبوت ل غرادل؟ أود أن يكون مثل هذه المرونة الإضافية في تكوين بيلفاريانتس، حتى أتمكن من التحقق من الخاصية المخصصة عند تحديد المهام ل بيلفاريانتس.

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
    }

}

حتى هنا يمكنك أن ترى لقد أضفت السمة المخصصة "وسويديفينابدرمليب" لبناء نكهة. سيكون من الجميل أن نرى نفس السمة في buildVariant.mergedFlavor بحيث يمكن التحقق من قيمة السمة والقيام ببناء مهام إضافية مثل حزمة إضافية ملفات .so عند تعيين السمة إلى ترو:

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

ربما هناك طريقة للقيام بذلك بالفعل ولكن لم أكن أعرف بعد ... التحقق من اسم البديل بناء ل سوبسترينغ (اسم نكهة) يعمل بالنسبة لي، ولكن يبدو القذرة.

من الناحية المثالية أود أن يكون لديك خريطة سمات مخصصة من أنواع مختلفة ل بيلدتيب و برودوكتفلافور.




Related