1. 程式人生 > Android入門教學 >Android 程式簽名打包

Android 程式簽名打包

在上一章,我們建立了自己的 Android 工程,併成功的在模擬器中執行起來。同時提到,工程目錄中有一個 bin 目錄,執行之後我們可以在此目錄下找到我們的 apk。那麼不難想到,我們在點“Run”之後,系統會編譯我們的程式碼,並結合配置檔案打出一個 apk。

眾所周知 apk 是 Android 系統的安裝包,在我們編寫完程式碼,打包成 apk 之後,就可以將 apk 釋出到應用市場,使用者下載 apk 後就可以安裝運行了。這一切看似簡單但暗藏玄機,我們的 apk 一旦到了紛繁複雜的市場,就需要考慮很多問題。

比如如何將你釋出的應用和其他開發者釋出的應用區分開;如何確認使用者下載的 apk 就是官方釋出的而不是個人開發者;如何安全的完成應用升級等等一系列的問題。這些問題有些涉及商業,有些涉及系統安全,對於市場穩定性而言都是至關重要的,解決這些問題的,就是本章主角:Android 程式簽名打包。大家可能對這個技術比較陌生,接下來我們從 what、why、how 這三個角度讓大家對簽名打包有一個清晰的認識。

1. 什麼是簽名

現在你寫了一本書並簽上自己的大名,將它出版之後放到各大書店,理想狀態就是讀者通過書名就能找到它。但是市面上的書不計其數,難免會有書名雷同,亦或是你的書大賣,市面上出現了盜版、翻版,這時候光靠書名已經沒辦法辨別,你的簽名就能發揮作用了。今後如果你要出續集,同樣,為了避免讀者買到的是續集而不是同名的其他書,也需要在找到書名之後再次確認一下你的簽名,兩者一致才能認定這就是續集。

這一章提到的簽名和現實中的簽名非常類似,只不過在這裡我們稱為“數字簽名”。

在 Android 系統中,所有安裝到系統的App都必有一個數字證書,此數字證書用於標識應用程式的作者和應用程式之間的信任關係。Android 使用 Java 的數字證書相關的機制來給 apk 加蓋數字證書,數字證書的私鑰由開發者持有。

Android 使用證書作為標識應用程式作者的一種方式,和 Https 不同,Android 證書不需要由證書認證中心簽名,開發者直接使用自制簽名證書。所以我們在打包 apk 的時候,必須對 apk 用自己的證書做一次簽名打包,用於在市場上唯一標識釋出者的身份。一般 Android 有兩種簽名:

  1. 除錯模式的簽名: Android sdk 為應用自動生成一個簽名證書,除錯模式下簽名的應用不能對外發布,因為由構建工具建立的證書是不安全的,應用商店不接受除錯證書籤名的 apk;
  2. 公佈模式下簽名: 需要生成自己的證書,可用於釋出。

2. 為什麼要做簽名打包

關於簽名打包的原因,上面已經提到過一些,主要是用於標識開發者的身份。這裡再針對具體的應用場景闡述幾個引入簽名的優勢:

  • 應用程序升級: 在應用程式釋出更新時,如果使用者已有此 App,並且簽名和待升級的 apk 簽名一致,那麼使用者可以無縫的升級到新版本。如果簽名不一致,那麼不會發生升級,此時相當於使用者安裝了兩個完全獨立的 App。
  • 應用程式模組化: Android 允許相同證書籤名的應用程式執行在相同的程序中,此時系統會將它們作為單個應用程式處理。此時每個應用程式可以以模組化部署,在升級時可以獨立地升級其中的某一個模組。
  • 程式碼、資料的授權共享: Android 提供了以簽名為基礎的許可權機制,因此一個應用可以暴露功能給另一個用相同證書籤名的應用使用,這樣就可以在相同簽名的應用程式之間共享程式碼和資料。

3. 如何簽名打包

簽名打包的方式有很多,這裡介紹一種最簡單的方式,直接使用Eclipse就可以為我們的 App 簽名打包。

  1. 在 Eclipse 中選擇“File” -> “Export”,選擇“Android” -> “Export Android Application”;
  2. 這時候提示我們建立一個金鑰庫 keystore,選擇 Create new keystore,然後指定一個儲存證書的目錄並設定證書密碼;

建立金鑰庫

  1. 接著填寫金鑰庫資訊,填寫證書檔案的密碼,使用期限和組織單位的資訊,這樣一個證書就生成好了。

金鑰庫資訊

  1. 回到第一步,在 Export 的時候選擇“Use existing keystore”,然後選擇剛剛建立的證書,並輸入密碼,一路 next,搞定!

再看看 Eclipse 的 bin 目錄,就會出現剛剛我們用自己的證書籤名的 apk,待我們後面學習 Android 功能開發之後,你就可以用這種方式簽名打包自己的 apk 進行釋出了。

4. 小結

經過前面兩章的學習,現在你已經可以完成一個 Android 專案的建立、執行、簽名打包,剩下的也就是最重要—— Android 專案開發。接下來我們就正式進入 Android 基礎知識,一步步進入 Android 的世界。