有极速快乐十分吗|极速快乐十分走势图|

關于Android應用apk的程序簽名

必須經過數字簽名后才能安裝
服務器君一共花費了234.101 ms進行了7次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

在Android系統中,要求所有應用程序必須經過數字簽名后才能安裝。Android系統使用這個證書來識別應用程序的作者,并建立程序間的信任關系。 證書并不用讓于用戶控制可以安裝哪些程序,證書也不需要授權中心來簽名。在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上錯誤如下:

debug:
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
[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命令并傳入一些可選參數。

本文地址:http://www.bavugt.tw/librarys/veda/detail/211,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.bavugt.tw/librarys/veda/detail/211

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《重來:更為簡單有效的商業思維》 賈森?弗里德(Jason Fried) (作者), 大衛?漢森(David Heinemeier Hansson) (作者), Mike Rohde (插圖作者), 李瑜偲 (譯者)

這本書呈現的是一種更好、更簡單的經商成功之道。讀完這本書,你就會明白為什么計劃實際上百害而無一益,為什么你不需要外界投資人,為什么將競爭視而不見反倒會發展得更好。事實是你所需要的比你想象的少得多。你不必成為工作狂,你不必大量招兵買馬,你不必把時間浪費在案頭工作和會議上,你甚至不必擁有一間辦公室。所有這些都僅僅是借口!

更多計算機寶庫...

有极速快乐十分吗
安徽体彩十一选五走 微乐捉鸡麻将 投哪网配资 武汉麻将必胜绝技 江苏快3全天计划 浙江福彩6+1生肖开奖结果 快乐赛车彩票合法吗 圣农发展股 四方河南麻将官方 福彩大乐透开奖在哪看