本文主要讲解一个代码工程需要同时需要打包国内外apk包,国外一般只在google play发布,国内发布的平台会更多一些,包括华为、小米、应用宝、vivo等应用市场平台
需求整理
国内和海外版本差异一般比较大,有一部分代码都是不一样的,比如国外一般使用google推送,而国内一般使用个推等第三方推送平台。国内的版本,功能都是一致,一般只是渠道号不一致,以保证数据统计需求,而其它功能都是一致的,那么主要需要解决以下几个问题:
- 国内版本支持一次打包多个渠道不一样的apk,它们之间的代码逻辑是一样的
- 一次工程,支持打外国内、海外两类apk,它们之间的代码逻辑是不一样的
- 国内和海个任一apk间需要区分渠道号
- 实现一个自动化打包的脚本,批量生成apk版本、混淆规则的mapping文件
实现效果
打包输出结果
以下是打包的输出文件,可直接用于输出提测,文件结构如下:
├── cn
│ ├── app_2.7.0.0_2070000_test_release_20200916-1636-mapping.txt
│ └── apks
│ ├── app-v2.7.0.0-c360.apk
│ ├── app-v2.7.0.0-hw.apk
│ ├── app-v2.7.0.0-lggCn.apk
│ ├── app-v2.7.0.0-oppo.apk
│ ├── app-v2.7.0.0-vivo.apk
│ ├── app-v2.7.0.0-xm.apk
│ └── app-v2.7.0.0-yyb.apk
└── gp
├── app_2.7.0.1_2070001_test_online_20200916-1649-mapping.txt
└── apks
└── app_2.7.0.1_2070001_test_online_20200916-1649.apk
实现步骤
如何实现代码多渠道
实现代码多渠道依赖通过在build.gradle中配置productFlavors属性,以下定义了两个渠道,分别为cn和gp
android {
...
productFlavors {
//定义国内渠道
cn {}
//定义google play渠道
gp {}
}
}
定义在两个渠道后可以在cn和gp两个渠道中编写差异化的代码,效果如下:
定义在cn和gp对应的同包名类名下定义相关的类并实现
class PushManager {
//不同的渠道实现不同的代码
fun init() {