产品有多个运行环境简直再常见不过了,一般来讲都会有相应的开关参数来区分各种环境。
默认情况下我们只能打2个包,debug包跟release包,而且每次只能安装其中一个。
如果A、B环境都需要测试,那切换参数以及重新打包安装简直是个噩梦。不仅仅是因为步骤繁琐,多个参数来回修改也特别容易出错。
如何支持多版本共存?(gradle)
我们知道,安卓系统中区分不同应用使用的是applicationId
属性,如果2个应用的applicationId
相同,不管实际上2个有多少差异,都会认为是同一个应用。而且,按照安装顺序,后安装的会覆盖前一个应用。 那么方法就很明显了。
为不同版本提供不同的applicationId
-
删掉在
Androidmanifest.xml
中声明的applicationId
-
在
gradle.build
文件中声明多个productFlavor
,并设置不同的applicationIdSufix
,如
android{
...
productFlavor{
beijing{
applicationIdSuffix ".bj"
}
shanghai{
applicationIdSuffix ".sh"
}
}
...
}
其实到这一步就已经支持多版本共存了,不过还不够!目前多个版本还是使用相同的配置。
如何添加从属于版本的配置
- 根据buildVariants名称,建立对应的文件夹
在src目录下新建文件夹beijing
、shanghai
(跟main
文件夹同级)
- 按照业务需要,配置多个文件,并安放在对应的variant中。
假设要为不同版本设置不同的应用名
在beijing
、shanghai
根目录下建立如下文件res/values/strings.xml
。
然后在文件里添加相应的属性
beijing
shanghai<string name="app_name">犀利北京版</string>
这样就完成啦!<string name="app_name">犀利上海版</string>
打包出来并安装,是不是可以同时安装北京上海,而且应用名还不同呢!
此处只是举例,其实还可以配置更多东西,大家可以尽情发挥想象力。
多版本可能遇到的问题
- 由于provider组件的 android:authorities 属性需要系统唯一的值,所以各个variant要配置不同的值,否则无法共存
- 如果有多个AndroidManifest,可能会因为存在相同属性而编译不通过,可以按照错误提示增加
tools:replace="theme,authorities,name..."
- 多版本共存时,可能会因为存在多个相同的 component name 而弹出一个选择框,选择要打开的应用