android: 对普通的apk应用进行签名

准备工作

jdk (我这里的是jdk1.8)

一个未签名的apk应用。

判断是否签名

要判断一个apk文件是否已经进行过签名,使用解压应用(如WinRAR等)打开该文件,查看是否有一个META-INF的文件夹,如果有则代表已经签名;没有则表示没有签名。

 将一个已经签名的应用转化为一个未签名的应用方法非常简单,只需要将应用中的META-INF文件夹删除就可以了。

可在解压应用界面(上图)直接删除;也可以先将应用程序的后缀名由apk更改为rar等,再解压,删除,然后压缩,将后缀名改成apk。

需要注意的一点是,在压缩时要保持原来的文件结构不变,需要选中所有文件(夹)来压缩,如下国:

 使用keytool 创建密钥

打开jdk的bin文件夹

 

 

 在当前路径下打开命令行,输入命令:

keytool -genkeypair -v -keystore realsil.keystore -alias realsil-keystore -keyalg RSA -validity 2000

其中:

  • genkeypair 生成密钥对
  • alias 密钥库名称,即最后保存的文件名称(reaisil.keystore
  • alias 密钥别名(realsil-keystore
  • keyalg 密钥加密算法(RSA
  • validity 密钥有效时间,单位为天(2000天)
然后输入密码,记住这个密码,我们接下来会再次用到。

密码输入完毕后,按照提示进一步完善个人的其它信息:

提示是否正确时,输入小写字母: y, 点击回车

确认完毕后,会再次让你输入先前提供的密码。输入完毕后,点回车,这样当前目录下就会生成一个新的keystore文件。

 

这样一个keystore就创建好了,完成后可以使用keytool -list 命令查看当前keystore 的详细信息:

keytool -list -v -keystore realsil.keystore

使用jarsigner进行签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore realsil.keystore Test_Demo.apk realsil-keystore -signedjar demo_signed.apk

参数说明:

在java 1.8环境下,verbose和digestalg两参数必须加上,否则生成的文件无法安装
keystore 所使用的密钥
Test_Demo.apk 要进行签名的文件
realsil-keystore 密钥别名
signedjar 将签好名的应用保存为demo_signed.apk。此参数可省略,省略后直接改变原文件为已签名文件,不会生成新的文件。

执行:

 

看到jar 已签名,代表签名成功,接下来便可以使用生成的demo_signed.apk进行安装了。

 

PS: 

本人测试环境为:win10 64位,jdk1.8, 如在不同环境下可能会不适用。

参考链接

对apk应用进行签名

 

posted @ 2020-05-08 13:40  夜行过客  阅读(5466)  评论(0编辑  收藏  举报