我有和旧的Android应用程序,我正在尝试迁移到android gradle构建系统.该应用程序目前内置于多项目设置中,并作为四个不同的应用程序发布(包括两个不同的数据集和两个数据集的免费/付费版本).我已经设法通过使用flavorDimensions(以前称为flavorGroups)来摆脱多项目设置,但我无法弄清楚如何为每种风味组合设置不同的applicationId.
由于应用程序版本已经发布,我需要保留与当前版本相同的应用程序.由于我的原始包命名是如何完成的,我不能简单地使用flavor-buildtype与"packageNameSuffix"的组合(如果它是一个未发布的应用程序,那将是一个很好的选择).
/sf/answers/1466944741/正在回答如何使用不同的源文件夹进行风味组合,而不是如何(如果可能的话)为构建文件中的每个组合设置特定配置.
Gradle构建文件片段:
flavorDimensions "price", "dataset"
productFlavors {
free { flavorDimension "price" }
paid { flavorDimension "price" }
dataset1 { flavorDimension "dataset" }
dataset2 { flavorDimension "dataset" }
}
Run Code Online (Sandbox Code Playgroud)
我想在我的gradle构建文件中有类似下面的内容(请注意我的命名是如何unlogic的,这就是为什么我不能使用packageNameSuffix):
freeDataset1 { applicationId "com.beansys.freeappdataset1" }
freeDataset2 { applicationId "com.beansys.freedataset2" }
paidDataset1 { applicationId "com.beansys.dataset1paid" }
paidDataset2 { applicationId "com.beansys.mypaiddataset2" }
Run Code Online (Sandbox Code Playgroud) 有没有办法在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提供不同类型的自定义属性的映射.