最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下
1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,用于不同组合productFlavors。
2. 每个productFlavors中可以自定义各种变量
替换manifest中的变量需要注意,如果替换2个以上用逗号分隔。
<meta-data
android:name="app_id"
android:value="${id_value}" />//占位符
<meta-data
android:name="app_key"
android:value="${key_value}" />
flavorDimensions "api", "mode"
productFlavors {
demo {
dimension "mode"
buildConfigField("String", "HTTP_BASE", '"https://10.10.10.222/"')//在BuildConfig中添加 String类型的HTTP_BASE 字段 并赋值
buildConfigField("int", "POSITION_1", "10020")//增加 int型
resValue("string","flovor_log","this is free log")//替换 res中String里的flovor_log字段
...
}
full {
dimension "mode"
buildConfigField("String", "HTTP_BASE", '"https://api-hd-huoyun.com/"')
manifestPlaceholders = [id_value: "1234567890",key_value: "0987654321"]//替换manife中的变量
...
}
minApi24 {
dimension "api"
minSdkVersion '24'
versionCode 30000 + android.defaultConfig.versionCode//修改版本号
versionNameSuffix "-minApi24"//版本名称加后缀
...
}
minApi23 {
dimension "api"
minSdkVersion '23'
versionCode 20000 + android.defaultConfig.versionCode
versionNameSuffix "-minApi23"
...
}
minApi21 {
dimension "api"
minSdkVersion '21'
versionCode 10000 + android.defaultConfig.versionCode
versionNameSuffix "-minApi21"
...
}
}
}
如果需要根据不同的productFlavors 依赖不用的包则使用
configurations {
demo
full
minApi24
....
}
dependencies中修改为
dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
.....
demoImplementation(name: 'test-demo', ext: 'aar')
fullImplementation(name: 'test-full', ext: 'aar')
minApi24Implementation(name: 'test-minApi24', ext: 'aar')
.....
}
修改assets路径,此操作会把指定目录的文件拷入道工程 assets文件夹中。
sourceSets {//不同 配置 使用不用的 文件 打包时不会 全部打入 assets
dev.assets.srcDirs = ['./allAssets/dev']
tes.assets.srcDirs = ['./allAssets/tes']
pro.assets.srcDirs = ['./allAssets/pro']
personal.assets.srcDirs = ['./allAssets/personal']
}
参考:
productFlavors在Lib(Module)中的使用