独特的 buildConfigField,适用于所有具有维度的风格
Posted
技术标签:
【中文标题】独特的 buildConfigField,适用于所有具有维度的风格【英文标题】:Unique buildConfigField for all flavors with dimensions 【发布时间】:2019-09-26 08:20:54 【问题描述】:我有两个风味维度:brand
和 version
,我的风味配置如下所示:
flavorDimensions 'brand', 'version'
Brand1
dimension 'brand'
...
Brand2
dimension 'brand'
...
Version1
dimension 'version'
...
Version2
dimension 'version'
...
而且我希望每个配置都有四个唯一的buildConfigField
-s(例如 HockeyAppId):
我该怎么做?
【问题讨论】:
【参考方案1】:为此我编写了自己的插件:https://github.com/nikialeksey/porflavor,现在我可以定义这样的字段:
flavorDimensions 'brand', 'version'
productFlavors
Brand1
dimension 'brand'
...
Brand2
dimension 'brand'
...
Version1
dimension 'version'
...
Version2
dimension 'version'
...
apply plugin: 'com.nikialeksey.porflavor'
porflavor
Brand1Version1
buildConfigField "boolean", "fooFeatureEnabled", "false"
Brand2Version2
buildConfigField "boolean", "fooFeatureEnabled", "true"
...
【讨论】:
【参考方案2】:所以这很简单。您可以不费吹灰之力地修改每种风味或发布类型。
如果您试图在多个维度上重用一种风味,那不是他们想要的功能。风味意味着是应用程序的构建编译打包版本。它并不是真正意义上的通用参数集。因此,您需要为每个差异提供一种风味,例如
flavor1 -> 在维度 1
flavor1Dimension2 -> 在维度 2
flavor2 -> 在维度 1
flavor2Dimension2 -> 在维度 2 等..
这里我举个使用动态的例子
资源 构建配置 清单占位符 应用程序 ID当然,您还可以做更多事情,但这应该可以满足您的要求。
flavorDimensions 'default', 'secondary'
productFlavors
a35Demo
dimension 'default'
applicationId "com.appstudio35.yourappstudio.demo"
buildConfigField "int", "BUSINESS_ID", "1"
resValue "string", "app_name", "App Studio 35"
buildConfigField "String", "NOTIFICATION_ICON", '"ic_launcher"'
manifestPlaceholders = [iconPath:"@mipmap/ic_launcher", roundIconPath:"@mipmap/ic_launcher_round"]
smallville
dimension 'secondary'
applicationId "com.appstudio35.yourappstudio.smallville"
buildConfigField "int", "BUSINESS_ID", "22"
resValue "string", "app_name", "Smallville"
buildConfigField "String", "NOTIFICATION_ICON", '"ic_launcher_smallville"'
manifestPlaceholders = [iconPath:"@mipmap/ic_launcher_smallville", roundIconPath:"@mipmap/ic_launcher_round_smallville"]
buildTypes
debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField "String", "SERVER_URL", '"https://api.dev.myurl.com"'
shrinkResources false //remove unused resources per flavor
minifyEnabled false
release
buildConfigField "String", "SERVER_URL", '"https://api.prod.myurl.com"'
shrinkResources true //remove unused resources per flavor
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//production builds
productFlavors.a35Demo.signingConfig signingConfigs.releaseA35YourAppStudio
productFlavors.smallville.signingConfig signingConfigs.releaseA35YourAppStudio
编码愉快!
【讨论】:
谢谢!但是在您的示例中只有一个风味维度 -default
。我想为多维度描述的风味添加一个独特的buildConfigField
对不起,我没有添加,因为我认为这部分很简单。只是改变尺寸。我更新了要显示的示例。除非我误解了你的挑战?
好的,我明白你的意思了,我更新了我的答案以澄清,但你试图以我认为不打算使用的方式使用风味。
我为此编写了自己的插件:github.com/nikialeksey/porflavor,现在我可以为具有尺寸的风味配置变体以上是关于独特的 buildConfigField,适用于所有具有维度的风格的主要内容,如果未能解决你的问题,请参考以下文章
Gradle buildType/productFlavor 使用意外的 buildConfigField
定义特定风味的buildconfigfield和buildType
Android反射修改buildConfigField生成的属性失效问题
将 gradle 更新到 7.0.3 后 buildConfigField 不起作用
Android Gradle 插件ProductFlavor 配置 ( ProductFlavor#buildConfigField 方法 | 单独编译生成 BuildConfig 类的任务 )