準備工作
首先将
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
的環境下進行測試,如在不同環境下可能會不适用!