通过productFlavor用来为app创建不同的版本,如:免费版和付费版、不同应用市场的渠道包等。
创建方式:
Gradle中配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| android { productFlavors { nbsylzxVersion { //渠道1 applicationId "com.wangtao.nbsylzx" manifestPlaceholders = [package_name : "com.wangtao.nbsylzx", umeng_appkey : "5a1b7cb2f29d98", umeng_message_secret: "46b6a40c6a749f", baiduMap_appKey : "MnaZOYCPOIqozGoSle"] versionCode 1 versionName "V1.0.1" } fhzyyVersion { //渠道2 applicationId "com.wangtao.fhzyy" manifestPlaceholders = [package_name : "com.wangtao.fhzyy", umeng_appkey : "59b8da5f734b", umeng_message_secret: "1b652c87cd9d", baiduMap_appKey : "U0pNbvVRZHwTfP"] versionCode 2 versionName "V1.0.2" } } }
|
通过这种方式可以配置不同的包名、友盟key、百度key等。
AndroidManfest.xml中获取key
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!--百度地图--> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="${baiduMap_appKey}" /> <!--友盟--> <meta-data android:name="UMENG_APPKEY" android:value="${umeng_appkey}" /> <meta-data android:name="UMENG_MESSAGE_SECRET" android:value="${umeng_message_secret}" /> <meta-data android:name="UMENG_CHANNEL" android:value="Umeng" />
|
通过${名称}来获取gradle中的配置
创建对应文件夹
在app-src中创建与main同层级的文件夹
文件夹名称与productFlavors中配置的要一样
– main
– nbsylzxVersion
– fhzyyVersion
对应文件夹中也可以创建java/res
– main
—–java
—–res
–nbsylzxVersion
—–java
—–res
main-java中的文件与变种文件夹中的.java文件不能重名
main-res中的资源文件与变种文件夹中的资源文件相同,优先使用变种文件夹资源文件
不同依赖配置
在Gradle中dependencies{}中配置依赖,渠道名称+Compile
1 2 3 4
| dependencies{ nbsylzxVersionCompile project(':baiduMap') fhzyyVersionCompile 'com.github.bumptech.glide:glide:4.0.0' }
|
解决友盟多包名无法推送问题问题
如果:
productFlavors中多包名
- applicationId:com.test.a
- applicationId:com.test.b
- AndroidManfest.xml中
package=”com.test.c”
那么在Application中初始化友盟时增加以下:
1
| mPushAgent.setResourcePackageName("com.test.c");
|