說明:如果你以前的程式是採用預設簽名的方式(即debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程式卸載掉,才能安裝上。因為程式覆蓋安裝主要檢查兩點:
1)兩個程式的入口Activity是否相同。兩個程式如果包名不一樣,即使其它所有代碼完全一樣,也不會被視為同一個程式的不同版本;
2)兩個程式所採用的簽名是否相同。如果兩個程式所採用的簽名不同,即使包名相同,也不會被視為同一個程式的不同版本,不能覆蓋安裝。
另外,可能有人可能會認為反正debug簽名的應用程式也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程式有這樣兩個限制,或者說風險:
1)debug簽名的應用程式不能在Android Market上架銷售,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所產生的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備升級功能!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
需要注意的幾點:
一:同一個開發人員的多個程式儘可能使用同一個數位憑證 ,這可以帶來以下好處。
(1)有利於程式升級,當新版程式和舊版程式的數位憑證相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數位憑證不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。
(2)有利於程式的模組化設計和開發。Android系統允許擁有同一個數位簽章的程式運行在一個進程中,Android程式會將他們視為同一個程式。所以開發人員可以將自己的程式分模組開發,而使用者只需要在需要的時候下載適當的模組。
(3) 可以通過許可權(permission)的方式在多個程式間共用資料和代碼。Android提供了基於數位憑證的許可權賦予機制,應用程式可以和其他的程式共 享概功能或者資料給那那些與自己擁有相同數位憑證的程式。如果某個許可權(permission)的protectionLevel是signature, 則這個許可權就只能授予那些跟該許可權所在的包擁有同一個數位憑證的程式。
在簽名時,需要考慮數字認證的有效期間 :
(1)數位憑證的有效期間要包含程式的預計生命週期,一旦數位憑證失效,持有改數位憑證的程式將不能正常升級。
(2)如果多個程式使用同一個數位憑證,則該數位憑證的有效期間要包含所有程式的預計生命週期。
(3)Android Market強制要求所有應用程式數位憑證的有效期間要持續到2033年10月22日以後。
二:Android數位憑證包含以下幾個要點:
(1)所有的應用程式都必須有數位憑證 ,Android系統不會安裝一個沒有數位憑證的應用程式
(2)Android程式包使用的數位憑證可以是自簽名的,不需要一個權威的數位憑證機構簽名認證
(3)如果要正式發布 一個Android ,必須使用一個合適的私密金鑰產生的數位憑證來給程式簽名 ,而不能使用adt外掛程式 或者ant工具 產生的調試認證來發布。
(4)數位憑證都是有有效期間 的,Android只是在應用程式安裝的時候才會檢查認證的有效期間。如果程式已經安裝在系統中,即使認證到期也不會影響程式的正常功能。
(5)Android使用標準的java工具 Keytool and Jarsigner 來產生數位憑證,並給應用程式套件組合簽名。
(6)使用zipalign 最佳化 程式。
Android 系統不會安裝運行任何一款未經數位簽章的apk程式,無論是在模擬器上還是在實際的物理裝置上。Android的開發工具(ADT外掛程式和Ant)都可以協 助開發人員給apk程式簽名,它們都有兩種模式:偵錯模式(debug mode)和發布模式(release mode)。
在偵錯模式下,android的開發工具會在每次編譯時間使用調試用的數位憑證給程式簽名,開發人員無須關心。
當要發布程式時,開發人員就需要使用自己的數位憑證給apk包簽名,可以有兩種方法。
(1)在命令列下使用JDK中的和Keytool(用於產生數位憑證)和Jarsigner(用於使用數位憑證簽名)來給apk包簽名。
(2)使用ADT Export Wizard進行簽名(如果沒有數位憑證可能需要產生數位憑證)。