多渠道回顾

前言

自从入职上家之后,一年多的时间里就基本没有碰过多渠道了(叹息)。

总之,回顾下吧。

多渠道

多渠道也叫多渠道打包。

为什么需要多渠道打包呢?一个包能解决的事情为毛这么麻烦呢?产出一个包不也能发布到各个应用市场嘛。

如果所在的公司没有以下需求:

  • 统计哪个渠道用户变多
  • 哪个渠道用户黏性强
  • 哪个渠道需要个性化的设计

确实不需要!

我们通过 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,如图:

Android Studio 图形化签名

以下是 apk 安装过程中签名验证的流程,如图:

apk 安装过程签名校验

  • UNCHANGED 代表 Android 7.0以下流程
  • NEW 代表 Android 7.0以上流程
1
2
3
4
5
public class DefaultSigningConfig implements SigningConfig {

// 省略 N行
private boolean mV1SigningEnabled = true;
private boolean mV2SigningEnabled = true;

v1、v2 签名默认都是启用的,如果想禁用,可以在对应的地方加上:

1
2
3
4
5
signingConfigs{
release{
v2SigningEnabled false
}
}

v1、v2 有啥区别呢?

本质区别就在于签名的方式,首先 apk 本身是 zip 格式文件。

v2 签名后和签名前的差异:

v2 和 v1签名对比

签名前:

  • 压缩的文件内容源数据
  • 压缩的目录源数据
  • 目录结束标识结构

签名后:

  • 压缩的文件内容源数据
  • 签名区块
  • 压缩的目录源数据
  • 目录结束标识结构

多了一个区块,用于签名验证。如果其他3区块被修改了,都逃不过 v2 验证,直接导致验证失败,所以 v2 比 v1 更加安全。

参考