Android 程序簽名打包
在上一章,我們創(chuàng)建了自己的 Android 工程,并成功的在模擬器中運行起來。同時提到,工程目錄中有一個 bin 目錄,運行之后我們可以在此目錄下找到我們的 apk。那么不難想到,我們在點“Run”之后,系統(tǒng)會編譯我們的代碼,并結合配置文件打出一個 apk。
眾所周知 apk 是 Android 系統(tǒng)的安裝包,在我們編寫完代碼,打包成 apk 之后,就可以將 apk 發(fā)布到應用市場,用戶下載 apk 后就可以安裝運行了。這一切看似簡單但暗藏玄機,我們的 apk 一旦到了紛繁復雜的市場,就需要考慮很多問題。
比如如何將你發(fā)布的應用和其他開發(fā)者發(fā)布的應用區(qū)分開;如何確認用戶下載的 apk 就是官方發(fā)布的而不是個人開發(fā)者;如何安全的完成應用升級等等一系列的問題。這些問題有些涉及商業(yè),有些涉及系統(tǒng)安全,對于市場穩(wěn)定性而言都是至關重要的,解決這些問題的,就是本章主角:Android 程序簽名打包。大家可能對這個技術比較陌生,接下來我們從 what、why、how 這三個角度讓大家對簽名打包有一個清晰的認識。
1. 什么是簽名
現(xiàn)在你寫了一本書并簽上自己的大名,將它出版之后放到各大書店,理想狀態(tài)就是讀者通過書名就能找到它。但是市面上的書不計其數(shù),難免會有書名雷同,亦或是你的書大賣,市面上出現(xiàn)了盜版、翻版,這時候光靠書名已經(jīng)沒辦法辨別,你的簽名就能發(fā)揮作用了。今后如果你要出續(xù)集,同樣,為了避免讀者買到的是續(xù)集而不是同名的其他書,也需要在找到書名之后再次確認一下你的簽名,兩者一致才能認定這就是續(xù)集。
這一章提到的簽名和現(xiàn)實中的簽名非常類似,只不過在這里我們稱為“數(shù)字簽名”。
在 Android 系統(tǒng)中,所有安裝到系統(tǒng)的App都必有一個數(shù)字證書,此數(shù)字證書用于標識應用程序的作者和應用程序之間的信任關系。Android 使用 Java 的數(shù)字證書相關的機制來給 apk 加蓋數(shù)字證書,數(shù)字證書的私鑰由開發(fā)者持有。
Android 使用證書作為標識應用程序作者的一種方式,和 Https 不同,Android 證書不需要由證書認證中心簽名,開發(fā)者直接使用自制簽名證書。所以我們在打包 apk 的時候,必須對 apk 用自己的證書做一次簽名打包,用于在市場上唯一標識發(fā)布者的身份。一般 Android 有兩種簽名:
- 調(diào)試模式的簽名: Android sdk 為應用自動生成一個簽名證書,調(diào)試模式下簽名的應用不能對外發(fā)布,因為由構建工具創(chuàng)建的證書是不安全的,應用商店不接受調(diào)試證書簽名的 apk;
- 公布模式下簽名: 需要生成自己的證書,可用于發(fā)布。
2. 為什么要做簽名打包
關于簽名打包的原因,上面已經(jīng)提到過一些,主要是用于標識開發(fā)者的身份。這里再針對具體的應用場景闡述幾個引入簽名的優(yōu)勢:
- 應用程序升級: 在應用程序發(fā)布更新時,如果用戶已有此 App,并且簽名和待升級的 apk 簽名一致,那么用戶可以無縫的升級到新版本。如果簽名不一致,那么不會發(fā)生升級,此時相當于用戶安裝了兩個完全獨立的 App。
- 應用程序模塊化: Android 允許相同證書簽名的應用程序運行在相同的進程中,此時系統(tǒng)會將它們作為單個應用程序處理。此時每個應用程序可以以模塊化部署,在升級時可以獨立地升級其中的某一個模塊。
- 代碼、數(shù)據(jù)的授權共享: Android 提供了以簽名為基礎的權限機制,因此一個應用可以暴露功能給另一個用相同證書簽名的應用使用,這樣就可以在相同簽名的應用程序之間共享代碼和數(shù)據(jù)。
3. 如何簽名打包
簽名打包的方式有很多,這里介紹一種最簡單的方式,直接使用Eclipse就可以為我們的 App 簽名打包。
- 在 Eclipse 中選擇“File” -> “Export”,選擇“Android” -> “Export Android Application”;
- 這時候提示我們創(chuàng)建一個密鑰庫 keystore,選擇 Create new keystore,然后指定一個保存證書的目錄并設置證書密碼;
- 接著填寫密鑰庫信息,填寫證書文件的密碼,使用期限和組織單位的信息,這樣一個證書就生成好了。
- 回到第一步,在 Export 的時候選擇“Use existing keystore”,然后選擇剛剛創(chuàng)建的證書,并輸入密碼,一路 next,搞定!
再看看 Eclipse 的 bin 目錄,就會出現(xiàn)剛剛我們用自己的證書簽名的 apk,待我們后面學習 Android 功能開發(fā)之后,你就可以用這種方式簽名打包自己的 apk 進行發(fā)布了。
4. 小結
經(jīng)過前面兩章的學習,現(xiàn)在你已經(jīng)可以完成一個 Android 項目的創(chuàng)建、運行、簽名打包,剩下的也就是最重要—— Android 項目開發(fā)。接下來我們就正式進入 Android 基礎知識,一步步進入 Android 的世界。