<? ? ? 本文主要為大家詳細講解APK數(shù)字簽名方面的內(nèi)容,并介紹APK調試模式和發(fā)布模式下數(shù)字簽名的方式峦剔。
本文轉自:http://www.jizhuomi.com/android/environment/293.html
1、什么是數(shù)字簽名
數(shù)字簽名就是為你的程序打上一種標記炊甲,來作為你自己的標識荣挨,當別人看到簽名的時候會知道它是與你相關的贸伐。
2勾给、為什么要數(shù)字簽名
最簡單直接的回答:系統(tǒng)要求的恍涂。
Android系統(tǒng)要求每一個Android應用程序必須要經(jīng)過數(shù)字簽名才能夠安裝到系統(tǒng)中,也就是說如果一個Android應用程序沒有經(jīng)過數(shù)字簽名足丢,是沒有辦法安裝到系統(tǒng)中的元镀!
Android通過數(shù)字簽名來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序霎桅。
這個數(shù)字簽名由應用程序的作者完成,并不需要權威的數(shù)字證書簽名機構認證讨永,它只是用來讓應用程序包自我認證的滔驶。
3、數(shù)字證書的機制
Android使用Java的數(shù)字證書相關的機制來給apk加蓋數(shù)字證書卿闹,要理解android的數(shù)字證書揭糕,需要先了解以下數(shù)字證書的概念和java的數(shù)字證書機制萝快。
4、程序使用相同的數(shù)字證書的好處
1)有利于程序升級
當新版程序和舊版程序的數(shù)字證書相同時著角,Android系統(tǒng)才會認為這兩個程序是同一個程序的不同版本揪漩。如果新版程序和舊版程序的數(shù)字證書不相同,則Android系統(tǒng)認為他們是不同的程序吏口,并產(chǎn)生沖突奄容,會要求新程序更改包名。
2)有利于程序的模塊化設計和開發(fā)产徊。
Android系統(tǒng)允許擁有同一個數(shù)字簽名的程序運行在一個進程中昂勒,Android程序會將他們視為同一個程序。所以開發(fā)者可以將自己的程序分模塊開發(fā)舟铜,而用戶只需要在需要的時候下載適當?shù)哪K戈盈。
3)可以通過權限(permission)的方式在多個程序間共享數(shù)據(jù)和代碼。
Android 提供了基于數(shù)字證書的權限賦予機制谆刨,應用程序可以和其他的程序共享概功能或者數(shù)據(jù)給那那些與自己擁有相同數(shù)字證書的程序塘娶。如果某個權限 (permission)的protectionLevel是signature,則這個權限就只能授予那些跟該權限所在的包擁有同一個數(shù)字證書的程序痊夭。
5刁岸、在簽名時,需要考慮數(shù)字證書的有效期
1)數(shù)字證書的有效期要包含程序的預計生命周期生兆,一旦數(shù)字證書失效难捌,持有改數(shù)字證書的程序將不能正常升級。
2)如果多個程序使用同一個數(shù)字證書鸦难,則該數(shù)字證書的有效期要包含所有程序的預計生命周期根吁。
3)Android Market強制要求所有應用程序數(shù)字證書的有效期要持續(xù)到2033年10月22日以后。
6合蔽、數(shù)字證書的要點
Android數(shù)字證書包含以下幾個要點:
1)所有的應用程序都必須有數(shù)字證書击敌,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應用程序。
2)Android程序包使用的數(shù)字證書可以是自簽名的拴事,不需要一個權威的數(shù)字證書機構簽名認證沃斤。
3)如果要正式發(fā)布一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名刃宵,而不能使用adt插件或者ant工具生成的調試證書來發(fā)布衡瓶。
4)數(shù)字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期牲证。如果程序已經(jīng)安裝在系統(tǒng)中哮针,即使證書過期也不會影響程序的正常功能。
5)Android使用標準的java工具 Keytool and Jarsigner 來生成數(shù)字證書,并給應用程序包簽名十厢。
6)使用zipalign優(yōu)化程序等太。
7、數(shù)字簽名的兩種模式
我們都知道Android系統(tǒng)不會安裝運行任何一款未經(jīng)數(shù)字簽名的apk程序蛮放,無論是在模擬器上還是在實際的物理設備上缩抡。所以我們會有一個疑問,為何在日 常開發(fā)過程中我沒有進行任何簽名的操作包颁,程序都會在模擬器和真機上運行瞻想?下面我們來講講APK程序的兩種模式: 調試模式(debug mode)和發(fā)布模式(release mode)
1、調試模式(debug mode)??: 在調試模式下徘六,ADT會自動的使用debug密鑰為應用程序簽名内边,因此我們可以直接運行程序。
debug密鑰:一個名為debug.keystore的文件待锈。
存放位置:C:\Users\Xiaopeng\.android\debug.keystore? ?? ???Xiaopeng對應替換為自己操作系統(tǒng)的用戶名
兩個風險:
debug簽名的應用程序有這樣兩個風險:
1)debug簽名的應用程序不能在Android Market上架銷售漠其,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所生成的可能都不一樣竿音,就意味著如果你換了機器進行apk版本升級和屎,那么將會出現(xiàn)上面那種程序不能覆蓋安裝的問題。
不要小視這個問題春瞬,如果你開發(fā)的程序只有你自己使用柴信,當然無所謂,卸載再安裝就可以了宽气。但要是你的軟件有很多使用客戶随常,這就是大問題了,就相當于軟件不具備升級功能萄涯!所以一定要有自己的數(shù)字證書來簽名。
2涝影、發(fā)布模式(release mode) : 當要發(fā)布程序時枣察,開發(fā)者就需要使用自己的數(shù)字證書給apk包簽名。
使用自己的數(shù)字證書給APK簽名的兩種方法:
1)通過DOS命令來對APK簽名燃逻。
2)使用ADT Export Wizard進行簽名序目。
美文推薦:
技術博客:移動應用加密工具解析