【Android自動化打包】03. APK的數字簽名

yangxi_001發表於2014-03-13
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 and Jarsigner 來生成數字證照,並給應用程式包簽名。

              6)使用zipalign優化程式。


數字簽名的兩種模式

我們都知道Android系統不會安裝執行任何一款未經數字簽名的apk程式,無論是在模擬器上還是在實際的物理裝置上。所以我們會有一個疑問,為何在日常開發過程中我沒有進行任何簽名的操作,程式都會在模擬器和真機上執行?下面我們來講講

APK程式的兩種模式: 除錯模式(debug mode)和釋出模式(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進行簽名
轉自:http://blog.csdn.net/wirelessqa

相關文章