給apk文件簽名主要分三步,創建證書(如果沒有)-->簽名-->優化(可選
)
1)使用jdk的keytool工具生成簽名用的證書
> keytool -genkey -v -aliasCERT -keyalg RSA -keysize 2048 -validity 10000 -keystore
CERT.keystore
創建過程需要輸入一些標識信息和密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改):
CERT.keystore ---- 證書保存的文件名
CERT ---- 證書的別名
10000 ---- 10000天的有效期
2048 ---- 默認爲1024 bits,Android 建議使用2048 bits或更高
其他的詳細信息可以使用keytool -help查看幫助
證書生成後使用如下命令可以查看證書的信息:
> keytool -list -alias CERT -keystoreCERT.keystore
2)使用jdk的jarsigner工具對apk文件簽名
>
jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT
簽名過程需要輸入證書的密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改):
CERT.keystore ---- 證書保存的文件名
CERT ---- 證書的別名
待簽名的apk文件根根目錄下如果有文件夾“META-INFO”,請先刪除(重新簽名就需要這樣做)。
如果不想創建過程輸出太多信息,可以刪除“-verbose” 。
上述簽名會直接覆蓋原來的文件,如果不想被覆蓋而簽名爲另外的新文件 signed.akp,
只需將 to_sign.apk 改爲 -signedjar to_sign.apk signed.akp 即可。
簽名後可以使用如下命令驗證是否簽名成功:
> jarsigner -verify to_sign.apk
如果需要查看更詳細的驗證信息,可修改爲:
> jarsigner -certs -verbose -verify to_sign.apk
3)使用android sdk的zipalign工具優化已簽名的apk文件
> zipalign -v 4 unaligned.apk aligned.apk
注意要在簽名後再zipalign。這個工具不是jdk自帶的,而是在%ANDROID_HOME%\tools\zipalign.exe。
例子:
爲APK重新生成簽名
1、將證書複製到與需要重新簽名的apk文件相同的目錄下
2、進入該目錄下執行以下語句
|
jarsigner -verbose -keystore CERT.keystore -signedjar weibo_signed.apk
netease_microblog_android_unsigned.apk CERT
|
命令解釋:
jarsigner是Java的簽名工具,JDK自帶
-verbose參數表示:顯示出簽名詳細信息
-keystore表示使用當前目錄中的android.keystore簽名證書文件。
--signedjar weibo_signed.apk netease_microblog_android_unsigned.apk表示簽名後生成的APK名稱爲 weibo_signed.apk,未簽名的APK Android軟件名稱爲netease_microblog_android_unsigned.apk
CERT: 表示簽名文件的別名,生成證書的時候有書寫
執行以上操作之後在目錄下生成了weibo_signed.apk ,經過自己簽名的APK文件