爲了保證每個應用程序開發商合法ID,防止部分開放商可能通過使用相同的Package
Name來混淆替換已經安裝的程序,我們需要對我們發佈的APK文件進行唯一簽名,保證我們每次發佈的版本的一致性(如自動更新不會因爲版本不一致而無法安裝)。
一般開發android的開發者都知道,在我們的Android系統中,不許可安裝兩個相同的包的應用
假設A應用的包名:com.xwj.appA; A應用已經在系統中存在了,這個時候再去安裝一個應用B ,它的包名也叫com.xwj.appA,這時候系統就會去檢查這兩應用的簽名是否相同。如果相同,B會把A給覆蓋安裝掉; 如果不相同 B安裝失敗;
當你把應用發佈到市場時,你的應用升級了,需要替換舊的程序,安裝新的程序
這時你需要兩個條件:
1.包名相同 2.簽名相同
當包名相同的時候,如果簽名相同,替換安裝(版本升級)成功。如果簽名不相同,安裝失敗;
要想自動安裝(版本升級)成功,必須保證應用程序不同版本的簽名完全一樣。
在我們程序員自己開發的apk中,一般會有一個默認的簽名(新建一個應用,運行程序,在bin目錄下apk文件,用壓縮文件打開此文件,並進入META-INF目錄),打開文件CERT.RSA
這個默認簽名的密鑰在C:\Users\admin\.android中
注意:因爲不同的電腦的默認簽名是不一樣的,當你在A電腦開發了版本1,在B電腦開發了版本2,當在一個手機中安裝了版本1,再安裝版本2時是不能覆蓋安裝的,所以應用程序需要自己簽名
接下來講解如何簽名:一般簽名有兩種方式
一、使用Keytool和Jarsigner給程序簽名(用於android低版本1.5以下)在此就不做詳解了
二、android 1.5以上暨更新版本的apk簽名方式(在進行此方式簽名時,一定要先clean項目)
1.打開Eclipse->選擇你要簽名的項目->右擊->android tools->Export signed Application package...
2.跳出窗口
3.如果是已經存在keystore的就直接選擇然後next 輸入keystore的密碼進行簽名。如果沒有的話選擇 create new keystore
然後選擇 keystore 保存的位置,設置keystore的密碼,點擊Next。
4.填寫keystore的基本信息,分別爲別名,密碼,確認密碼,有效期,姓名,組織,組織名稱,所在城市,所在省份,國家等,點擊Next
注意點:1.密碼必須和上一步所設置的密碼一樣
· 2.有效期:Android Market強制要求所有應用程序數字證書的有效期要持續到2033年10月22日以後,所以有效期一定 要大於19年,否則當時間過了,你的程序將沒辦法再更新,將損失巨大
3.國家:一般寫86,除非你不是中國人,哈
5.選擇被簽名後的APK保存位置,點擊finish
6.然後就可以在你保存的位置中找到相應的被簽名後的APK文件
注意點:記得一定不要把keystore文件給丟了,也不要把密碼給忘了,否則以後的升級就保存不了以前的用戶數據了,重新簽名的話也不再是原來的了,正如無法逃脫歌詞中寫的:我已不是原來的我
如果你的簽名丟了怎麼辦,有兩種修復方式:
1.包名不變的情況下,改簽名 -----> 犧牲用戶,成全自己
優點:你在各個應用市場的排名還是原來的排名(比如你原先在應用市場排名第一,這樣子改還是第一,適合應用市場排名高 的)
缺點:無法覆蓋安裝,即只能提醒用戶把原來的程序給卸了,安裝新的應用程序(用戶體驗差)
2.改包名 ,重新簽名 -----> 犧牲自己,成全用戶
簽名之後,用zipalign(壓縮對齊)優化你的APK文件
未簽名的apk不能使用,也不能優化。簽名之後的apk谷歌推薦使用zipalign.exe(位於android-sdk-tools目錄下)工具對其優化
1.開始->運行->cmd
2.d: 進入你所在sdk所在盤的目錄
3.cd android\sdk\tools 進入tools目錄中
4.輸入zipalign -v 4 a.apkfinal.apk (a.apk爲你所要優化的apk,記得拷到tools目錄中,final.apk爲你最終生成的apk名字)