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, 如在不同环境下可能会不适用。
参考链接