Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 基於Linux命令行構建Android應用(6)Android應用構建流程

基於Linux命令行構建Android應用(6)Android應用構建流程

編輯:Android開發實例

  Android 要求所有應用在安裝前必須使用證書進行數字簽名。Android 使用該證書來確定一個應用以及其作者身份,該證書不要求由證書發行機構頒發,因此 Android 應用經常使用自我簽名的證書,而開發者保管證書的私鑰。

 

  你可以使用調試和發行兩種模式進行簽名。在調試模式下 Android SDK 負責自動生成證書並對應用簽名,在發行模式下你需要自行生成屬於你自己的證書。

 

調試模式簽名

 

  在該模式下,Android SDK 會自動生成一個調試用的證書,並且使用默認密碼對應用進行簽名,因此當你需要調試你的應用程序時,構建過程無需輸入任何密碼。

 

  Android Studio 和 Eclipse + ADT 在調試模式下能自動對應用進行簽名。

 

  你可以通過 USB 連接到你的安卓設備來調試你的應用,但調試模式簽名的應用無法用於公開發行。

 

發行模式簽名

 

  在該模式下,你使用自己的證書對應用進行簽名:

  1. 創建 keystore。keystore 是指一個二進制文件,它包含了一系列私鑰。你需要將你的 keystore 保存在一個安全可靠的地方。

  2. 創建私鑰。私鑰代表著可以確認應用身份的實體,例如某個人或者公司。

  3. 構建項目。生成一個未簽名的 .apk。

  4. 應用簽名。使用你的私鑰對未簽名的 .apk 進行簽名。

  完成以上四個步驟後,你就可以在 Google Play 上發行你的應用了[1]

 

簽名注意事項

 

  在應用的整個生命周期,你都需要使用相同的證書對其進行簽名,因為:

  ● 升級:當安卓系統對一個應用進行更新安裝時,會首先比較新舊兩個版本的證書,只有二者吻合系統才允許升級。如果在新版本應用中你使用了新的證書,你必須重新命名你的包名,那麼對用戶而言,他們其實是安裝了另外一個應用。

  ● 模塊性:安卓系統允許具有相同證書簽名的應用在同一個進程中運行,對系統而言它們是同一個應用。這樣的話你就可以按模塊部署你的應用,用戶可以獨立升級各個模塊。

  ● 按權限分享代碼和數據:安卓系統提供了一套基於簽名的權限管理系統,因此當一個應用使用了特定的證書簽名,那麼另一個應用就可以為其提供指定的功能支持。通過這套權限管理系統和對多個應用使用相同證書簽名,你的應用就可以安全的共享代碼和數據。

 

  如果你想要對應用進行後續升級,你就必須保證證書的有效期大於應用的生命周期。一般推薦有效期為 25 年或者更長。一旦你的密鑰過期,用戶將無法順利升級你的應用。

 

  如果你想要在 Google Play 上發行你的應用,你用以簽名應用的密鑰有效期必須超過 2033 年 10 月 22 日。這是 Google Play 為了保證用戶可以順利升級他們的應用而采取的強制措施。

 

妥善保管私鑰

 

  安全妥善的保管你的私鑰,無論對你還是用戶都是非常重要的。如果你允許其他人使用你的密鑰,或者將 keystore 和密碼保管在一個不安全的地方,那將危害你作為應用所有者身份的認定以及用戶的信任。

 

  如果其他人設法在你不知情或未許可的情況下獲取了你的密鑰,那他就可以惡意發行應用來取代你的應用。他還可以以你的名義攻擊其他應用或者系統,盜取用戶數據。

 

  你的應用未來所有版本都將使用你的私鑰進行簽名。如果你丟失私鑰,你將無法對已發行應用推送更新,你也不能重新生成私鑰。

 

  你作為一名開發者的聲譽取決於你是否妥善保管你的密鑰,以下是保障密鑰安全的幾個建議:

  ● 為 keystore 和密鑰設置一個健壯的密碼。

  ● 不把私鑰交給其他任何人,不告訴任何未授權的人你的 keystore 和私鑰密碼。

  ● 將 keystore 和私鑰文件保管在一個安全可靠的地方。

 

  一般來說,只要在生成、使用和保管密鑰時遵循一個普世安全意識,那麼一切就都是安全的。

 

調試證書過期

 

  調試模式使用的證書有效期為 365 天,當證書過期時,你會得到一個構建錯誤。

 

  要修復這個問題只要刪除 debug.keystore 文件即可。該文件默認保存路徑為 ~/.android/ (OS X 或 Linux)或者 C:\Documents and Settings\<user>\.android\ (Windows XP),或 C:\Users\<user>\.android\ (Windows Vista 和 Windows 7)

 

  在你下次構建時,構建工具會自動生成一個新的 keystore 和調試密鑰[2]

 

手動簽名應用

 

  你可以使用 Android SDK 和 JDK 提供的標准工具來手動簽名你的應用。以下演示如何在命令行以發行模式進行簽名:

 

  1. 使用 keytool 工具(由 JDK 提供)生成私鑰:

$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

  

  以上示例會要求你輸入 keystore 和私鑰密碼,並要求輸入一些個人信息,最後生成一個名為 my-release-key.keystore 的文件。這個 keystore 包含一個私鑰,有效期為 10000 天。-alias 選項提供的別名在稍後簽名應用時會用到。

 

  2. 在發行模式下編譯一個未簽名的 .apk。

 

  3. 使用 jarsigner 工具(由 JDK 提供) + 私鑰來簽名應用:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
-keystore my-release-key.keystore my_application.apk alias_name

 

  以上示例會要求輸入 keystore 和私鑰密碼,它會修改 APK 文件以完成簽名。你可以使用不同的密鑰對 APK 文件進行多次簽名。

 

  4. 確認 APK 是否已簽名:

$ jarsigner -verify -verbose -certs my_application.apk

 

  5. 使用 zipalign 工具(由 Android SDK 提供)調整最終的 APK 包:

$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

 

  zipalign 工具確保所有未壓縮的數據都以一個特別的字節開始,使其與文件起始點保持相對整齊。這樣可以減少應用的 RAM 占有率。

 

 

注:

[1] 你應該將 keystore 和私鑰保存在一個安全可靠的地方,同時保管一份安全的備份。如果你丟失了它們,你將無法在 Google Play 上更新你的應用,因此你必須使用相同的密鑰來簽名同一個應用的所有版本。

[2] 如果你的開發環境不是使用公歷紀年(准確說是格裡高利歷),構建工具可能會錯誤地生成一個已經過期的調試證書,從而導致無法編譯應用。要解決這個問題,參見 I can't compile my app because the build tools generated an expired debug certificate。

 

附:

1. Signing Your Applications

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