Android簽名詳解

來源:互聯網
上載者:User

標籤:android   io   ar   os   使用   sp   java   strong   檔案   

  • 1、什麼是簽名?
          如果這個問題不是放在Android開發中來問,如果是放在一個普通的版塊,我想大家都知道簽名的含義。可往往就是將一些生活中常用的術語放在電腦這種專業領域,大家就開始迷惑了。電腦所做的事情,或者說程式設計語言所做的事情,不正是在儘可能地類比現實嗎?所以,電腦中所說的簽名和生活中所說的簽名在本質上是一樣的,它所起到的作用也是一致的!
          讓我們來看看,在現實生活中的簽名。簽名就意味著在紙上或別處寫下自己的名字,或者說在某處打上一個標記作為你自己的一種特有的標識,當別人看到這個簽名的時候,他會知道這是和你有關的,而不是其它人。
  • 2、為什麼要給Android應用程式簽名?
          如果只能用一句簡單的話語來回答這個問題的話,我會說:"這是Android系統所要求的"。
          Android系統要求每一個Android應用程式必須要經過數位簽章才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數位簽章,是沒有辦法安裝到系統中的!Android通過數位簽章來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定終端使用者可以安裝哪些應用程式。這個數位簽章由應用程式的作者完成,並不需要權威的數位憑證簽名機構認證,它只是用來讓應用程式套件組合自我認證的。
  • 3、為什麼我開發的Android應用程式沒有做什麼簽名也能在模擬器和手機上運行?
          你沒有給Android應用程式簽名並不代表Android應用程式沒有被簽名。為了方便我們開發偵錯工具,ADT會自動的使用debug密鑰為應用程式簽名。debug密鑰?它在哪?debug密鑰是一個名為debug.keystore的檔案,它的位置:
                系統硬碟符:\Documents and Settings\liufeng\.android\debug.keystore
  • "liufeng"對應於你自己的windows作業系統使用者名稱,怎麼樣,是不是已經找到它了。這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬於自己的密鑰檔案(*.keystore)。
  • 4、Android應用程式簽名步驟
  • 1)準備工作
          apk的簽名工作可以通過兩種方式來完成:
                1)通過ADT提供的圖形化介面完成apk簽名;
  •             2)完全通過DOS命令來完成apk簽名
    我比較喜歡第2)種方式,所以下面將講解如何通過命令的方式完成apk簽名。
          給apk簽名一共要用到3個工具,或者說3個命令,分別是:keytool、jarsigner和zipalign,下面是對這3個工具的簡單介紹:
                1)keytool:產生數位憑證,即密鑰,也就是上面說到的副檔名為.keystore的那類檔案;
  •             2)jarsigner:使用數位憑證給apk檔案簽名;
                3)zipalign:對簽名後的apk進行最佳化,提高與Android系統互動的效率(Android SDK1.6版本開始包含此工具)
          從這3個工具的作用也可以看出,這3個工具的使用順序。通常我們自己所開發的所有應用程式,都是使用同樣的簽名,即使用同一個數位憑證,這就意味著:如果你是第一次做Android應用程式簽名,上面的3個工具都將用到;但如果你已經有數位憑證了,以後再給其它apk簽名時,只需要用到jarsigner和zipalign就可以完成。
          為了方便使用上面3個命令,首先需要將上面3個工具所在路徑添加到環境變數path中(我說的是為了方便使用,沒有說必須要這麼做)。怎麼配置環境變數就不在此講解了,這裡需要說一下這3個工具預設所在的路徑:
                1)keytool:該工具位於jdk安裝路徑的bin目錄下;
  •             2)jarsigner:該工具位於jdk安裝路徑的bin目錄下;
                3)zipalign:該工具位於android-sdk-windows\tools\目錄下
  •       不知道大家是否注意到keytool和jarsigner兩個工具是jdk內建的,也就意味著產生數位憑證和檔案簽名不是Android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar檔案簽名的。
  • 2)產生未經簽名的apk檔案
          既然我們要自己對apk進行簽名,就不再需要ADT預設幫我們簽名了。如何得到一個未經簽名的apk檔案呢?開啟Eclipse,在Android工程名稱上點擊右鍵,依次選擇"Android Tools" - "Export Unsigned Application Package ...",然後選擇一個儲存位置儲存即可。這樣就得到了一個未經簽名的apk檔案。
  • 3)使用keytool工具產生數位憑證
          keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
  • 說明:
          1)keytool是工具名稱,-genkey意味著執行的是產生數位憑證操作,-v表示將產生認證的詳細資料列印出來,顯示在dos視窗中;
          2)-keystore liufeng.keystore 表示產生的數位憑證的檔案名稱為"liufeng.keystore";
          3)-alias liufeng.keystore 表示認證的別名為"liufeng.keystore",當然可以不和上面的檔案名稱一樣;
          4)-keyalg RSA 表示產生密鑰檔案所採用的演算法為RSA;
          5)-validity 20000 表示該數位憑證的有效期間為20000天,意味著20000天之後該認證將失效
    在執行上面的命令產生數位憑證檔案時,會提示你輸入一些資訊,包括認證的密碼。
  • 4)使用jarsigner工具為Android應用程式簽名
          jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore
  • 說明:
          1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資料列印出來,顯示在dos視窗中;
          2)-keystore liufeng.keystore 表示簽名所使用的數位憑證所在位置,這裡沒有寫路徑,表示在目前的目錄下;
          3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk檔案簽名,簽名後的檔案名稱為notepad_signed.apk;
          4)最後面的liufeng.keystore 表示認證的別名,對應於產生數位憑證時-alias參數後面的名稱
  • 5)使用zipalign工具最佳化已簽名的apk(非必須但建議這麼做)
  •       zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
  • 說明:
          1)zipalign是工具名稱,-v表示在DOS視窗列印出詳細的最佳化資訊;
          2)notepad_signed.apk notepad_signed_aligned.apk 表示對已簽名檔案notepad_signed.apk進行最佳化,最佳化後的檔案名稱為notepad_signed_aligned.apk
  • 說明:如果你以前的程式是採用預設簽名的方式(即debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程式卸載掉,才能安裝上。因為程式覆蓋安裝主要檢查兩點:
          1)兩個程式的入口Activity是否相同。兩個程式如果包名不一樣,即使其它所有代碼完全一樣,也不會被視為同一個程式的不同版本;
          2)兩個程式所採用的簽名是否相同。如果兩個程式所採用的簽名不同,即使包名相同,也不會被視為同一個程式的不同版本,不能覆蓋安裝。
          另外,可能有人可能會認為反正debug簽名的應用程式也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程式有這樣兩個限制,或者說風險:
          1)debug簽名的應用程式不能在Android Market上架銷售,它會強制你使用自己的簽名;
          2)debug.keystore在不同的機器上所產生的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備升級功能!

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    需要注意的幾點:

    一:同一個開發人員的多個程式儘可能使用同一個數位憑證 ,這可以帶來以下好處。

    (1)有利於程式升級,當新版程式和舊版程式的數位憑證相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數位憑證不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。

    (2)有利於程式的模組化設計和開發。Android系統允許擁有同一個數位簽章的程式運行在一個進程中,Android程式會將他們視為同一個程式。所以開發人員可以將自己的程式分模組開發,而使用者只需要在需要的時候下載適當的模組。

    (3) 可以通過許可權(permission)的方式在多個程式間共用資料和代碼。Android提供了基於數位憑證的許可權賦予機制,應用程式可以和其他的程式共 享概功能或者資料給那那些與自己擁有相同數位憑證的程式。如果某個許可權(permission)的protectionLevel是signature, 則這個許可權就只能授予那些跟該許可權所在的包擁有同一個數位憑證的程式。

    在簽名時,需要考慮數字認證的有效期間 :

    (1)數位憑證的有效期間要包含程式的預計生命週期,一旦數位憑證失效,持有改數位憑證的程式將不能正常升級。

    (2)如果多個程式使用同一個數位憑證,則該數位憑證的有效期間要包含所有程式的預計生命週期。

    (3)Android Market強制要求所有應用程式數位憑證的有效期間要持續到2033年10月22日以後。

    二:Android數位憑證包含以下幾個要點:

                  (1)所有的應用程式都必須有數位憑證 ,Android系統不會安裝一個沒有數位憑證的應用程式

                  (2)Android程式包使用的數位憑證可以是自簽名的,不需要一個權威的數位憑證機構簽名認證

                  (3)如果要正式發布 一個Android ,必須使用一個合適的私密金鑰產生的數位憑證來給程式簽名 ,而不能使用adt外掛程式 或者ant工具 產生的調試認證來發布。

                  (4)數位憑證都是有有效期間 的,Android只是在應用程式安裝的時候才會檢查認證的有效期間。如果程式已經安裝在系統中,即使認證到期也不會影響程式的正常功能。

                  (5)Android使用標準的java工具 Keytool and Jarsigner 來產生數位憑證,並給應用程式套件組合簽名。

                  (6)使用zipalign 最佳化 程式。

    Android 系統不會安裝運行任何一款未經數位簽章的apk程式,無論是在模擬器上還是在實際的物理裝置上。Android的開發工具(ADT外掛程式和Ant)都可以協 助開發人員給apk程式簽名,它們都有兩種模式:偵錯模式(debug mode)和發布模式(release mode)。

    在偵錯模式下,android的開發工具會在每次編譯時間使用調試用的數位憑證給程式簽名,開發人員無須關心。

    當要發布程式時,開發人員就需要使用自己的數位憑證給apk包簽名,可以有兩種方法。

    (1)在命令列下使用JDK中的和Keytool(用於產生數位憑證)和Jarsigner(用於使用數位憑證簽名)來給apk包簽名。

    (2)使用ADT Export Wizard進行簽名(如果沒有數位憑證可能需要產生數位憑證)。

Android簽名詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.