天天看點

jarsigner指令行簽名打包

    jarsigner簽名,之前都是通過AS進行簽名,通過這種方式也是可以簽名的,需要提前把需要的東西準備好,現在把步驟記錄在下面。(下面的操作都是在jdk的路徑下進行操作)

        1.首先準備Jdk的路徑(在android studio中檢視方法):

jarsigner指令行簽名打包

或者 :首先檢視系統是否安裝有jdk,打開cmd在DOS視窗輸入  java -version檢視jdk版本資訊

然後把未簽名的檔案和 簽名檔案 , 放到一個 路徑下,下面才是路徑:

jarsigner指令行簽名打包
jarsigner指令行簽名打包

然後打開,keytool, 打開一個指令視窗, 在keytool的 視窗下,打開  -jer  指令

   2. 然後打開cmd,進入到上面的jdk路徑下。

       準備工作,把需要簽名的檔案 abc-unsigned.apk  和簽名檔案  abc.keystore (别名是abb) 放到jdk的路徑下。

       然後開始在cmd中輸入指令行:

jarsigner -verbose -keystore abc.keystore -signedjar abc_signed.apk abc_unsign.apk abb

      上面這一句指令行中需要改變的參數值是:    

          abc.keystore apk需要的簽名檔案

          abc_signed.apk 簽好名之後apk的名字

          abc_unsign.apk 未簽名的apk名字

          abb 簽名的别名

    3.Enter,之後輸入簽名檔案的密碼

jarsigner指令行簽名打包

補充一張效果:

jarsigner指令行簽名打包

         完成如圖

如果是 jdk 1.8 指令行還需要補充一下:

最近将電腦中的JDK更新到了最新的JDK8,沒想到在給apk打包簽名的時候,發現使用JDK8中的jarsigner指令簽名的apk無法安裝。最終在android sdk官網http://developer.android.com/查尋到原因  

介紹中有一條注意事項,說JDK7修改了預設的簽名算法,是以給apk簽名時要自己通過jarsigner指令的-sigalg 和 -digestalg選項分别指定簽名算法名字和摘要算法名字,官方文檔中給定算法分别是SHA1withRSA和SHA1

JDK1.8 指令:(需要指定tsa,如下面指令)

jarsigner -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1 -verbose  -keystore android.keystore -signedjar signed.apk unsign.apk alias_name

時間 :    -tsa http://timestamp.digicert.com

簽名算法名字:  -sigalg

摘要算法名字: -digestalg

簽名結果:

jarsigner指令行簽名打包

        apk 之是以需要簽名, 是出于安全考慮的認證方式, apk 沒有簽名或者前後簽名不一緻都無法安裝。 任何對apk的篡改都需要重新對apk簽名才能安裝, 由于篡改者是無法擷取原始apk的秘鑰資訊,是以篡改後的apk由于簽名不一緻是無法替換原始apk的,這樣既保證了apk的安全性,同時也保證了手機的安全和穩定性 。

包簽名之後,再驗證一下,是否簽名成功。 

指令行:   jarsigner -verify [選項] jar 檔案,現有下面三種情況:

        a. 未簽名:

jarsigner指令行簽名打包

        b.簽名成功:

jarsigner指令行簽名打包

        c .簽名有問題的:

jarsigner指令行簽名打包

           這種出現弱算法問題的,我這裡是因為 -sigalg 屬性填寫的MD5withRSA ,與自身的這個屬性沒有比對,

  是以解決方法, 通過下面指令行,檢視自己簽名檔案的資訊,把那個簽名算法名稱填寫到 -sigalg後面,然後再次簽名

(相關連結:https://jingyan.baidu.com/article/49711c61489e72fa441b7cf0.html?st=2&net_type=1&bd_page_type=1&os=0&rst=)

Keytool -list -v - alias  别名  -keystore  簽名檔案.keystore  -storepass 簽名密碼

通過檢視簽名key的資訊,填寫上面的内容(http://p.primeton.com/articles/53b3bbb0e138235d650000a4):

jarsigner指令行簽名打包

如下效果:

jarsigner指令行簽名打包

至此jdk 1.8 簽名完成,希望可以幫助大家。

在預設的jdk 安裝目錄下  如: C:\Program Files\Java\jdk1.7.0_09\bin 下的keytool.exe 工具 用cmd 打開 

打包時,jdk1.8時的路梳理:

jarsigner -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1 -verbose  -keystore dianzhuan.keystore -signedjar signmssp-verify.apk mssp-verify.apk dianzhuanshichang

jdk的路徑 : 可以在控制台中看這個東西, 筆記本中在  E:\JAVAJDK\Java\bin  這個路徑下 

繼續閱讀