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 国际许可协议 进行许可。