在Android应用开发中,APK签名是确保应用完整性和来源可信的关键步骤,通过命令行对APK进行签名,可以灵活地集成到自动化构建流程中,尤其适合CI/CD环境,以下是关于Android APK签名的详细命令行操作指南,包括签名原理、工具选择、具体步骤及常见问题解答。

Android APK签名基础
Android签名采用非对称加密技术,开发者使用私钥对应用进行签名,系统则通过公钥验证签名有效性,签名后的APK会包含META-INF目录,其中包含签名信息文件(如.SF、.RSA或.EC),签名分为调试签名(Debug)和发布签名(Release),前者使用debug密钥库(debug.keystore),后者需手动创建密钥库。
签名工具与准备
工具选择
- jarsigner:JDK自带工具,基于Java签名机制,适用于传统签名。
- apksigner:Android SDK工具包(
build-tools)中的推荐工具,支持V1、V2、V3签名算法,安全性更高。 - keytool:用于生成和管理密钥库(.keystore文件)。
环境配置
- 确保已安装JDK(
jarsigner依赖)和Android SDK(apksigner位于build-tools目录)。 - 将
apksigner路径添加到系统环境变量(如ANDROID_HOME/build-tools/版本号/)。
密钥库生成
使用keytool创建发布签名密钥库:
keytool -genkey -v -keystore my-release-key.keystore -alias myalias -keyalg RSA -keysize 2048 -validity 10000 -storepass <密码> -keypass <密码>
参数说明:
-keystore:密钥库文件名。-alias:密钥别名。-keyalg:加密算法(RSA或EC)。-validity:有效期(天)。-storepass/-keypass:密钥库和密钥密码。
命令行签名操作
使用apksigner签名(推荐)
步骤1:检查签名状态

apksigner verify -v app-unsigned.apk
输出会提示未签名或签名无效。
步骤2:执行签名
apksigner sign --ks my-release-key.keystore --ks-key-alias myalias --ks-pass pass:<密码> --key-pass pass:<密码> --out app-signed.apk app-unsigned.apk
参数说明:
--ks:密钥库路径。--ks-key-alias:密钥别名。--ks-pass/--key-pass:密钥库和密钥密码(可通过pass:前缀直接输入)。--out:输出APK路径。
步骤3:验证签名

apksigner verify -v app-signed.apk
若输出包含Verified,则签名成功。
支持多签名方案
apksigner sign --ks my-release-key.keystore --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --out app-signed.apk app-unsigned.apk
--v1-signing-enabled:启用JAR签名(兼容旧版Android)。--v2-signing-enabled:APK Signature Scheme v2(提高安全性)。--v3-signing-enabled:APK Signature Scheme v3(支持密钥轮转)。
使用jarsigner签名(兼容旧环境)
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore -storepass <密码> -keypass <密码> app-unsigned.apk myalias
参数说明:
-sigalg:签名算法(推荐SHA256withRSA)。-digestalg:摘要算法(推荐SHA-256)。
签名后需使用zipalign对齐优化:
zipalign -v 4 app-unsigned.apk app-aligned.apk
签名与对齐顺序
签名必须在对齐之后进行,否则会破坏签名有效性,正确顺序:
- 构建未签名APK(
assembleDebug或assembleRelease)。 - 使用
zipalign对齐APK。 - 使用
apksigner签名。
常见错误与解决
| 错误提示 | 原因 | 解决方案 |
|---|---|---|
APK signature scheme v2 not supported |
目标Android版本低于7.0 | 禁用V2签名:--v2-signing-enabled false |
jar is unsigned |
密钥库密码错误或别名不存在 | 检查keytool -list -keystore验证密钥信息 |
zipalign failed |
APK未正确构建 | 确保使用assemble生成的未签名APK |
相关问答FAQs
Q1: 如何检查APK的签名信息?
A1: 使用keytool或apksigner命令:
keytool -printcert -jar app-signed.apk # 或 apksigner verify -print-certs app-signed.apk
可查看证书指纹、有效期等详细信息。
Q2: 签名后的APK如何重新签名?
A2: 需先对APK进行zipalign和zip -d移除旧签名,再重新签名:
zip -d app-signed.apk 'META-INF/*' apksigner sign --ks new-key.keystore --out app-resigned.apk app-signed.apk
注意:直接重新签名可能导致V2/V3签名失效,需确保旧签名已完全移除。
