在
Android
系統中,所有
安裝
到 系統的應用程序都必有一個數字證書,此數字證書用于標識應用程序的作者和在應用程序之間建立信任關系,如果一個 permission的protectionLevel為signature,那么就只有那些跟該permission所在的程序擁有同一個數字證書的應 用程序才能取得該權限。Android使用Java的數字證書相關的
機制
來 給apk加蓋數字證書,要理解android的數字證書,需要先了解以下數字證書的概念和java的數字證書機制。Android系統要求每一個安裝進系 統的應用程序都是經過數字證書簽名的,數字證書的私鑰則保存在程序開發者的手中。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給程序簽名( 用于1.5以下版本 )
命令:
keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000
該 命令中,-keystore ophone.keystore 表示生成的證書,可以加上路徑(默認在用戶主目錄下);-alias ophone 表示證書的別名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示證書的有效期是20000天。
此時,我們會在互用主目錄下看到ophone.keystore,即我們剛剛創建的證書。
第二種簽名方式:現在介紹android 1.5及更新版本的apk簽名方式
1,打開Eclipse->選擇你要簽名的項目->右擊->android tools->Export signed Application package...
2,跳出窗口
3,project checks 如果核對項目名沒有問題的話 點擊 Next
然后跳出keystore selection 如果是已經存在keystore的文件就選擇然后next 輸入keystore的密碼進行簽名。
如果沒有的話選擇 create new keystore 然后選擇 keystore 保存的位置,設置keystore的密碼,點擊Next。
4.填寫keystore的基本信息,如,別名,密碼,有效期,姓名,組織,組織名稱,所在城市,所在省份,國家等,點擊Next
5.選擇被簽名后的APK保存位置。點擊finish。
6.就可以在你保存的位置中找到相應的被簽名后的APK文件。
轉自: http://yangguangfu.iteye.com/blog/723182
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
