APK 签名方案:V1/V2/V3 全部在设备上完成
为什么需要签名
所有 Android APK 在安装前都必须签名。签名验证:
- APK 没有被篡改过(完整性)
- 声明签名者的身份(归属验证)
- 系统可以区分「同一开发者」的应用,支持覆盖安装
WebToApp 的 APK 构建和签名全部在设备上完成——不需要外部签名工具(jarsigner、apksigner),不需要电脑。
内置 apksig 库
WebToApp 内置了 Google 官方的 com.android.tools.build:apksig 库——Android Studio 和 Gradle 也用同一个库。支持:
- V1 签名(JAR 签名):兼容所有 Android 版本,从 Android 1.0 就有
- V2 签名(APK 签名方案 v2):Android 7.0(API 24)引入,加速安装和校验,对整个 APK 做签名而不仅是 JAR 条目
- V3 签名:Android 9.0(API 28)引入,支持密钥轮换(APK 可以被不同密钥签名者更新)
默认情况下 WebToApp 启用 V1 + V2 + V3 三种签名,最大化兼容性。
签名证书管理
在 WebToApp 设置里可以管理签名证书:
- 创建新证书:指定证书名称、有效期、密钥类型(RSA / ECDSA / DSA)
- 导入现有证书:支持 PEM 和 PKCS12 格式,带私钥一起导入
- 导出证书:把证书和私钥导出成文件
- 查看证书指纹:MD5 / SHA-1 / SHA-256,用于 Firebase、Google Play、Facebook SDK 等集成场景
签名和版本更新的关系
APK 覆盖安装有一条硬性规则:新版本的签名证书必须和旧版本相同。
这意味着:
- 第一次打包某个应用时用哪个证书,以后更新就必须用同一个证书
- 如果你换了证书,用户卸载旧版后才能安装新版(无法覆盖安装)
- 妥善保存你的签名证书文件——丢了就再也无法发新版本了
WebToApp 内置的证书默认保存在应用私有目录里,卸载构建器会导致证书丢失。建议定期导出证书备份到夸克网盘或其他安全位置。
签名文件名
V1 签名方案支持自定义 META-INF/<名称>.SF 和 .RSA 文件名。可以在设置里指定(默认用 CERT)。
这个名称一般不需要改,但如果应用商店对签名文件名有特殊要求可以调整。
密钥类型选择
- RSA:最通用,兼容所有 Android 版本。推荐 2048 位以上
- ECDSA:比 RSA 快、证书体积更小,Android 12+ 优先使用。推荐 P-256 曲线
- DSA:已过时,Android 7.0+ 不推荐。如果项目需要和老系统兼容可以考虑