1. 程式人生 > >Android應用簽名方法

Android應用簽名方法

1.為什麼要給Android應用程式簽名?       如果只能用一句簡單的話語來回答這個問題的話,我會說:“這是Android系統所要求的”。       Android系統要求每一個Android應用程式必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數字簽名,是沒有辦法安裝到系統中的!Android通過數字簽名來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定終端使用者可以安裝哪些應用程式。這個數字簽名由應用程式的作者完成,並不需要權威的數字證書籤名機構認證,它只是用來讓應用程式包自我認證的。 2.為什麼我開發的Android應用程式沒有做什麼簽名也能在模擬器和手機上執行?
      你沒有給Android應用程式簽名並不代表Android應用程式沒有被簽名。為了方便我們開發除錯程式,ADT會自動的使用debug金鑰為應用程式簽名。debug金鑰?它在哪?debug金鑰是一個名為debug.keystore的檔案,它的位置:             系統碟符:/Documents and Settings/jiangdongguo/.android/debug.keystore jiangdongguo”對應於你自己的windows作業系統使用者名稱,怎麼樣,是不是已經找到它了。這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬於自己的金鑰檔案(*.keystore)。

3.Android應用程式簽名步驟

      apk的簽名工作可以通過兩種方式來完成:             1)通過ADT提供的圖形化介面完成apk簽名;             2)完全通過DOS命令來完成apk簽名

方法一:通過ADT提供的圖形化介面完成apk

1)選擇相應工程右鍵屬性->Android Tools->Export Signed Appliction Package

2)為應用建立證書



最後,我們便可以在E:\Android\SPQ\bin\SPQ_signed.apk簽名應用。 方法二:下面將講解如何通過命令的方式完成apk簽名       給apk簽名一共要用到3個工具,或者說3個命令,分別是:keytool、jarsigner
zipalign,下面是對這3個工具的簡單介紹:
            1)keytool:生成數字證書,即金鑰,也就是上面說到的副檔名為.keystore的那類檔案;             2)jarsigner:使用數字證書給apk檔案簽名;             3)zipalign:對簽名後的apk進行優化,提高與Android系統互動的效率(Android SDK1.6版本開始包含此工具)       從這3個工具的作用也可以看出,這3個工具的使用順序。通常我們自己所開發的所有應用程式,都是使用同樣的簽名,即使用同一個數字證書,這就意味著:如果你是第一次做Android應用程式簽名,上面的3個工具都將用到;但如果你已經有數字證書了,以後再給其它apk簽名時,只需要用到jarsigner和zipalign就可以完成。       為了方便使用上面3個命令,首先需要將上面3個工具所在路徑新增到環境變數path中(我說的是為了方便使用,沒有說必須要這麼做)。怎麼配置環境變數就不在此講解了,這裡需要說一下這3個工具預設所在的路徑:             1)keytool:該工具位於jdk安裝路徑的bin目錄下;             2)jarsigner:該工具位於jdk安裝路徑的bin目錄下;       不知道大家是否注意到keytool和jarsigner兩個工具是jdk自帶的,也就意味著生成數字證書和檔案簽名不是Android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar檔案簽名的。 1)生成未經簽名的apk檔案       既然我們要自己對apk進行簽名,就不再需要ADT預設幫我們簽名了。如何得到一個未經簽名的apk檔案呢?開啟Eclipse,在Android工程名稱上點選右鍵,依次選擇“Android Tools” - “Export Unsigned Application Package ...”,然後選擇一個儲存位置儲存即可。這樣就得到了一個未經簽名的apk檔案。 2)使用keytool工具生成數字證書pcisuntek       keytool -genkey -v-keystore pcisuntek.keystore-alias pcisuntek.keystore-keyalg RSA -validity 20000 說明:       1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細資訊打印出來,顯示在dos視窗中;       2)-keystorepcisuntek.keystore 表示生成的數字證書的檔名為“pcisuntek.keystore”;       3)-aliaspcisuntek.keystore 表示證書的別名為“pcisuntek.keystore”,當然可以不和上面的檔名一樣;       4)-keyalg RSA 表示生成金鑰檔案所採用的演算法為RSA;       5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效 在執行上面的命令生成數字證書檔案時,會提示你輸入一些資訊,包括證書的密碼,示例如下:        注:執行命令成功,系統會在當前目錄(C:\Users\jiangdongguo)生成一個"pcisuntek.keystore"的證書。 3)使用jarsigner工具為Android應用程式簽名       jarsigner -verbose -keystorepcisuntek.keystore -signedjar SPQ_signed.apk SPQ.apk pcisuntek.keystore 說明:       1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資訊打印出來,顯示在dos視窗中;       2)-keystorepcisuntek.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下;       3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk檔案簽名,簽名後的檔名稱為SPQ_signed.apk;       4)最後面的pcisuntek.keystore 表示證書的別名,對應於生成數字證書時-alias引數後面的名稱 說明:如果你以前的程式是採用預設簽名的方式(即debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程式解除安裝掉,才能安裝上。因為程式覆蓋安裝主要檢查兩點:       1)兩個程式的入口Activity是否相同。兩個程式如果包名不一樣,即使其它所有程式碼完全一樣,也不會被視為同一個程式的不同版本;       2)兩個程式所採用的簽名是否相同。如果兩個程式所採用的簽名不同,即使包名相同,也不會被視為同一個程式的不同版本,不能覆蓋安裝。       另外,可能有人可能會認為反正debug簽名的應用程式也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程式有這樣兩個限制,或者說風險:       1)debug簽名的應用程式不能在Android Market上架銷售,它會強制你使用自己的簽名;       2)debug.keystore在不同的機器上所生成的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,解除安裝再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備升級功能!