安卓應用程式的簽名
簽名安卓應用程式
Android應用以它的包名作為唯一標識。如果在同一部手機上安裝兩個包名相同的應用,後面安裝的應用就會覆蓋前面安裝的應用。為了避免這種情況的發生,Android要求對作為產品發布的應用進行簽名。
簽名主要有如下兩個作用:
1.確定發行者的身份。由於應用開發人員可以通過使用相同包名來替換已經安裝的程式,因此使用簽名可以避免發生這種情況,也就是避免別人通過發布相同包名的程式來替換掉你發布的程式。
2.確保應用的完整性。簽名會對應用程式套件中的每個檔案進行處理,從而確保程式包中的檔案不會被替換。
通過上面的介紹不難看出,Android應用簽名的作用類似於現實生活中的簽名。當開發人員對Android應用簽名時,相當於告訴外界:該應用程式是由“我”開發的,“我”會對該應用程式負責----因為有簽名(簽名有密鑰),別人無法冒名頂替“我”;與此同時,“我”也無法冒名頂替別人。
注意:在應用的開發、調試階段,Eclipse的ADT外掛程式或Ant工具會自動產生調試認證對Android應用簽名,因此部署、調試過程並沒有經過簽名。需要指出的是,如果要正式發布一個Android應用,必須使用合適的數位憑證來給應用程式簽名,不能使用ADT外掛程式或Ant工具產生的調試認證來發布。
在Eclipse中對安卓應用簽名
開發的過程中我們大多數時候都會直接在Eclipse中對Android應用簽名,在Eclipse中對Android應用簽名的步驟如下:
1.右鍵點擊Android項目,在下拉式功能表中選擇“AndroidTools”---->“ExportSignedApplicationPackage...”,操作如下:
點擊之後會彈出一個提示框,顯示如下:
選擇要匯出的工程,因為是在要匯出的工程上點的滑鼠右鍵,所以預設就是要匯出的工程,所以這一步不需要什麼操作,直接點“Next>”,顯示如下:
2.選中“Createnewkeystore”選項按鈕,按照格式填寫數位憑證的儲存路徑和密碼。操作顯示如下:
3.按照上述格式填寫完成後點擊“Next>”,Eclipse會彈出如下提示框:
按照所示填寫數位憑證的詳細資料。
4.填寫完畢之後點擊“Next>”,顯示如下:
該視窗用於指定產生簽名後的APK安裝包的儲存路徑。
5.點擊“Finish”,完成簽名。Eclipse會在指定路徑下產生一個簽名後的APK安裝包。
上面的步驟製作了新的數位憑證,一旦數位憑證製作完成,以後就可以直接使用該數位憑證簽名了。利用已有的數位憑證進行簽名,請按照如下步驟進行:
1.在需要簽名的工程上點擊滑鼠右鍵,預設工程不需要修改,直接點下一步,直到出現如下:
點擊“Browse...”,選擇剛剛產生的數位簽章,操作顯示如下:
選中之後,輸入該數位簽章對應的密碼。
2.上述內容輸入之後,點擊“Next>”,顯示如下:
選擇製作該數位簽章時建立的別名為“keyzz”(我建立的是這個別名,大家根據自己建立的別名進行選擇)的key,並輸入建立該key時指定的密碼。
3.上述操作完成之後,點擊“Next>”,顯示如下:
選擇簽名後APK包的儲存路徑,上面黃色歎號提示的英文“Destinationfilealreadyexists”意思是目標檔案已經存在,這個不用管,直接覆蓋之前的檔案即可,如果不想覆蓋,就點“Browse...”,重新選擇一個儲存路徑。
4.選擇完之後,點“Finish”按鈕即可產生簽名後的APK包。
使用命令對安卓應用簽名
如果不想藉助於Eclipse提供的方式對Android應用程式簽名,或在某些場合下,需要對一個“未簽名”的APK包進行簽名,則可通過“命令”來對Android應用進行手動簽名。
使用命令對Android應用簽名的步驟如下:
1.建立keystore庫。JDK的安裝目錄下的bin子目錄下提供了keytool.exe工具來產生數位憑證。點擊“開始”--->“運行”,然後輸入“cmd”,在彈出的命令列介面用cd命令切換到你安裝的jdk的目錄裡(如果你已經添加到環境變數裡面了,那也可以不用切換到jdk的目錄下),我的是“C:\ProgramFiles\Java\jdk1.6.0_22\bin”,在命令列視窗輸入如下命令:
keytool-genkeypair-aliaszzfeng.keystore-keyalgRSA-validity1000-keystorezzfeng.keystore
上面命令中各選項說明如下:
-genkeypair:指定產生數位憑證。
-alias:指定產生數位憑證的別名。
-keyalg:指定產生數位憑證的演算法。使用RSA演算法。
-validity:指定產生的數位憑證的有效期間(單位是天)。
-keystore:指定所產生的數位憑證的儲存路徑
輸入上述命令後按斷行符號鍵,接下來將會以互動式方式讓使用者輸入數位憑證keystore的密碼、作者、公司等詳細資料,操作如所示:
注意:該步驟的作用是產生屬於你們公司、你的數位憑證,這個步驟只要做一次即可。一旦數位憑證建立成功之後,只要在該認證有效期間內,可以一直重複使用該認證。
2.產生未簽名的APK安裝包。在Eclipse中滑鼠右鍵點擊Android項目,在下拉式功能表中選擇“AndroidTools”---->“ExportUnsignedApplicationPackage...”,Eclipse會彈出一個儲存檔案的對話方塊,當我們選擇好隱藏檔的位置和檔案名稱後單擊“儲存”(有的版本是“Finish”)按鈕即可產生一個未簽名的APK安裝包。操作顯示如下:
3.使用“jarsigner”命令對未簽名的APK安裝包進行簽名。在步驟1中到的目錄下有“jarsigner.exe”工具,可以用來進行簽名。命令列視窗輸入如下命令:
jarsigner-verbose-keystorezzfeng.keystore-signedjarBleDevManager-signed.apkBleDevManager.apkzzfeng.keystore
上面的命令中各選項的說明如下:
-verbose:指定產生詳細的輸出。
-keystore:指定數位憑證的儲存路徑(上述命令直接用的數位憑證名是因為數位憑證就在目前的目錄下,如果是其他目錄,需要在數位憑證名前加相應的路徑)。
-signedjar:該選項的三個參數分別為簽名後的APK包、未簽名的APK包和數位憑證的別名。
注意上述的命令中路徑和檔案名稱等一定要跟自己的對應,因為你設定的路徑和檔案名稱有可能跟我的不一樣,大家根據自己設定的對應修改一下即可。
輸入上述命令之後按斷行符號鍵,接下來將會以互動式方式讓使用者輸入數位憑證keystore的密碼,操作顯示如下:
簽名完成。
4.使用“zipalign.exe”工具最佳化APK安裝包。“zipalign.exe”是Android內建的一個檔案整理工具,它可用於最佳化APK安裝包,從而提升Android應用與系統之間的互動效率,提升應用程式的運行速度。該工具存在於SDKtools下,我的路徑是“E:\adt-bundle-windows-x86-20130917\sdk\build-tools\19.1.0”,如果找不到,可以在sdk目錄下搜尋一下。如果存在的路徑沒有設定到環境變數裡面去,那我們就在命令列中用cd命令切換到上述路徑中,並將剛簽過名的需要最佳化的APK安裝包也複製到該路徑下,然後在命令列視窗輸入如下命令:
zipalign-f-v4BleDevManager-signed.apkBleDevManager-signed-zip.apk
上面的命令中各選項說明如下:
-f:指定強制覆蓋已有的檔案。
-v:指定產生詳細輸出。
4:指定檔案整理所基於的位元組數,通常指定為4,也就是基於32位進行整理。
BleDevManager-signed.apk和BleDevManager-signed-zip.apk分別指定整理前的APK和整理後產生的APK。
運行上述命令,將會在目前的目錄下產生一個“BleDevManager-signed-zip.apk”檔案,這就是簽名完成且經過最佳化的APK安裝包,該安裝包可以對外發布了。操作顯示如下: