標籤:android style blog http io color os ar 使用
Android 數位簽章同一個開發人員的多個程式儘可能使用同一個數位憑證,這可以帶來以下好處。(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進行簽名(如果沒有數位憑證可能需要產生數位憑證)。
使用Keytool和Jarsigner給程式簽名命令:keytool -genkey -v -keystore XSM_Mobile_Client.keystore -alias XSM_Mobile_Client -keyalg RSA -validity 20000命令函數解釋:-keystore ophone.keystore 表示產生的認證,可以加上路徑(預設在使用者主目錄下,稍後會詳細說說關於主目錄);-alias ophone 表示認證的別名是ophone;-keyalg RSA 表示採用的RSA演算法;-validity 20000表示認證的有效期間是20000天以20000天有效數位簽章認證為例,執行CMD命令:
注意:密鑰庫口令需自己建立,並且最少為6個字元,前後需要輸入2次,且一致,儲存之後的 android.keystore 存放在主目錄下面,可能很多朋友不知道也不理解主目錄是啥,那接下來我就說說關於主目錄
我PC的主目錄為:C:\Users\Administrator ,請看,我是在 C:\Users\Administrator 下執行的產生命令,所以對應的簽名包也會產生在 C:\Users\Administrator 目錄下,等會上,詳細說說
接下來就是簽名應用程式,也就是 Android Apk 程式,CMD樣本:命令列:jarsigner -verbose -keystore android.keystore -signedjar Engineer-Jsp_20141028.apk Engineer-Jsp_20140424.apk android命令函數解釋:jarsigner 是 JDK內建的工具,Engineer-Jsp_20140424.apk 是未產生簽名的APK程式,需要與數位憑證(上面第一張CMD圖產生的android.keystore)放置統一目錄下,也就是主目錄啦,signedjar Engineer-Jsp_20141028.apk 是數位憑證驗證之後的APK程式名字密鑰庫密碼短語:與第一副圖建立的密鑰一致
主目錄添加完數位簽章前後的對照圖:
Eclipse ADT 產生
彈出一個對話方塊,點擊 Next 繼續往下,出現如下對話方塊:
因為我儲存的地址,已經存在一個名為android.keystore的簽名,所以報錯,更改android.keystore為其他名字就可以了,然後點擊Next,如下
全部完成之後,點擊 Finish 就OK了,然後去之前設定的儲存地址查看就OK了~!!
Android Application Digital Signatures - Android 數位簽章