准备工作
首先将
jdk
中的
bin
文件夹添加至
path
环境变量中,准备一个未签名的
apk
应用。
判断是否签名
要判断一个
apk
文件是否已经进行过签名,使用解压应用(如
WinRAR
等)打开该文件,查看是否有一个
META-INF
的文件夹,如果有则代表已经签名;没有则表示没有签名。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yNwQGZhF2M3kjNwMWNvwFNw8CXyEzLchTMwIzLcRXZu5Sas9Gbuk2Lc9CX6MHc0RHaiojIsJye.png)
将一个已经签名的应用转化为一个未签名的应用方法非常简单,只需要将应用中的
META-INF
文件夹删除就可以了。
可在解压应用界面(上图)直接删除;也可以先将应用程序的后缀名由
apk
更改为
rar
等,再解压,删除,然后压缩,将后缀名改成
apk
。
需要注意的一点是,在压缩时要保持原来的文件结构不变,需要选中所有文件(夹)来压缩,如下国:
使用 keytool
创建密钥
keytool
打开命令行,输入命令:
keytool -genkeypair -v -keystore demo.keystore -alias demo -keyalg RSA -validity 2000
参数说明:
-
生成密钥对genkeypair
-
密钥库名称,即最后保存的文件名称(alias
)demo.keystore
-
密钥别名(alias
)demo
-
密钥加密算法(keyalg
)RSA
-
密钥有效时间,单位为天(2000天)validity
而后输入密码:
接着会提示输入城市等信息,回车即可,默认为
unknown
:
确认,输入
y
(大小写均可),回车即可:
输入别名密码,若想设置不同密码,输入密码;一般情况下回车即可,默认设置相同密码:
完成后会在当前文件夹下创建一个密钥文件(
demo.keystore
)。
创建完成。
完成后可用
keytool
进行查看,输入命令:
keytool -list -v -keystore demo.keystore
运行结果:
使用 jarsigner
进行签名
jarsigner
输入命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore demo.keystore demo.apk demo -signedjar demo_signed.apk
参数说明:
- 在
环境下,java 1.8
和verbose
两参数必须加上,否则生成的文件无法安装digestalg
-
所使用的密钥keystore
-
要进行签名的文件demo.apk
-
密钥别名demo
-
将签好名的应用保存为signedjar
。此参数可省略,省略后直接改变原文件为已签名文件,不会生成新的文件。demo_signed.apk
运行结果:
看到
jar signed
字样时表示签名成功。
注:
本文在
WINDOWS 10
,
JAVA 1.8
的环境下进行测试,如在不同环境下可能会不适用!