標籤:
1. 什麼是數位簽章?
數位簽章就是為你的程式打上一種標記,來作為你自己的標識,當別人看到簽名的時候會知道它是與你相關的
2. 為什麼要數位簽章?
最簡單直接的回答: 系統要求的。
Android系統要求每一個Android應用程式必須要經過數位簽章才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數位簽章,是沒有辦法安裝到系統中的!Android通過數位簽章來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定終端使用者可以安裝哪些應用程式。這個數位簽章由應用程式的作者完成,並不需要權威的數位憑證簽名機構認證,它只是用來讓應用程式套件組合自我認證的。
3.數位憑證的機制?Android使用Java的數位憑證相關的機制來給apk加蓋數位憑證,要理解android的數位憑證,需要先瞭解以下數位憑證的概念和java的數位憑證機制。
4.程式使用相同的數位憑證的好處
(1)有利於程式升級當新版程式和舊版程式的數位憑證相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數位憑證不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。
(2)有利於程式的模組化設計和開發。Android系統允許擁有同一個數位簽章的程式運行在一個進程中,Android程式會將他們視為同一個程式。所以開發人員可以將自己的程式分模組開發,而使用者只需要在需要的時候下載適當的模組。
(3)可以通過許可權(permission)的方式在多個程式間共用資料和代碼。Android提供了基於數位憑證的許可權賦予機制,應用程式可以和其他的程式共用概功能或者資料給那那些與自己擁有相同數位憑證的程式。如果某個許可權(permission)的protectionLevel是signature,則這個許可權就只能授予那些跟該許可權所在的包擁有同一個數位憑證的程式。
5. 在簽名時,需要考慮數位憑證的有效期間:
(1)數位憑證的有效期間要包含程式的預計生命週期,一旦數位憑證失效,持有改數位憑證的程式將不能正常升級。
(2)如果多個程式使用同一個數位憑證,則該數位憑證的有效期間要包含所有程式的預計生命週期。
(3)Android Market強制要求所有應用程式數位憑證的有效期間要持續到2033年10月22日以後。
6. 數位憑證的要點:
Android數位憑證包含以下幾個要點:
(1)所有的應用程式都必須有數位憑證,Android系統不會安裝一個沒有數位憑證的應用程式
(2)Android程式包使用的數位憑證可以是自簽名的,不需要一個權威的數位憑證機構簽名認證
(3)如果要正式發布一個Android,必須使用一個合適的私密金鑰產生的數位憑證來給程式簽名,而不能使用adt外掛程式或者ant工具產生的調試認證來發布。
(4)數位憑證都是有有效期間的,Android只是在應用程式安裝的時候才會檢查認證的有效期間。如果程式已經安裝在系統中,即使認證到期也不會影響程式的正常功能。
(5)Android使用標準的java工具 Keytool
andJarsigner 來產生數位憑證,並給應用程式套件組合簽名。
6)使用
zipalign最佳化程式。
數位簽章的兩種模式
我們都知道Android系統不會安裝運行任何一款未經數位簽章的apk程式,無論是在模擬器上還是在實際的物理裝置上。所以我們會有一個疑問,為何在日常開發過程中我沒有進行任何簽名的操作,程式都會在模擬器和真機上運行?下面我們來講講
APK程式的兩種模式: 偵錯模式(debugmode)和發布模式(release mode)
1. 偵錯模式(debug mode) : 在偵錯模式下,ADT會自動的使用debug密鑰為應用程式簽名,因此我們可以直接運行程式。
debug密鑰: 一個名為debug.keystore的檔案
存放位置: C:\Users\Xiaopeng\.android\debug.keystore
Xiaopeng對應替換為自己作業系統的使用者名稱
兩個風險: debug簽名的應用程式有這樣兩個風險:
1)debug簽名的應用程式不能在Android Market上架銷售,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所產生的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。 不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備升級功能!
所以一定要有自己的數位憑證來簽名;
2. 發布模式(release mode):
當要發布程式時,開發人員就需要使用自己的數位憑證給apk包簽名
使用自己的數位憑證給APK簽名的兩種方法:
(1)通過DOS命令來對APK簽名。
(2)使用ADT Export Wizard進行簽名
【轉】Android APK的數位簽章的作用和意義