Android要求全部已安裝的應用程序都使用數字證書作數字簽名, 數字證書的私鑰由應用開發者持有. Android使用證書做爲標識應用程序做者的一種方式, 並在應用程序之間創建信任關係. 證書並不用來控制用戶可否安裝哪一個應用. 證書不須要由證書認證中心簽名: 徹底可使用自簽名證書(self-signed certificates). android
理解Android應用簽名的要點有: 安全
沒有正確簽名的應用, Android系統不會安裝或運行. 此規則適用於在任何地方運行的Android系統, 不論是在模擬器仍是真實設備上. 由於這個緣由, 在真機或模擬器上運行或者調試應用前, 必須爲其設置好籤名. 服務器
在調試期間, Androi SDK工具協助你爲應用作好籤名工做. Eclipse的ADT插件和Ant build工具都提供2種簽名模式 – debug 模式和 release 模式. app
一旦應用完成簽名, 不要忘了爲APK運行zipalign來完成額外的優化. 模塊化
應用程序簽名的一些方面可能會影響應用程序的開發過程, 尤爲是當你計劃發佈多個應用時. 一般狀況下, 對於全部開發者而言, 推薦的策略是:在應用程序的整個生命週期,全部的應用程序使用相同的證書籤名. 工具
爲何這麼作的緣由: 優化
另外一個影響簽名策略的重要考量是, 如何設置簽名應用的key的有效期. ui
當設計的時候, 須牢記這些要點, 以確保使用合適的證書來簽名應用程序. spa
在開始以前, 應當確保Keytool對 SDK build tools 可用. 在大多數狀況下, 咱們能夠經過設置JAVA_HOME環境變量來引用一個合適的JDK, 告訴SDK build tools如何找到Keytool. 或者, 能夠添加 Keytool的JDK版本到 PATH 環境變量. 插件
若是在某個自帶GNU Java編譯器版本的Linux下開發, 請確認系統使用的是JDK版本的Keytool, 而不是 gcj 版本. 若是 Keytool 已經存在於 PATH, 它可能會指向一個 /usr/bin/keytool 的符號連接. 在這種狀況下, 檢查符號連接目標, 確保它指向JDK中的Keytool.
若是將公開發布應用程序, 還須要 Jarsigner 工具. Jarsigner 和 Keytool 都包含在 JDK 中.
Android build tools 提供了debug簽名模式, 幫助簡化應用的開發和調試, 而仍然符合Android系統簽名.apk的需求. 當使用debug模式來構建app時, SDK 工具調用 Keytool來自動建立一個用於debug的 keystore 和 key. 而後這個debug key被用來自動簽名 .apk, 因此沒必要用本身的key來簽名包.
SDK 工具使用預約義的 名稱/密碼 來建立keystore/key :
若有必要, 能夠更改 debug keystore/key 的 location/name 或本身提供一個自定義的 debug keystore/key. 然而, 任何自定義的debug keystore/key必須使用和默認debug key(如以前所述)相同的debug keystore/key 名稱和密碼. (Eclipse/ADT中, Windows > Preferences > Android > Build)
注意: 當用debug證書籤名時, 應用程序不能對外發布.
若是使用 Eclipse/ADT (而且根據以前"簽名基礎設置"一節所述設置好了Keytool), debug模式下的簽名是默認開啓的. 運行或者調試程序時, ADT自動使用debug證書對.apk進行簽名, 並對安裝包使用zipalign, 而後將它安裝到選定的模擬器或者鏈接的設備上. 這一切不用咱們親自動手, ADT能夠自行訪問Keytool.
若是使用Ant來構建.apk文件, debug簽名模式經過ant命令(假設使用由android tool生成的build.xml文件)下使用debug選項開啓. 當運行ant debug來編譯app時, build腳本生成一個 keystore/key 併爲.apk作簽名. 而後腳本也會使用zipalign工具優化.apk. 仍然不須要你作額外的事情.