有没有办法在android插件中为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
}
Run Code Online (Sandbox Code Playgroud)
}
所以在这里你可以看到我添加了自定义属性"useWidevineAppDrmLib"来构建风味.在buildVariant.mergedFlavor中看到相同的属性会很高兴,这样我就可以检查该属性值并构建其他任务,例如在属性设置为true时打包附加的.so文件:
android.applicationVariants.each { variant ->
if(variant.mergedFlavor.useWidevineAppDrmLib ) {
... // add copy .so task
}
}
也许有一种方法可以做到这一点,但我还没有发现...检查子串(味道名称)的构建变体名称对我有用,但它看起来很脏.
理想情况下,我想为buildType和productFlavor提供不同类型的自定义属性的映射.
Xav*_*het 20
您可以扩展对象以动态添加属性.所以当你添加时,你可以在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这不会传递给合并的味道.所以你必须这样做
android.applicationVariants.each { variant ->
if (variant.productFlavors.get(0).useWidevineAppDrmLib.value) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑使代码实际上起作用@ blackdigger的反馈.
Jay*_*yer 15
有一种替代解决方案,不需要创建自己的自定义类.您可以使用已经附加到'productFlavors'类的已存在的extras属性.这是专门为允许自定义用户定义的变量而设计的.
android {
// We can add any custom variable so long as it's prefaced with ext
productFlavors {
widevineAppDrm {
ext.useWidevineAppDrmLib = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以稍后参考.请注意,如果您没有将自定义变量添加到其他变量,则productFlavors需要先确保检查它,否则gradle会抱怨没有找到该属性.
android.applicationVariants.each { variant ->
if (variant.productFlavors[0].ext.has("useWidevineAppDrmLib")) {
if (variant.productFlavors.get(0).ext.useWidevineAppDrmLib) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7059 次 |
| 最近记录: |