前言
自从入职上家之后,一年多的时间里就基本没有碰过多渠道了(叹息)。
总之,回顾下吧。
多渠道
多渠道也叫多渠道打包。
为什么需要多渠道打包呢?一个包能解决的事情为毛这么麻烦呢?产出一个包不也能发布到各个应用市场嘛。
如果所在的公司没有以下需求:
- 统计哪个渠道用户变多
- 哪个渠道用户黏性强
- 哪个渠道需要个性化的设计
- …
确实不需要!
我们通过 Android
提供的 API
可以获取到的信息有:
- 应用的版本号
- 版本名称
- 系统版本
- 机型
- …
但是唯独渠道,即应用商店的信息是没有办法从系统中获取到的。只能人为地在 apk 中添加渠道信息。
多渠道打包,需要关注的事情:
- 将渠道信息写入 apk
- 将 apk 中的渠道信息传输到后端
打包会经过签名这个步骤,而 Android 签名有 2种不同的方式:
- Android 7.0 之前,使用 v1 签名,是 jar signature,源自 JDK
- Android 7.0 之后,引入 v2 签名,是 Android 特有的 apk signature
使用区别:
使用 v2 方式签名,7.0 以下的系统安装应用会失败
使用 v1 方式签名,7.0 和 7.0 以下的都 OK
Android Studio 的图形界面可以同时选择两种签名方式,7.0 以下使用 v1,7.0 以上选择 v2,如图:
以下是 apk 安装过程中签名验证的流程,如图:
- UNCHANGED 代表 Android 7.0以下流程
- NEW 代表 Android 7.0以上流程
1 | public class DefaultSigningConfig implements SigningConfig { |
v1、v2 签名默认都是启用的,如果想禁用,可以在对应的地方加上:
1 | signingConfigs{ |
v1、v2 有啥区别呢?
本质区别就在于签名的方式,首先 apk 本身是 zip 格式文件。
v2 签名后和签名前的差异:
签名前:
- 压缩的文件内容源数据
- 压缩的目录源数据
- 目录结束标识结构
签名后:
- 压缩的文件内容源数据
- 签名区块
- 压缩的目录源数据
- 目录结束标识结构
多了一个区块,用于签名验证。如果其他3区块被修改了,都逃不过 v2 验证,直接导致验证失败,所以 v2 比 v1 更加安全。