================================================================================
Android建立私鑰併爲APK文件簽名的相關命令
建立私鑰命令:
keytool -genkey -keystore <path>.keystore -keyalg RSA -validity <days> -alias <private key>
該命令位於jdk安裝目錄的bin目錄下,用於建立簽名用的私鑰。
其中:
-genkey 表示建立私鑰。
-keystore 後面跟私鑰倉庫的名稱,若是指定的倉庫不存在,則建立一個新的倉庫文件。
-keyalg 表示加密方式,通常跟RSA便可。
-validity 表示有效期限,單位爲天,能夠指定36500,即100年。
-alias 表示要添加的私鑰名稱,這個名稱會被添加並存儲到倉庫文件中。
命令執行後,須要再輸入一些信息,最後輸入Y確認。
其中涉及到兩個密碼,一個是私鑰倉庫的密碼,一個是具體私鑰的密碼,能夠相同。
當輸入完私鑰的密碼後,命令執行完成。
簽名命令:
jarsigner -verbose -keystore <path>.keystore -signedjar <signed>.apk <unsigned>.apk <private key>
該命令位於jdk安裝目錄的bin目錄下,用於使用私鑰對未簽名APK進行簽名。
其中:
-verbose 表示輸出相關信息。
-keystore 後面跟簽名時使用的私鑰所在的倉庫文件。
-signedjar 表示對文件進行簽名,後面跟三個參數:
第一個爲簽名後的文件名。
第二個爲未簽名的文件名,可使用Eclipse的插件Android Tools導出未簽名APK。
第三個是使用的私鑰名稱。
命令執行後,須要輸入相關密碼,而後輸出相關信息,直到命令結束。
另外須要注意的是,若是是JDK1.7的版本,須要在簽名命令後邊添加以下參數:
-digestalg SHA1 -sigalg MD5withRSA
不然,最後簽名的APK不能被安裝,會提示如下錯誤:
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
對齊優化命令:
zipalign -v 4 <unaligned>.apk <aligned>.apk
該命令位於sdk安裝目錄下的tools目錄下,用於對已簽名APK進行對齊優化。
其中:
-v 表示對齊的字節數,通常指定爲4便可。
後面緊跟的兩個參數分別爲未對齊優化的文件名和優化後的文件名。
對已簽名文件進行對齊優化後,能夠獲得更好的執行速度。
================================================================================
Eclipse下使用ADT插件進行圖形化的簽名相關的操做
生成簽名的APK:
該過程將包含生成私鑰倉庫、生成私鑰、打包APK、爲APK簽名、對APK對齊優化等一系列操做。
Android工程目錄下的bin目錄下,由Eclipse自動生成的APK文件是使用了默認的debug簽名的。
使用該方式簽名的apk能夠安裝到設備上,可是不一樣的環境,可能debug簽名不一樣,並不通用。
並且,debug簽名的APK沒法發佈到Market上。
能夠用以下方式導出一個APK並進行簽名:
工程->右鍵->Export->Android->Export Android Application...
或者
工程->右鍵->Android Tools->Export Signed Application Package...
在打開的窗口中,若是想要修改導出的工程,能夠點擊Browse進行修改。點擊Next繼續。
這裏有兩個選項:
Use existing keystore 使用既存的私鑰倉庫文件。
Create new keystore 建立一個新的私鑰倉庫文件。
通常的,若是已經建立了一個倉庫文件,選擇第一項便可,不然,須要選擇第二項,建立一個新的倉庫文件。
一、建立一個新的倉庫文件:
Location 私鑰倉庫文件的保存位置。
Password 私鑰倉庫的密碼。
Confirm 再次確認私鑰倉庫的密碼。
二、使用已有的倉庫文件:
Location 既存私鑰倉庫文件的位置。
Password 既存私鑰倉庫的密碼。
點擊Next繼續。
這裏又有兩個選項:
Use existing key 使用已經存在的私鑰對APK進行簽名。
Create new key 建立一個新的私鑰用於對APK進行簽名。
一、建立一個新的私鑰:
選中Create new key後,點擊Next繼續。
在打開的窗口中,輸入相關參數,其中:
Alias 私鑰名稱。
Password 私鑰的密碼。
Confirm 再次確認私鑰密碼。
Validity (years) 有效期,單位是年,與命令行執行時的單位不一樣。
下面的可選參數裏,必須有一項不爲空,其它可選參數能夠不填。
二、使用已有的私鑰:
Alias 下拉列表裏會列出私鑰倉庫文件裏存在的私鑰,選擇想要使用的私鑰。
Password 輸入選擇的私鑰對應的密碼。
點擊Next繼續。
在新窗口中,選擇簽名後的文件保存的位置,點擊Finish完成上述全部操做。
生成未簽名的APK:
使用命令的方式對APK進行簽名,該APK必須是未簽名的。
若是對已簽名文件進行再簽名,不會成功。以下方式能夠獲得一個未簽名的APK:
工程->右鍵->Android Tools->Export Unsigned Application Package...
另外,新的ADT會在工程目錄下生成proguard.cfg文件,使用它能夠在簽名時混淆代碼。
混淆代碼能夠加大反編譯代碼後的理解難度,起到保護代碼的做用。
使用方法是,修改工程目錄下的project.properties文件,在最後添加:
proguard.config=proguard.cfg
優化