项目多渠道打包传统的可以采用配置productFlavors来解决,但是有以下缺点:
- 低效 每个渠道包都要走一遍编译的流程
- 传统方式针对每个渠道热修复的时候都要对应打补丁
- bugly只支持5个补丁同时下发,而我们渠道通常不止五个
选择Walle
- 快,我们项目有10个分发渠道加上本身的官网和内部升级,一共12个。大概不到3分钟搞定12个包
- 一个补丁包即可,分发修复所有渠道包
具体使用可以参照
- https://github.com/Meituan-Dianping/walle
- https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170912151050
遇到的问题
gradlew 编译出现permisson denied
执行 chmod +x gradlew 提高权限-
还有这种:Task 'XXX' not found in root project 'XXX'. 如图
是因为之前的productFlavors相关的没有注释掉,导致冲突,代码注释掉即可
productFlavors {
// m0 {}
// m4 {}
// m5 {}
// m6 {}
// m7 {}
// m8 {}
// m9 {}
// m10 {}
// m11 {}
// m12 {}
// m13 {}
// m14 {}
// }
//
// productFlavors.all { flavor ->
// flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
// }
- 友盟传统是AndroidManifest.xml里配置渠道信息和名称的
<!--<meta-data-->
<!--android:name="UMENG_CHANNEL"-->
<!--android:value="${UMENG_CHANNEL_VALUE}" />-->
使用walle可是通过代码来配置渠道信息,注释掉清代文件友盟配置
//渠道号
String channel = WalleChannelReader.getChannel(mContext);
Log.e("umeng", "渠道号是: "+channel);
MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(
mContext, mContext.getString(R.string.umeng_appkey), channel));
好了,这样就节约了大把打包编译传补丁的时间了