看看发生了什么:
当然,相应的打包时的项目选择也多了起来:
2.添加一些项目常用配置 现在有那么多环境的包,有啥用?在每个不同环境的包里面配置自己需要的东西啊,比如咱们刚才说的,每个环境的API地址不一样,怎么;再比如说,我开发环境需要支持自动升级,可我正式环境不想支持了,需要一个常量做一个标示,怎么办?盘他就得了!
flavorDimensions “mode”
productFlavors{
dev{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/dev/”’)
buildConfigField(“boolean”, “UPDATE”, “true”)//那里需要用了,直接BuildConfig.UPDATE就取出来了,就这么简单
}
tes{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/tes/”’)
buildConfigField(“boolean”, “UPDATE”, “false”)
}
pro{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/pro/”’)
buildConfigField(“boolean”, “UPDATE”, “false”)
}
}
把格式说一下 buildConfigField(“常量类型”,“常量名称”,“常量值”)
这样会在项目构建的是后,在项目的Build.config中生成项目的配置文件,类似这样:
你选择的是开发环境,那么这里面的配置就是dev环境下的地址,同理tes,pro环境一样.
这个最常用的就是在清单文件里面需要配置app_key,app_id的时候了,很多的三方SDK是需要配置这个东西的,比如某盟,某语音等等一大堆,这个时候,开发是用的key和id肯定不能正是环境也用,或者给不同的客户打不同的包,用的也不能一样,这是后,需要进行一些配置: 在清单文件(AndroidManifest)里面,application节点下这样配置:
<meta-data
android:name=“app_id”
android:value="${app_id_value}" />//占位符
<meta-data
android:name=“app_key”
android:value="${app_key_value}" />
在刚刚的productFlavors下面这样配置:
productFlavors{
dev{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/dev/”’)
manifestPlaceholders = [app_id_value : “123456”
,app_key_value : “654321”]
}
tes{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/tes/”’)
manifestPlaceholders = [app_id_value : “111111”
,app_key_value : “222222”] //替换两个以上的用逗号隔开
}
pro{
dimension “mode”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/pro/”’)
manifestPlaceholders = [app_id_value : “223344”
,app_key_value : “556677”]
}
}
除了设置这些之外,还可以给不同环境配置不同的包名,版本号,版本名称,并且在选择不同环境运行或者打包的时候,显示的包名是不一样的,这个我验证过了,上个全的:
flavorDimensions “mode”
productFlavors{
dev{
dimension “mode”
applicationId “com.liucl.dev.app”
versionName “1.0.0”
versionCode 10
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/dev/”’)
buildConfigField(“boolean”, “UPDATE”, “true”)
manifestPlaceholders = [app_id_value : “123456”
,app_key_value : “654321”]
}
tes{
dimension “mode”
applicationId “com.liucl.tes.app”
versionName “2.0.0”
versionCode 20
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/tes/”’)
buildConfigField(“boolean”, “UPDATE”, “true”)
manifestPlaceholders = [app_id_value : “111111”
,app_key_value : “222222”]
}
pro{
dimension “mode”
versionName “3.0.0”
versionCode 30
applicationId “com.liucl.pro.app”
buildConfigField(“String”, “HTTP_BASE”, ‘“https://www.xxx.com/pro/”’)
buildConfigField(“boolean”, “UPDATE”, “false”)
manifestPlaceholders = [app_id_value : “223344”
,app_key_value : “556677”]
}
}
[]
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
( )4.根据不同的productFlavors,引入不同的依赖包:
举个例子:我dev环境想用刘氏财团的 发财_aar 包 ; tes环境用 长寿_aar 包 ; 正式环境用 喜庆_aar包,改咋办? 1.新加节点configurations, 2.在dependencies中添加以下配置
configurations {
dev
tes
pro