Android多渠道打包配置
之前为了在同一台手机能同时安装测试包和生产包,采用配置buildType的方式来实现,相比于flavor,感觉是挺轻量又恰到好处的配置,具体见通过配置applicationId来实现测试包和生产包安装在同一台手机上。最近因为业务需要,需要多个渠道的包了,这就必须要用到flavor这个大杀器了。一路配置下来,感觉还挺顺,下面就具体记录一下。
目标
先说一下需求,增加一个渠道
- 功能代码几乎完全相同,个别接口要根据渠道传参
- logo要按渠道配置
- 应用程序的名子也要不同
- 部分页面的标识性图片要按渠道配置
大概就是这么些东西需要根据渠道来配置的。不过还有一些潜在的东西也需要按渠道来配置,如:
- applicationId,肯定是要不同的
- 签名肯定是区分的
- 百度地图的key也必须要根据渠道配置的,以及其它类似的三方鉴权相关配置
- 自动升级时安装app所需要的fileProviderAuthority也要区分
由于我还保留着degbug与release包使用不同的applicationId,实际上两个渠道共4个包都是不同id的,某些参数除了要根据渠道区分还要再根据buildType做相应的配置。
实施
一、先把flavor配置起来,在app的build.gradle文件中的 android
代码块中添加
// 定义flavor的dimension,至少要有一个dimension,名字随便取,这个必须要的,不然会报错
flavorDimensions "version"
// 渠道包定义,默认定义的名称就是渠道名称
productFlavors {
// google渠道
google {
applicationId = "com.my.google"
}
// twitter渠道
twitter {
applicationId = "com.my.twitter"
}
}
这里配置了两个渠道,并指定了它们各自的applicationId,值得注意的是必须要先设置flavorDimensions,值可以随便取。
二、配置签名
//配置签名
signingConfigs {
google {
storeFile file("D:/docs/keyStore/googleKeyStore.jks")
storePassword "111111"
keyAlias "key0"
keyPassword "222222"
}
twitter {
storeFile file("D:/docs/keyStore/twitterKeyStore.jks")
storePassword "333333"
keyAlias "key1"
keyPassword "444444"
}
}
storeFile是KeyStore.jks文件所在的目录,这里配置的所有内容都是创建jks的时候自己填的。
jks的创建
as菜单 Build–>Generate Signed Bundle/APK…->选中APK–>Next–>Create new…
在打开的填写文件路径、密码等内容,一路next就行了
配置好之后,在flavor块中加上对签名的引用,如下
productFlavors {
// google渠道
google {
applicationId = "com.my.google"
signingConfig signingConfigs.google
}
// twitter渠道
twitter {
applicationId = "com.my.twitter"
signingConfig signingConfigs.twitter
}
}
- 注意一点,signingConfigs{…}代码块要放在引用它的代码之前,否则会找不到引用的签名
三、 配置只需要区分渠道而不需要区分buildType的参数,如:页面中的图片,接口参数等
这些参数都可以用buildConfigField方法来设置,这个方法将在BuildConfig类中添加一个字段,它接受三个参数,第一个是数据类型,第二个是字段名,第三个是字段值,如:
buildConfigField "Integer",