Android之apk文件簽名——keytool 和 jarsigner

1、生成密鑰庫
將位置定位在jdk的bin文件中,輸入如下命名行:java

keytool -genkey -alias ChangeBackgroundWid get.keystore -keyalg RSA -validity 20000 -eystore ChangeBackgroundWidget.keystoreandroid

上面的命令中間不換行,按下「Enter」鍵,並根據提示填寫相關信息,詳細信息以下及圖1(validity爲有效期,這裏有效期爲20000天):
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]:  mythlink
您的組織單位名稱是什麼?
[Unknown]:  www.mythlink.com
您的組織名稱是什麼?
[Unknown]:  www.mythlink.com
您所在的城市或區域名稱是什麼?
[Unknown]:  Shen Zhen
您所在的州或省份名稱是什麼?
[Unknown]:  Guang Dong
該單位的兩字母國家代碼是什麼
[Unknown]:  CN
CN=mythlink, OU=www.mythlink.com, O=www.mythlink.com, L=Shen Zhen, ST=Guang Dong
, C=CN 正確嗎?
[否]:  Y
輸入<ChangeBackgroundWidget.keystore>的主密碼
(若是和 keystore 密碼相同,按回車):spa

keytool

                                     圖1命令行

2、能夠生成簽名的apk文件debug

這裏輸入文件ChangeBackgroundWidget.apk,最終生成ChangeBackgroundWidget_signed.apk爲Android簽名後的APK執行文件
輸入如下命令行:xml

jarsigner -verbose -keystore ChangeBackgroundWidget.keystore -signedjar ChangeBackgroundWidget_signed.apk ChangeBackgroundWidget.apk ChangeBackgroundWidget.keystoreblog

上面的命令中間不換行,按「Enter」鍵,根據提示輸入密鑰庫的口令短語(即密碼),詳細信息以下及圖2:
輸入密鑰庫的口令短語:
正在添加: META-INF/MANIFEST.MF
正在添加: META-INF/CHANGEBA.SF
正在添加: META-INF/CHANGEBA.RSA
正在簽名: res/drawable/icon.png
正在簽名: res/drawable/icon_audio.png
正在簽名: res/drawable/icon_exit.png
正在簽名: res/drawable/icon_folder.png
正在簽名: res/drawable/icon_home.png
正在簽名: res/drawable/icon_img.png
正在簽名: res/drawable/icon_left.png
正在簽名: res/drawable/icon_mantou.png
正在簽名: res/drawable/icon_other.png
正在簽名: res/drawable/icon_pause.png
正在簽名: res/drawable/icon_play.png
正在簽名: res/drawable/icon_return.png
正在簽名: res/drawable/icon_right.png
正在簽名: res/drawable/icon_set.png
正在簽名: res/drawable/icon_text.png
正在簽名: res/drawable/icon_xin.png
正在簽名: res/layout/fileitem.xml
正在簽名: res/layout/filelist.xml
正在簽名: res/layout/main.xml
正在簽名: res/layout/widget.xml
正在簽名: res/xml/widget_info.xml
正在簽名: AndroidManifest.xml
正在簽名: resources.arsc
正在簽名: classes.dexip

jarsinger

                                          圖2資源

====================================================開發

在運行這種方式中,我碰到過幾種不一樣的問題:
問題一:jarsigner: 沒法打開 jar 文件: ChangeBackgroundWidget.apk
個人解決方法是:將要進行簽名的APK放到對應的文件下,如我把要簽名的ChangeBackgroundWidget.apk放到JDK的bin文件裏。
問題二:jarsigner: 沒法對 jar 進行簽名: java.util.zip.ZipException: invalid entry comp
ressed size (expected 1598 but got 1622 bytes)
這個問題,我還沒解決,在網上搜了下,找到了一種方法,但我實踐沒徹底,因此不知道這個解決方法是否正確:
方法一:Android開發網提示這些問題主要是因爲資源文件形成的,對於android開發來講應該檢查res文件夾中的文件,逐個排查。這個問題能夠經過升級系統的JDK和JRE版原本解決。
方法二:這是由於默認給apk作了debug 簽名,因此沒法作新的簽名這時就必須點工程右鍵->Android Tools ->Export Unsigned Application Package.
或者從AndroidManifest.xml的 Exporting上也是同樣的
而後再基於這個導出的unsigned apk作簽名,導出的時候最好將其目錄選在你以前產生keystore的那個目錄下,這樣操做起來就方便了。
==========================================
MS我找到了第二個問題的解決方法了。。。
首先右擊要簽名APK對應的項目,選中「Android Tools」右擴展欄中的「Export Unsigned Application Package...」,,如圖3

export

                                                 圖3

在彈出的對話框中將這個未簽名的apk儲存在jdk的bin文件夾中,如圖4:

save

                                                 圖4

而後在運行上面的步驟便可。

相關文章
相關標籤/搜索