android - Gradle Android 插件 - 添加自定义 flavor 属性?

标签 android gradle

有没有办法在 gradle 的 android 插件中向 productFlavor 或 buildType 添加自定义属性? 我希望在 buildVariants 的配置方面具有更大的灵 active ,以便在为 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”来构建 flavor 。 很高兴在 buildVariant.mergedFlavor 中看到相同的属性,这样我就可以检查该属性值并构建其他任务,例如在属性设置为 true 时打包其他 .so 文件:

android.applicationVariants.each { 变体 -> 如果(variant.mergedFlavor.useWidevineAppDrmLib){ ...//添加复制 .so 任务 } }

也许已经有办法做到这一点,但我还没有发现...... 检查子字符串( flavor 名称)的构建变体名称对我有用,但它看起来很脏。

理想情况下,我希望为 buildType 和 productFlavor 提供不同类型的自定义属性映射。

最佳答案

您可以扩展对象以动态添加属性。 因此,您可以在添加 flavor 对象时对其进行处理,使用如下方式:

// 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
    }
  }
}

但是,这不会传递给合并的 flavor 。所以你必须这样做

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

根据@blackdigger 的反馈进行了编辑以使代码实际运行。

关于android - Gradle Android 插件 - 添加自定义 flavor 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17697154/

相关文章:

java - Gradle + Spring Boot 错误 : Failed to bind properties

android - 如何在可扩展的 RecyclerView 中合并相同命名的 header

android - 使用以下代码无法进行调用转移

android - PWA OAuth 登录

android - 如何在 firebase 中将循环中的 child 添加为 userId

android - 如何使用 Android 通过网络流式传输摄像机流,生成有效的视频文件?

gradle - 无法使用Gradle 4.5将jacoco报告上载到TeamCity

spring-boot - 在build.gradle.kts中添加后无法导入类

android - react native : Failed to notify project evaluation listener. > JAVA_LETTER_OR_DIGIT

java - 为什么我的Gradle Java项目没有在Intellij中构建?