今天先来无事讲讲gradle的多渠道打包,首先我们新建立一个项目里面有gradle的基本配置如下图
现在如果有两个渠道两个渠道的包名不同,那我们不必每次去改动包名后再打包。这样就可以分渠道打包gradle提供productFlavors来分渠道打包,每个渠道改一下包名如图配置
_H99和_H100是渠道号可以任意改写,这样我们就可以打两个渠道的包了他们的包名一个是com.example.administrator.myapplication1另一个是com.example.administrator.myapplication2如下图
此时我们就可以批量分渠道打包,同时可以一次性打n个包这里演示两个。如果我们要批量修改打出来apk的名称看起来更加规范可以在buildTypes里面这样配置。这里一华融证券开户为例。
打出来的包看起来就比较整齐也不用一个个改
同样我们可以在我们的渠道名方法_H199 {}和_H100 {}里面去修改其他的配子包括minSdkVersion15,targetSdkVersion25,versionCode1,versionName"1.0" 等等,可以让不同的渠道用不同的sdk以及版本号海报阔自定义字段(稍后讲解),在打包的时候渠道的配子会自动替换defaultConfig里面的配子,并且调试的时候可以在build variants里面运行需要调试的渠道;
以上只是简单的那么 加入现在有一个需求不同渠道使用的很多资源不同, 比如不同渠道的app启动画面的图片不一样怎么办呢?这个时候我们就需要建立一个与main同级的目录文件名要与渠道名称相同,这里打包是会替换main同级目录下的相同命名资源
这样打包的时候启动图片yd_pic01.png会自动替换main里面的默认图片,没一个包的启动图片就是不同的图片,同样不仅仅的drawable,也可以建立res文件里面同目录同名称的文件字段都会替换,包块app的名称也可以在res下面建立values文件夹 再建立string里面app名称字段都可以替换如图:
当我们不同的渠道可以自定义变量,比如不同渠道访问接口地址不同可以每一个渠道号里面配子:
在java代码里面使用如下:
这样不同的渠道获得的url就不一样。如果mainfaset某些渠道使用的字段不一样,比如地图api key,不同渠道包名不同 那么地图api key就不一样,我们就可以使用占位符,在渠道里面写manifestPlaceholders如图
manifest配置如下
其中 CHANNEL_VALUE 为占位符名称可以随意,这样不同的渠道使用了不同的地图api key了。
最后一点, 如果我们不同的渠道加载不同的包怎么办呢?那么我们在dependencies里面这样配置去掉
compile fileTree(include: ['*.jar'],dir:'libs')这个加载所有的包改为一个个导入包。摸个渠道特有的包就渠道名称+Compile files('libs/包名')如下图:
到此多渠道打包就差不多这么多内容了。