Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android應用程序簽名概述

Android應用程序簽名概述

編輯:Android開發教程

在Android 系統中,所有安裝到系統的應用程序都必有一個數字證書,此數字證書用於標識應用程序的作者和在應用程序之間建立信任關系。

1. 為什麼要簽名

如果只能用一句簡單的話語來回答這個問題的話,我會說:“這是Android系統所要求的”。

應用程序簽名是一個這樣的過程,即使用私有密鑰數字地簽署一個給定的應用程序,以便達到如下3個目的:

◆識別代碼的作者

◆檢測應用程序是否發生了改變

◆在應用程序之間建立信任

基於這一信任關系,應用程序可以安全地共享代碼和數據。如果一個 permission的保護級別為signature,那麼就只有那些跟該permission所在的程序擁有同一個數字證書的應用程序才能取得該權限。Android使用Java的數字證書相關的機制 來給APK加蓋數字證書,要理解android的數字證書,需要先了解以下數字證書的概念和java的數字證書機制。Android系統要求每一個安裝到系統的應用程序都是經過數字證書簽名的,數字證書的私鑰則保存在程序開發者的手中。也就是說如果一個Android應用程序沒有經過數字簽名,是沒有辦法安裝到系統中的!Android通過數字簽名來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。這個數字簽名由應用程序的作者完成,並不需要權威的數字證書簽名機構認證,它只是用來讓應用程序包自我認證的。

尤其值得注意的是:與信息安全領域其他使用數字證書的用途不同,Android將數字證書用來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。這個數字證書並不需要權威的數字證書簽名機構認證,它只是用來讓應用程序包自我認證的。也就是說,這個證書完全是由開發者來進行控制和使用的。

開發者可以生成不同的證書,我們建議同一個開發者的多個程序盡可能使用同一個數字證書,這可以帶來以下好處:

◆ 有利於程序升級,當新版程序和舊版程序的數字證書相同時,Android系統才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同,則Android系統認為他們是不同的程序,並產生沖突,會要求新程序更改包名。

◆ 有利於程序的模塊化設計和開發。Android系統允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序。所以開發者可以將自己的程序分模塊開發,而用戶只需要在需要的時候下載適當的模塊。

◆ 可以通過權限(permission)的方式在多個程序間共享數據和代碼。Android提供了基於數字證書的權限賦予機制,應用程序可以和其他的程序共享該功能或者數據給那那些與自己擁有相同數字證書的程序。如果某個權限(permission)的保護級別是signature,則這個權限就只能授予那些跟該權限所在的包擁有同一個數字證書的程序。

2. 簽名的相關問題

在簽名時,需要考慮數字證書的有效期:

◆數字證書的有效期要包含程序的預計生命周期,一旦數字證書失效,持有該數字證書的程序將不能正常升級。

◆如果多個程序使用同一個數字證書,則該數字證書的有效期要包含所有程序的預計生命周期。

◆Android Market強制要求所有應用程序數字證書的有效期要持續到2033年10月22日以後。

另外,Android數字證書包含以下幾個要點:

◆所有的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序。

◆Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證。

◆如果要正式發布一個Android,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件 或者ant工具 生成的調試證書來發布。

◆ 數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。

◆Android使用標准的java工具 Keytool and Jarsigner 來生成數字證書,並給應用程序包簽名

3. 兩種模式

構建 Android 應用程序時可以采用調試模式和發布模式:

(1)使用 Android 構建工具(命令行和 Eclipse ADT)構建的應用程序是用一個調試私有密鑰自動簽名的;這些應用程序被稱為調試模式應用程序。調試模式應用程序用於測試,不能夠發布。注意,未簽名的或者使用調試私有密鑰簽名的應用程序不能夠通過 Android Market 發布。在調試模式下,Android的開發工具會在每次編譯時使用調試用的數字證書給程序簽名,開發者無須關心。

(2)准備發布自己的應用程序時,必須構建一個發布模式的版本,這意味著用私有密鑰簽署應用程序。當要發布程序時,開發者就需要使用自己的數字證書給APK包簽名,可以有兩種方法。

◆在命令行下使用JDK中的和Keytool(用於生成數字證書)和Jarsigner(用於使用數字證書簽名)來給APK包簽名。

◆使用ADT Export Wizard進行簽名(如果沒有數字證書可能需要生成數字證書)。

本文出自 “卓越始於足下” 博客,請務必保留此出處http://patterson.blog.51cto.com/1060257/708491

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved