Android命令行签名方式

在打包到某些渠道的时候会要求手动签名加固后的包

使用jarsigner签名

jarsigner -verbose -keystore  my.keystore -signedjar demo_signed.apk demo.apk  alias_name

使用jarsigner的基本方式就是这样。需要配置环境变量才可以在任意位置使用此命令行,配置方式这里就不多说,请自行搜索。

参数说明

  • -verbose表示输出一些日志
  • -keystore使用keysotre,所以后面紧跟的是keysotre文件的路径
  • -signedjar签名jar文件
  • demo_signed.apk签名之后生成的文件名字,可以随意起。
  • demo.apk未签名的文件
  • alias_name要使用的锁。一个钥匙库里可能有多个锁。

执行后,如果一切正常就会在执行这个命令的目录下生成一个名为demo_signed.apk的文件。

使用apksigner签名

点击查看官方签名教程

需要翻墙,教程是中文的。官方写的已经很通俗易懂了,这里就补充一下各个参数的解释。

apksigner sign --ks my-release-key.jks my-app.apk

apksigner在sdk/buildtools/(数字文件夹)/下,是一个命令行文件,类似adb、jarsigner等,如果没有就更新到最新(本博文编辑时)的25.0.1,因为这里经常更新所以这次直接拖拽apksigner文件到终端里使用,不要配环境变量了。

参数说明

  • sign要执行签名动作。一会签名后可使用verify检验签名后的文件
  • --ks通常都是使用AndroidStudio生成的jks文件签名使用这个参数就行,后面跟上库文件路径
  • my-app.apk就是未签名的apk,执行上面的命令后会被覆盖为已经签名的apk,如果想把签名后的apk另存为其他名字的文件要使用参数--out <filename>

执行上面的命令时作者遇到一个异常,原因是未能提供库里面一个key的密码,执行时只会提示输入库的密码。改为如下就可以:

apksigner sign --ks my-release-key.jks --key-pass pass:输入你的key密码 my-app.apk

这样就会为默认的key指定密码。如果你有多个key可以用–ks-key-alias 指定你的key。

总结

以上是两种签名方式,目前不清楚apksigner跟jarsigner的区别,我猜测apksigner是全局签名,也就是新版AndroidStudio在build apk时提示的full sign

不了解参数的意义时着实会让人头痛,会遇到很多坑。希望可以给阅读的人带来帮助。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。