为什么80%的码农都做不了架构师?>>>
最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下
1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,用于不同组合productFlavors。
2. 每个productFlavors中可以自定义各种变量
替换manifest中的变量需要注意,如果替换2个以上用逗号分隔。
<meta-dataandroid:name="app_id"android:value="${id_value}" />//占位符<meta-dataandroid: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.versionCodeversionNameSuffix "-minApi23"...}minApi21 {dimension "api"minSdkVersion '21'versionCode 10000 + android.defaultConfig.versionCodeversionNameSuffix "-minApi21"...}}
}
如果需要根据不同的productFlavors 依赖不用的包则使用
configurations {demofullminApi24....
}
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 {//不同 配置 使用不用的 文件 打包时不会 全部打入 assetsdev.assets.srcDirs = ['./allAssets/dev']tes.assets.srcDirs = ['./allAssets/tes']pro.assets.srcDirs = ['./allAssets/pro']personal.assets.srcDirs = ['./allAssets/personal']}
参考:
android 多渠道打包的应用
配置构建变体
解决方案:Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs
productFlavors在Lib(Module)中的使用