一、產生密鑰庫
將位置定位在jdk的bin檔案中,輸入以下命名行:
keytool -genkey -alias ChangeBackgroundWid get.keystore -keyalg RSA -validity 20000 -eystore ChangeBackgroundWidget.keystore
上面的命令中間不換行,按下“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 密碼相同,按斷行符號):
圖1
二、可以產生簽名的apk檔案
這裡輸入檔案ChangeBackgroundWidget.apk,最終產生ChangeBackgroundWidget_signed.apk為Android簽名後的APK執行檔案
輸入以下命令列:
jarsigner -verbose -keystore ChangeBackgroundWidget.keystore -signedjar ChangeBackgroundWidget_signed.apk ChangeBackgroundWidget.apk ChangeBackgroundWidget.keystore
上面的命令中間不換行,按“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.dex
圖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
圖3
在彈出的對話方塊中將這個未簽名的apk儲存在jdk的bin檔案夾中,4:
圖4
然後在運行上面的步驟即可。
轉自: http://blog.sina.com.cn/s/blog_62c194760100gaq0.html