准備工作
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, 如在不同環境下可能會不適用。
參考鏈接