”只用 1 分钟“ – 超简极速 Apk 签名 & 多渠道打包神器

众所周知,渠道包作为当下国内 Android 应用市场常见的分发方式,当 APP 和后台交互或进行数据上报时,会带上各自的 channel 渠道信息,以此方便企业 & 开发者统计 APP 在各渠道的下载量、用户量、留存率等关键活跃数据,并针对性的调整应用内容和推广方案。而 Android 应用市场存在大大小小几百个商店,每当需要发布 APP 或迭代新版本,往往需要开发者生成多个渠道包或是在各应用市场重新分发,且官方提供的 ProductFlavor 多渠道打包工具,对于每一个渠道包,都需要进行一次完整的 APK 打包过程,对于注重效率的开发者而言整个环节其实相当耗时,是否有更好的多渠道签名打包方案呢?

近期,顶象技术团队开源了自己的 Android apk 打包工具,精简,高效,应用开发者需要的多渠道打包神器来了!

顶象 Apk 签名和多渠道打包工具

下载后的包内文件:

一.签名功能简介

我们先来看看 V1 和 V2 签名的区别:

在 Android Studio 中点击菜单 Build->Generate signed apk… 打包签名有两种签名选项 V1 (Jar Signature) V2 (Full APK Signature),**

从 Android 7.0 开始,谷歌增加新签名方案 V2 Scheme (APK Signature);

但 Android 7.0 以下版本,只能用旧签名方案 V1 scheme (JAR signing)

V1 签名:

  • 来自 JDK (jarsigner), 对 zip 压缩包的每个文件进行验证,签名后还能对压缩包修改 (移动 / 重新压缩文件)
  • 对 V1 签名的 apk/jar 解压,在 META-INF 存放签名文件 (MANIFEST.MF, CERT.SF, CERT.RSA),
  • 其中 MANIFEST.MF 文件保存所有文件的 SHA1 指纹 (除了 META-INF 文件), 由此可知: V1 签名是对压缩包中单个文件签名验证

V2 签名:

  • 来自 Google (apksigner), 对 zip 压缩包的整个文件验证,签名后不能修改压缩包 (包括 zipalign),
  • 对 V2 签名的 apk 解压,没有发现签名文件,重新压缩后 V2 签名就失效,由此可知: V2 签名是对整个 APK 签名验证

V2 签名优点很明显:

  • 签名更安全 (不能修改压缩包)
  • 签名验证时间更短 (不需要解压验证), 因而安装速度加快

顶象 apk 签名工具默认同时使用 V1+V2 签名方式,用于对 android 加固后的 apk 进行重新签名。

启用工具界面:

使用说明:

  • 下载顶象签名工具 dx-signer.jar,双击运行。
  • 选择输入 apk、aab 文件。
  • 选择签名的 key 文件,并输入 key 密码。
  • 选择重签后 apk、aab 的路径,以 apk 结束。如:D:\sign.apk
  • 点击 “签名” 按钮,等待即可签名完成。

ps: 如果有 alias(证书别名)密钥的或者有多个证书的,请在高级 tab 中选择 alias 并输入 alias 密码

命令行界面:

支持的 option 如下:

例如:

二.多渠道功能简介

顶象多渠道工具兼容友盟和美团 walle 风格的多渠道包,方便客户把 APP 发布到不同的应用平台,进行渠道统计。

使用说明:

  • 在 app 中预留读取渠道信息的入口,具体见读取渠道信息
  • 在签名使用基础上,点击选择渠道清单
  • 选择清单文件 channel.txt。具体文件格式见渠道格式文件说明
  • 点击签名,等待生成多个带签名的渠道 app

读取渠道信息:

顶象多渠道工具兼容友盟和美团 walle 风格的多渠道包,下面是两种不同风格的渠道信息读取方法。选其中之一即可。

您可以读取这个字段。

渠道文件格式说明

请准备渠道清单文件 channel.txt, 格式为每一行一个渠道, 例如:

License

三.常见问题:

关于 app 签名:

Q: app 签名是什么?

A: 签名就是用于识别 app 开发者,并保证 apk 完整性的一个机制,谷歌要求每一个 app 都需要有签名。

Q: 为什么上传的 app 需要有签名?

A: 加固有防二次打包的功能,需要提前 apk 原本的签名,供加固后验证签名正确性用。

Q: 在 androidstudio 中打出的 debug 版本包,可以加固吗?

A: 不建议用 debug 版本包加固,因为 debug 版本的包使用的是 androidstudio 的 debug 签名,可能导致加固后无法重签名,或者签错名的情况。导致无法正常运行。

关于加固后重签名:

Q: 上传之前 apk 已经签过名了,为什么加固后又要重新签一次?

A: 加固之后会破坏 apk 原有的签名,所以需要重新签名,否则无法安装。

Q: 为什么重签名需要和加固前保持一致?

A: 如果不保持一致,则会触发加固的防二次打包功能,无法正常运行。