1. 程式人生 > >Android Application Digital Signatures - Android 數字簽名

Android Application Digital Signatures - Android 數字簽名

插件 user digi zip git tracking oid cati engine

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程序名字 密鑰庫password短語:與第一副圖創建的密鑰一致 技術分享

主文件夾加入完數字簽名前後的對比圖:
技術分享
Eclipse ADT 生成
技術分享

彈出一個對話框,點擊 Next 繼續往下,出現例如以下對話框:
技術分享
由於我保存的地址。已經存在一個名為android.keystore的簽名。所以報錯。更改android.keystore為其它名字就能夠了,然後點擊Next,例如以下
技術分享

所有完畢之後,點擊 Finish 就OK了,然後去之前設置的保存地址查看就OK了~!!




Android Application Digital Signatures - Android 數字簽名