APK 签名方案变更
JAR 签名(v1 方案)
签名配置
将签名配置添加到模块级 build.gradle 文件中:
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
更多配置请参考配置签名设置
APK 签名方案 v2
APK 签名方案 v2 是在 Android 7.0 (Nougat) 引入的。相比于传统的 JAR 签名方案 (v1),v2 签名方案提供了更快的 APK 安装速度和更强的安全性。主要特性包括:
- 完整性检查:对 APK 的整个内容进行签名,不只是单个文件。这样可以更好地检测 APK 是否被篡改。
- 加速安装:通过减少安装时的验证步骤,提高 APK 的安装速度。
默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK 签名方案 v2 和传统签名方案(该方案使用 JAR 签名)为您的应用签名。
如果您的应用在使用 APK 签名方案 v2 时无法正确构建,您可以停用新方案。
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
...
v2SigningEnabled false
}
}
}
更多介绍请参考Android 7.0新功能:APK 签名方案 v2
APK 签名方案 v3
APK 签名方案 v3 是在 Android 9.0 (Pie) 引入的,主要是在 v2 签名方案的基础上增加了对 APK 版本管理的支持。主要特性包括:
- 版本控制:允许对 APK 的不同版本进行签名,这对于 APK 增量更新非常有用。
注意:搭载 Android 8.1(API 级别 27)或更低版本的设备不支持更改签名证书。如果应用的
minSdkVersion为 27 或更低,除了新签名之外,还需要使用旧的签名证书为应用签名。
如果想要开启 APK 签名方案 v3:
android {
...
defaultConfig { ... }
signingConfigs {
release {
...
v3SigningEnabled true
}
}
}
更多功能请参考 具有密钥轮替的 APK 签名方案。
APK 签名方案 v4
APK 签名方案 v4 是在 Android 11 (R) 引入的,进一步增强了安装性能。主要特性包括:
- 增量安装支持:支持 ADB 增量 APK 安装,从而加快 APK 安装速度。新的签名会存储在一个单独的文件(apk-name.apk.idsig)中。
更多请参考APK 签名方案 v4
强制 APK 签名方案 v2
对于以 Android 11(API 级别 30)为目标平台,且目前仅使用 APK 签名方案 v1 签名的应用,现在还必须使用 APK 签名方案 v2 或更高版本进行签名。用户无法在搭载 Android 11 的设备上安装或更新仅通过 APK 签名方案 v1 签名的应用。
更多请参考现在需要 APK 签名方案 v2
apksigner
apksigner 是一个命令行工具,用于对 APK 文件进行签名。它支持使用 v1、v2、v3 和 v4 签名方案对 APK 文件进行签名。
为apk签名
$ apksigner sign --ks release.jks app.apk
验证 APK 签名
检查 APK 的签名是否可在 APK 支持的所有 Android 平台上被确认为有效:
$ apksigner verify app.apk
运行以下命令来检查APK的签名信息,这个命令会输出APK文件使用了哪些签名方案:
apksigner verify --verbose --print-certs your_app.apk
更多
更多功能请参考官方文档:apksigner