關於Android應用apk的程式簽名詳解

來源:互聯網
上載者:User

認證並不用讓於使用者控制可以安裝哪些程式,認證也不需要授權中心來簽名。在Android系統中,應用程式使用自己簽名的認證是完全允許而且是很普遍的。

關於Android應用程式簽名主要有以下幾個重點:

•所有的應用程式都必須簽名。系統不會安裝任何一個沒有簽名的程式。這條規則適用於任何運行Android系統的地方,不管是真機還是模擬器。因此必須在模擬器或真機上運行/偵錯工具之前對程式進行簽名。
•可以使用自己的認證來簽名。不需要任何授權中心。
•要為終端使用者發布應用程式的時候,必須簽入一個合適的密鑰。不發行就緒程式的時候還使用SDK工具簽入的Debug Key。
•系統只在安裝應用程式的時候檢測認證的有效期間。如果應用程式在安裝之後認證失效了,應用程式依然可以正常工作。
•可以使用標準工具——Keytool和Jarsigner產生Key並簽名apk檔案。
•一旦為應用程式簽名了,一定要使用zipalign工具來最佳化最終的APK包。
Debug Key和Release Key
在調試應用程式時,Android SDK工具會自動對應用程式進行了簽名。Eclipse的ADT外掛程式和Ant編譯工具都提供了兩種簽名模式——Debug模式和Release模式。 在開發與測試時,可以使用Debug模式。Debug模式下,編譯工具使用內嵌在JDK中的Keytool工具來建立一個keystore和一個 key(包含公認的名字和密碼)。在每次編譯的時候,會使用這個Debug Key來為apk檔案簽名。由於密碼是公認的所以每次編譯的時候,並不需要提示你輸入keystore和key密碼。

當程式準備發布時,必須在Release模式下使用密鑰來為apk檔案簽名。有以下兩種方式可以做到:

1. 命令列中使用Keytool和Jarsigner。

這個方法中,首先需要編譯出一個未簽名的apk。然後使用Jarsigner(或類似的工具),用密鑰為apk手動簽名。如果沒有合適的密鑰,可以運行Keytool來手動產生自己的keystore/key。

2. 使用ADT匯出嚮導。

如果使用Eclipse/ADT外掛程式進行開發,可以使用匯出嚮導來編譯器,產生密鑰(如果需要),並為apk簽名,所有這些操作都在匯出嚮導中。一旦程式簽名了,別忘了運行zipalign來為apk進行額外的最佳化。

關於簽名策略
應用程式簽名的某些方面可能會影響應用程式的開發,特別是打算一起發布多個應用程式的時候。一般來說,推薦的策略是在整個應用程式壽命內,所有的程式都用相同的認證簽名。主要出於以下幾點考慮:

•應用程式升級——在應用程式進行升級時,如果想使用者平穩的升級,那麼就需要簽上相同的認證。當系統安裝一個升級應用程式時,如果新版本的認證與老版本的證 書有匹配的話,那麼,系統才會允許進行升級。如果沒有為新版本程式簽上合適的認證,那麼在安裝時需要給應用程式指定一個新的包名。這種情況下,使用者安裝的 新版本將當作是一個全新的應用程式。
•應用程式模組化——如果應用程式聲明,Android系統允許簽有相同認證的應用程式運行在相同的進程裡。這樣系統將會把它們看作是一個單一的應用程式。用這種方法配置應用程式,使用者可以選擇更新每個獨立的模組。
•代碼/資料許可權共用——Android系統提供了基於簽名的許可權檢查,因此如果應用程式間簽有特定的認證,它們之間可以共用功能。通過多個程式簽有相同的認證,並且使用基於簽名的許可權檢查,程式可以以一種安全的方式共用代碼和資料。
•如果計劃支援單個應用程式的升級,需要確保key擁有一個超到期望的應用程式生命週期的有效期間。推薦使用25年或更長的有效期間。當key到期後,使用者也就不能平穩的更新到新的版本了。
•如果給多個無關的應用程式簽上了相同的key,那麼應確保key的有效期間超過所有應用程式所有版本的生命週期,包括將來有可能添加到這一陣營的程式。
•如果想在Android Market上發布程式,key的有效期間必須在2033.10.22以後。Market伺服器強制這一要求,目的是保證使用者可以平穩的更新他們的程式。
在設計應用程式時,一定要考慮以上這些,並使用一個合適的認證來為應用程式簽名。

