準(zhǔn)備工作
首先將jdk
中的bin
文件夾添加至path
環(huán)境變量中昙读,準(zhǔn)備一個未簽名的apk
應(yīng)用乌逐。
判斷是否簽名
要判斷一個apk
文件是否已經(jīng)進行過簽名竭讳,使用解壓應(yīng)用(如WinRAR
等)打開該文件,查看是否有一個META-INF
的文件夾浙踢,如果有則代表已經(jīng)簽名绢慢;沒有則表示沒有簽名。
將一個已經(jīng)簽名的應(yīng)用轉(zhuǎn)化為一個未簽名的應(yīng)用方法非常簡單洛波,只需要將應(yīng)用中的META-INF
文件夾刪除就可以了胰舆。
可在解壓應(yīng)用界面(上圖)直接刪除;也可以先將應(yīng)用程序的后綴名由apk
更改為rar
等蹬挤,再解壓缚窿,刪除,然后壓縮焰扳,將后綴名改成apk
倦零。
需要注意的一點是误续,在壓縮時要保持原來的文件結(jié)構(gòu)不變,需要選中所有文件(夾)來壓縮扫茅,如下國:
使用keytool
創(chuàng)建密鑰
打開命令行蹋嵌,輸入命令:
keytool -genkeypair -v -keystore demo.keystore -alias demo -keyalg RSA -validity 2000
參數(shù)說明:
-
genkeypair
生成密鑰對 -
alias
密鑰庫名稱,即最后保存的文件名稱(demo.keystore
) -
alias
密鑰別名(demo
) -
keyalg
密鑰加密算法(RSA
) -
validity
密鑰有效時間葫隙,單位為天(2000天)
而后輸入密碼:
接著會提示輸入城市等信息栽烂,回車即可,默認(rèn)為unknown
:
確認(rèn)恋脚,輸入y
(大小寫均可)愕鼓,回車即可:
輸入別名密碼,若想設(shè)置不同密碼慧起,輸入密碼菇晃;一般情況下回車即可,默認(rèn)設(shè)置相同密碼:
完成后會在當(dāng)前文件夾下創(chuàng)建一個密鑰文件(demo.keystore
)蚓挤。
創(chuàng)建完成磺送。
完成后可用keytool
進行查看,輸入命令:
keytool -list -v -keystore demo.keystore
運行結(jié)果:
使用jarsigner
進行簽名
輸入命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore demo.keystore demo.apk demo -signedjar demo_signed.apk
參數(shù)說明:
- 在
java 1.8
環(huán)境下灿意,verbose
和digestalg
兩參數(shù)必須加上估灿,否則生成的文件無法安裝 -
keystore
所使用的密鑰 -
demo.apk
要進行簽名的文件 -
demo
密鑰別名 -
signedjar
將簽好名的應(yīng)用保存為demo_signed.apk
。此參數(shù)可省略缤剧,省略后直接改變原文件為已簽名文件馅袁,不會生成新的文件。
運行結(jié)果:
看到jar signed
字樣時表示簽名成功荒辕。
注:
本文在WINDOWS 10
汗销,JAVA 1.8
的環(huán)境下進行測試,如在不同環(huán)境下可能會不適用抵窒!