菜鸟科技网

Android APK签名命令有哪些参数与用法?

Android APK签名命令是Android开发过程中至关重要的环节,它用于验证APK的完整性和来源,确保应用未被篡改,并将开发者身份与APK绑定,在Android系统中,签名通常使用Java的Keytool工具生成密钥库(KeyStore),再通过Jarsigner或Android Studio提供的签名工具完成签名操作,以下是关于Android APK签名命令的详细说明,包括密钥库生成、签名命令使用、签名验证及常见问题处理。

Android APK签名命令有哪些参数与用法?-图1
(图片来源网络,侵删)

密钥库(KeyStore)生成

在签名APK之前,首先需要生成一个密钥库(.keystore文件),用于存储密钥对(公钥和私钥),Keytool是JDK自带的管理密钥和证书的工具,基本命令如下:

keytool -genkeypair -v -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 2048 -validity 10000

命令参数说明:

  • -genkeypair:生成密钥对。
  • -keystore:指定密钥库文件名(如my-release-key.keystore)。
  • -alias:设置密钥别名(如my_alias),需唯一且记忆方便。
  • -keyalg:指定密钥算法(推荐RSA,安全性高)。
  • -keysize:密钥长度(推荐2048或更高)。
  • -validity:密钥有效期(单位:天,如10000表示约27年)。
  • -v:显示详细执行过程。

执行命令后,需输入密钥库密码、别名密码、姓名、组织等信息,这些信息将用于生成证书,生成的.keystore文件需妥善保管,丢失后无法重新签名已发布的APK。

APK签名命令

APK签名分为Debug签名(调试用)和Release签名(发布用),Release签名需使用自定义密钥库,以下是两种签名的具体操作:

Android APK签名命令有哪些参数与用法?-图2
(图片来源网络,侵删)

使用Jarsigner签名

Jarsigner是JDK自带的签名工具,适用于对未签名或已签名的APK进行重新签名,基本命令如下:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_app.apk my_alias

命令参数说明:

  • -verbose:显示详细签名过程。
  • -sigalg:指定签名算法(推荐SHA256withRSA,更安全)。
  • -digestalg:指定摘要算法(推荐SHA-256)。
  • -keystore:指定密钥库路径。
  • my_app.apk:待签名的APK文件名。
  • my_alias:密钥别名。

使用Android Studio的zipalign优化后签名

Zipalign是Android SDK提供的工具,用于优化APK的内存对齐,提高应用运行效率,签名前需先执行zipalign:

zipalign -v 4 my_app_unsigned.apk my_app_aligned.apk

参数说明:

Android APK签名命令有哪些参数与用法?-图3
(图片来源网络,侵删)
  • -v:显示详细过程。
  • 4:对齐字节数(必须为4的倍数,推荐4)。
  • my_app_unsigned.apk:未签名且未对齐的APK。
  • my_app_aligned.apk:对齐后的APK。

对齐后,使用Jarsigner签名:

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore my-release-key.keystore my_app_aligned.apk my_alias

使用apksigner签名(推荐)

Android SDK Build-Tools 24.0.3及以上版本提供了apksigner工具,功能更强大,支持签名验证和V2/V3签名方案,命令如下:

apksigner sign --ks my-release-key.keystore --ks-key-alias my_alias --out my_signed.apk my_app_aligned.apk

参数说明:

  • --ks:指定密钥库路径。
  • --ks-key-alias:指定密钥别名。
  • --out:输出签名后的APK文件名。
  • my_app_aligned.apk:对齐后的APK。

若需验证签名是否有效:

apksigner verify my_signed.apk

签名验证与信息查看

验证APK签名

使用apksigner verify命令检查签名是否有效:

apksigner verify -v my_signed.apk

若输出Verified using v1 scheme (JAR signing)Verified using v2 scheme (APK Signature Scheme v2),表示签名成功。

查看签名信息

通过keytool查看密钥库中的证书信息:

keytool -printcert -jarfile my_signed.apk

或直接查看密钥库:

keytool -list -v -keystore my-release-key.keystore -alias my_alias

常见问题与注意事项

  1. 签名错误:若提示jar is unsignedbad version number in .class file,可能是密钥库密码错误或签名算法不兼容,需检查参数。
  2. 密钥库丢失:自定义密钥库丢失后,无法重新签名APK,需重新生成密钥并重新发布应用。
  3. 签名方案选择:Android 7.0及以上推荐使用V2签名,可通过--v2-signing-enabled true参数启用(apksigner默认支持)。
  4. 多APK签名:若需对同一密钥库的多个APK签名,可使用批处理脚本循环执行命令。

相关问答FAQs

Q1: 如何修改已签名APK的签名?
A: 若需修改已签名APK的签名,需先对APK进行反编译(如使用apktool),修改后重新打包,再使用原密钥库或新密钥库重新签名,注意:若原密钥库丢失,无法直接修改签名,需重新生成密钥并重新发布应用。

Q2: Debug签名和Release签名有什么区别?
A: Debug签名由Android Studio自动生成,密钥库密码、别名等固定,仅用于调试阶段;Release签名需开发者自定义密钥库,包含完整的开发者信息,用于发布到应用商店,Debug签名有效期较短,而Release签名有效期可达数十年,且需妥善保管密钥库文件。

分享:
扫描分享到社交APP
上一篇
下一篇