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

 一、生成密鑰庫
將位置定位在jdk的bin文件中,輸入以下命名行:keytool -genkey -alias ChangeBackgroundWid
get.keystore -keyalg RSA -validity 20000 -keystore 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 密碼相同,按回車):
Android之APK文件簽名鈥斺攌eytool和jarsigner
                               圖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
Android之APK文件簽名鈥斺攌eytool和jarsigner
                              圖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的那個目錄下,這樣操作起來就方便了。
PS:各位高手找到可行的解決方法,希望能告訴我下呵。
==========================================
MS我找到了第二個問題的解決方法了。。。
首先右擊要簽名APK對應的項目,選中“Android Tools”右擴展欄中的“Export Unsigned Application Package...”,,如圖3
Android之APK文件簽名鈥斺攌eytool和jarsigner
                             圖3
在彈出的對話框中將這個未簽名的apk儲存在jdk的bin文件夾中,如圖4:
Android之APK文件簽名鈥斺攌eytool和jarsigner
                             圖4
然後在運行上面的步驟即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章