我有一个cordova应用程序,正在使用cmd进行构建,并且需要对其发布apk进行签名。

首先,我在没有-tsa选项的情况下执行了此操作,因此在运行命令时询问了pwd,然后使用警告进行了签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
-keystore my.keystore "apk\release\app-release-unsigned.apk" myaliasofkeystore



  没有提供-tsa或-tsacert,并且此jar没有时间戳记。


因此,我添加了-tsa timestamp.digicert.com选项:

jarsigner -tsa timestamp.digicert.com -verbose -sigalg SHA1withRSA -digestalg SHA1
-keystore my.keystore "apk\release\app-release-unsigned.apk" myaliasofkeystore


现在,在运行此命令时,要求输入密码
 但之后产生此错误:


  jarsigner错误:java.lang.NullPointerException

最佳答案

您无需添加-tsa。只需忽略有关时间戳的警告即可。

根据docs


  建议给签名打上时间戳,如果签名没有打上时间戳,则会显示警告。时间戳用于验证用于签名JAR文件的证书在签名时是否有效。


这意味着证书过期后,用户可以放心,您已在到期日之前签署了APK。但是根据google docs


  如果您打算在Google Play上发布应用,则用于签署这些APK的密钥的有效期必须在2033年10月22日之后结束。GooglePlay强制执行此要求,以确保用户可以在有新版本可用时无缝升级应用。


如果您的用户无法在2033年10月23日验证证书,我认为这没什么大不了的:)

07-24 04:36