15年11月左右,百度发布了自己的自动更新SDK,并强制开发者使用百度的自动更新SDK,否则审核不通过
对于这种臭不要脸的行为,大部分开发者表示很无奈,我们也不做过多评论,忌于百度的淫威,只能乖乖将自己App自动更新换成了百度的。然而事情并没有结束,一个月后360市场也强制使用360自动更新,围观群众彻底懵逼了!
由于两平台审核并不是简单的检查有没有使用它们的SDK,而是检查有没有其他SDK集成进来,所以不能简单的在代码中通过渠道包标志来区分使用对应的自动更新,而是要在打渠道包的时候把对应的SDK打包进来,需要在打百度包的时候要删除360依赖,添加百度自动更新SDK依赖,修改相应的检查更新的代码,同样的,在打360包时要删除百度依赖,添加360依赖,然后再去修改检查更新的代码,这个过程如果手动操作那这个工作量确实不小,而且现在只有两个市场是这样,如果有很多个呢,目前小米、腾讯纷纷推出了自己的自动更新SDK,虽然暂时没有强制使用,但是谁知道以后会怎么样呢。这个问题困扰了我很久,直到看到了某群里@汪帅的解决方案给了我全新的思路,他的做法是把每个自动更新的SDK放到一个Module里,每个Module里都放一个相同的检查更新的工具类UpdateUtils,这个类所在的包名都是一样的,所以在使用的时候也是一样,根据渠道包的不同添加不同Module的依赖,这样实际调用的时候就是调用具体添加进来的Module的方法:
他的方案里切换Module是手动的,即在dependencies里手动注释掉不需要的Module依赖
关键问题就是将这里的手动注释变成Gradle自动判断,下面是对他的方案的改进:
1、添加gradle多渠道打包
这个网上有很多可以搜到这里不再赘述:
productFlavors {
baidu {}
c360 {}
yingyongbao {}
xiaomi {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [BAIDUMOBAD_CHANNEL_VALUE: name]
}
}
2、添加依赖
参考:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library
dependencies {
c360Compile project(':update_c360')
baiduCompile project(':update_baidu')
yingyongbaoCompile project(':update_yingyongbao')
xiaomiCompile project(':update_xiaomi')
}
3、打包
如下图,选中所有的渠道,finish,完美打包