標籤:
Android項目以它的包名作為唯一標識,如果在同一裝置上安裝兩個相同的應用,後面安裝的應用就會覆蓋前面安裝的應用。為了避免這種情況的發生,我們需要對作為產品發布的應用進行簽名。
簽名其實有兩個作用:
(1) 確定發行者的身份。防止別人用相同包名來替換你已安裝的程式。
(2) 確保應用的完整性。簽名會對應用程式套件中的每個檔案進行處理,以確保程式包中的檔案不會被替換。
在應用的開發和調試階段,Eclipse的ADT外掛程式或ANT工具會自動產生調試認證,對Android應用簽名。但是,如果要正式發布一個Android應用的話,就必須使用合適的數位憑證來給應用程式簽名,不能使用ADT外掛程式或ANT工具產生的調試認證來發布。
這有又兩種方式對Android應用簽名:
1.在Eclipse中對Android應用簽名
(1) 右擊Android項目,Android Tools-->Export Signed Application Package...
(2) 如果系統還沒有數位憑證,可以選擇"Create new keystore",按格式填寫數位憑證的儲存路徑和密碼。
(3) 填寫數位憑證的詳細資料。
(4)指定產生簽名後的APK安裝包的儲存路徑。
簽署憑證製作完後,以後就可以直接使用該數位憑證簽名了。
(1)選擇前面建立的keystore,輸入建立keystore時的指定密碼。
(2)選擇前面建立時的別名yq的key,並輸入建立該key時指定的密碼,產生簽名後的apk包。
2.使用命令對APK包簽名
在某些場合下, 我們可能需要對一個“未簽名”的APK包進行簽名,則可通過“命令”來對Android應用進行手動簽名。
(1) 建立keystore庫。JDK的安裝目錄下的bin子目錄下提供了keytool.exe來產生數位憑證。
在命令視窗輸入:
keytool -genkeypair -alias yqkey.keystore -keyalg RSA -validity 100 -keystore yqkey.keystore
說明:
-genkeypair:指定產生數位憑證。
-alias:指定產生數位憑證的別名。
-keyalg:指定產生數位憑證的演算法。使用RSA演算法。
-validity:指定產生的數位憑證的有效期間。
-keystore:指定所產生的數位憑證的儲存路徑。
斷行符號後,接下來將會以互動的方式讓我們輸入數位憑證keystore的密碼、作者、公司等詳細資料。
該步驟只要做一次即可,一旦數位憑證建立成功後,只要在該認證的有效期間內,可以移植重複使用該認證。
(2) 產生未簽名的APK安裝包。在Eclipse中右擊Android項目,Android Tools-->Export Unsigned Application Package...
(3) 使用jarsigner命令對未簽名的APK安裝包進行簽名。JDK的安裝目錄下的bin子目錄下提供了jarsigner.exe工具進行簽名。在命令視窗輸入:
jarsigner -verbose -keystore crazyit.keystore -signedjar Demo_yqkey.apk Demo.apk yqkey.keystore
說明:
-verbose:指定產生詳細輸出。
-keystore:指定數位憑證的儲存路徑。
-signedjar:該選項的三個參數分別分簽名的APK包、未簽名的APK包、數位憑證別名。
斷行符號後,接下來將會以互動的方式讓我們輸入數位憑證keystore的密碼。
(4) 使用zipalign.exe工具最佳化APK安裝包。zipalign.exe是Android內建的一個檔案整理工具,它可用於最佳化APK安裝包,從而提升Android應用與系統之間的互動效率,提升應用程式的運行速度。在命令列視窗輸入:
zipalign -f -v 4 Demo_yqkey.apk
Demo_yqkey_zip.apk
說明:
-f:指定強制覆蓋已有檔案。
-v:指定產生詳細輸出。
4:指定檔案整理所基於的位元組數,通常指定為4,也就是基於32位進行整理。
Demo_yqkey.apk和Demo_yqkey_zip.apk,分別制定整理前的APK和整理後產生的APK。
產生的Demo_yqkey_zip.apk檔案,就是簽名完成且經過最佳化的APK安裝包,該安裝包可以對外發布了。
Android APK如何簽名