配置簽名環境
首先要保證Keytool對SDK編譯工具來說是可利用的。一般可以通過設定JAVA_HOME環境變數來告訴SDK編譯工具如何找到Keytool。另 外還可以添加JDK中Keytool的路徑到PATH的變數裡。 如果在Linux上開發,並且使用GNU編譯器來編譯Java,那麼要確保系統是使用JDK中的Keytool,而不是gcj。如果Keytool已經在 PATH中,它有可能是對/usr/bin/keytool的符號連結。這種情況下,要檢查符號連結的目標,確保它是指向JDK中的Keytool。

如果要發布應用程式,還需要Jarsigner工具。Jarsigner和Keytool都包含在JDK中。

Debug模式下籤名
Android編譯工具提供了Debug簽名模式,使得開發和調試應用程式更加容易,而且還滿足Android系統的簽名要求。在使用Debug模式編譯 app時,SDK工具會調用Keytool工具自動建立一個Debug的keystore和key。然後這個Debug key會自動用於apk的簽名,這樣就不需要手動為應用程式套件組合簽名了。

關於SDK工具使用的keystore:

•Keystore名字:“debug.keysotre”
•Keystore密碼:“android”
•Key別名:“androiddebugkey”
•Key密碼:“android”
•CN:“CN=Android Debug,O=Android,C=US”
如果需要可以改變Debug keystore/key的位置和名字,或者提供一個自訂的Debug keysotre/key(在Eclipse/ADT中,通過修改 Windows>Preferences>Android>Build配置實現)。但是任何自訂的Debug keystore/key必須使用和預設Debug key(上面描述的)相同的名字和密碼。

注意:不能將簽有Debug認證的應用程式發布給終端使用者。

Eclipse使用者:如果在Eclipse/ADT下開發(並且已經按照上面的描述配置了Keytool),Debug模式下籤名預設是開啟的。運行或是調試應用程式 時,ADT會使用Debug認證進行簽名,並運行zipalign,然後安裝到選擇的模擬器或是已串連的裝置。整個過程不需要人工幹預。

Ant使用者:如果使用Ant來編譯apk檔案,則需要在ant命令中添加debug選項來開啟Debug簽名模式(假設正在使用由android工具產生 build.xml檔案)。運行ant debug編譯器時,編譯指令碼會產生一個keystore/key,並為apk進行簽名。然後指令碼會使用zipalign工具對apk進行對齊處理。整 個過程不需要人工幹預。

Debug認證到期
Debug模式下籤名用的認證自從它建立之日起,1年後就會失效。當認證失效時,會得到一個編譯錯誤,Ant上錯誤如下:

view sourceprint?
1 debug: 

2 [echo] Packaging bin/samples-debug.apk, and signing it with a debug key... 

3 [exec] Debug Certificate expired on 8/4/08 3:43 PM
在Eclipse ADT中,Android控制台上也將會看到一個類似的錯誤。要解決這個問題,只需刪掉debug.keystore檔案即可。該檔案預設儲存的位置在:

•OS X和Linux:~/.android/
•Windows XP:C:/Documents and Settings/.android/
•Windows Vista:C:/Users/.android/
刪除後,在下一次編譯的時候,編譯工具會重建一個新的keystore和Debug key。

Release模式下籤名
應用程式準備發布給其它使用者時,需要:

•擷取一個合適的密鑰
•在Release模式下編譯器
•使用密鑰簽名程式
•對齊APK包
如果使用Eclipse ADT外掛程式開發,可以使用匯出嚮導來完成編譯、簽名和對齊等操作。整個過程中,匯出嚮導還可以產生一個新的keystore和密鑰。

關於密鑰的產生
為了進行程式簽名,必須有一個合適的密鑰。這個密鑰應有以下特徵:

•個人持有。
•代表個人、公司或組織實體的身份。
•有一個有效期間。有效期間推薦超過25年。在Android Market上發布程式時需要注意:程式的有效期間需要在2033.10.22之後。不能上傳一個應用程式而它的key的有效期間是在這個日期之前。
•不是由Android SDK工具產生的Debug key。
如果沒有合適的key,則需要使用Keytool來產生一個。用Keytool產生一個key,可使用keytool命令並傳入一些選擇性參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.