Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 應用程序簽名

Android 應用程序簽名

編輯:關於Android編程

本文主要介紹Android應用程序簽名的相關理論知識以及如何發布Android應用程序。


1.簽名的概念

為大家所熟知的日常生活中的簽名,它是代表某個人的特殊標記,用於唯一標識某個人。而Android 應用程序的簽名的本質與日常生活中的簽名是一樣的,應用程序中的簽名也開發者在應用程序中打上的一種特殊標記,別人在看到這個標記時,他會知道是這個應用程序與你有關或者是你開發的,而不是別人。


2.Android應用程序一定要簽名嗎

是的,Google發布的Android系統要求每個發布的應用程序都必須簽名。Android應用程序的簽名是用來建立程序的開發者與程序包之間的信任關系,當更新應用程序時,Android系統要求新/舊兩個應用程序的簽名必須一致。

與windows上簽名的意義不同的是,Android的簽名不需要權威的數字證書機構認證,不會用於決定終端用戶可以安裝哪些應用程序,它是程序的作者自己完成的,是Android系統中程序包的一種自我認證的機制。


3.Debug簽名

如果你是一個剛入門的開發者,你會發現你開發的應用程序沒有經過自己的簽名也可以安裝在Android系統的機器上,這是因為ADT工具使用debug數字證書(存在於debug.keystore)自動為每個處於開發階段的應用程序打上了debug簽名。

debug.keystore 也被稱為debug 密鑰庫,為app簽名時必備的文件,使用Eclips時會安裝ADT(Android Development Tools)插件,ADT自帶debug 密鑰庫(也可稱作證書庫,因為*.keystore是用來存放數字證書的),文件放在:

系統盤:\Users\zhangsan\.android\ debug.keystore。不同的系統密匙庫的位置可能存在細微的差異。

通常情況下,在開發階段的應用程序是不需要作者創建一個自己的密鑰庫文件(*.keystore),但是如果你要發布已經開發好的應用程序就必須使用自己的簽名,debug簽名的應用程序是不能發布到應用商店的。


4.如何給應用程序簽名

App的簽名可以通過兩種方式來完成,使用ADT提供的圖形化界面來完成,或者使用命令行(DOS)命令進行簽名。

1)圖形化工具進行簽名

第一步:導出

選擇項目->右鍵->export -> export Android Application(這裡我使用ZHGL這個Android App項目進行演示)

\

\


<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPGgzPrXatv6yvaO60aHU8dKqtbyz9rXEYXBwuaSzzDwvaDM+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140722/201407220932523.jpg" alt="\">


第三步:創建密鑰庫(*.keystore)

\

第一次使用選擇 create new keystore,指定密鑰庫(.keystore)存放的位置:C:\Users\chen.jian\Desktop\AndroidSignature,並設置密鑰庫的密碼。

PS:密鑰可以為多個應用程序簽名哦,建議開發者擁有一個密鑰庫就行了。


第四步:創建簽名證書

簽名證書的概念:現實環境中,證書會攜帶作者/證書內容等相關信息,然後會有頒發證書機構的簽名或者印章,而與這裡的簽名證書在本質上相同,你設定的密碼相當於簽名,簽名工具會使用此密碼對apk進行加密。

\

——Alias:密鑰庫的別名(作者自行設定,不區分大小寫,密鑰庫可以存放多個簽名證書(數字證書),不同的app 建議創建不同的簽名證書)

——Password:密鑰密碼

——Validity:簽名證書的有效期限


第五步:生成帶簽名的apk文件

\


第六步:使用創建好的證書對apk進行簽名。

\

\

\

2)DOS命令進行簽名

DOS環境下對apk進行簽名需要用到三個工具:keytool、jarsigner、zipalign

Keytool:創建密匙庫、創建數字證書,在JDK的bin安裝目錄下(如:C:\Program Files\Java\jdk1.6.0_10\bin)Jarsigner:對apk進行簽名,也在JDK的bin安裝目錄下Zipalign:對簽名後的apk文件進行優化,提高虛擬機的執行效率,存在於SDK的tools目錄下(如:D:\android-sdk-windows\tools\)

可以看出對apk進行簽名並非是Android的專利,而是Java時代初就已經存在了。

PS:如果要在DOS環境下使用這幾個工具就需要將其添加到windows的環境變量中。

第一步:導出未簽名的apk文件

\


第二步:使用keytool創建數字證書

keytool -genkey -v -keystore ChenJian.keystore -alias androidkeystore_v1 -keyalg RSA -validity 20000

說明:

keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細信息打印出來,顯示在dos窗口中;-keystore ChenJian.keystore 表示生成的數字證書的文件名為" ChenJian.keystore ";-alias androidkeystore_v1 表示證書的別名為" androidkeystore_v1";-keyalg RSA 表示生成密鑰文件所采用的算法為RSA;-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效

在執行上面的命令生成數字證書文件時,會提示你輸入一些信息,包括證書的密碼。

密匙庫會被放在當前目錄C:\Users\chen.jian\ ChenJian.keystore,你也可以自己指定目錄。

\


第三步 使用jarsigner給app簽名:

jarsigner -verbose -keystore ChenJian.keystore -signedjar Signed_ZHGL.apk Unsigned_ZHGL.apk androidkeystore_v1

說明:

jarsigner是工具名稱,-verbose表示將簽名過程中的詳細信息打印出來,顯示在dos窗口中;-keystore ChenJian.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下;-signedjar Signed_ZHGL.apk Unsigned_ZHGL.apk表示給Unsigned_ZHGL.apk文件簽名,簽名後的文件名稱為Signed_ZHGL.apk;

最後面的androidkeystore_v1 表示證書的別名,對應於生成數字證書時-alias參數後面的名稱。

\

第四步 優化app:

zipalign -v 4 Signed_ZHGL.apk Signed_aligned_ZHGL.apk

說明:

zipalign是工具名稱,-v表示在DOS窗口打印出詳細的優化信息;Signed_ZHGL.apk Signed_aligned_ZHGL.apk 表示對已簽名文件Signed_ZHGL.apk進行優化,優化後的文件名為Signed_aligned_ZHGL.apk 說明:如果你以前的程序是采用默認簽名的方式(即debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程序卸載掉,才能安裝上。因為程序覆蓋安裝主要檢查兩點:兩個程序的入口Activity是否相同。兩個程序如果包名不一樣,即使其它所有代碼完全一樣,也不會被視為同一個程序的不同版本;兩個程序所采用的簽名是否相同。如果兩個程序所采用的簽名不同,即使包名相同,也不會被視為同一個程序的不同版本,不能覆蓋安裝。另外,可能有人可能會認為反正debug簽名的應用程序也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程序有這樣兩個限制,或者說風險:debug簽名的應用程序不能在Android Market上架銷售,它會強制你使用自己的簽名;

debug.keystore在不同的機器上所生成的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程序不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程序只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟件有很多使用客戶,這就是大問題了,就相當於軟件不具備升級功能!

5.數字證書用法

1)共享數字證書的優勢

有利於程序升級,當新版程序和舊版程序的數字證書相同時,Android系統才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同,則Android系統認為他們是不同的程序,並產生沖突,會要求新程序更改包名。 有利於程序的模塊化設計和開發。Android系統允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序。所以開發者可以將自己的程序分模塊開發,而用戶只需要在需要的時候下載適當的模塊。 可以通過權限(permission)的方式在多個程序間共享數據和代碼。Android提供了基於數字證書的權限賦予機制,應用程序可以和其他的程序共 享概功能或者數據給那那些與自己擁有相同數字證書的程序。如果某個權限(permission)的protectionLevel是signature, 則這個權限就只能授予那些跟該權限所在的包擁有同一個數字證書的程序。

2)數字證書的有效期

數字證書的有效期要包含程序的預計生命周期,一旦數字證書失效,持有改數字證書的程序將不能正常升級。 如果多個程序使用同一個數字證書,則該數字證書的有效期要包含所有程序的預計生命周期。 Android Market強制要求所有應用程序數字證書的有效期要持續到2033年10月22日以後。

3)數字證書的要點

Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證 如果要正式發布 一個Android,必須使用一個合適的私鑰生成的數字證書來給程序簽名 ,而不能使用adt插件 或者ant工具生成的調試證書來發布。 數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。 Android使用標准的java工具 Keytool and Jarsigner 來生成數字證書,並給應用程序包簽名。

6.發布應用程序

網絡上都提供了在Google Play上發布應用程序的流程,我這裡只簡單介紹國內的應用商店(360)如何發布應用程序。

第一步:首先你必須要有一個360的賬號,360的賬號是通用的(可以在安全衛士、手機助手、發布應用程序···),與普通的賬號不同的是,如果要在360應用商店發布軟件,就必須進行實名認證,手持身份證的照片。

第二步:登陸http://dev.360.cn/ 選擇發布應用程序 -> 進入新的頁面後選擇創建軟件

第三步:按照提示填寫軟件的相關信息,值得注意的是360對上傳的圖片尺寸有特殊的要求,最好看清楚之後再截屏、編輯,不然會浪費不少時間。

第四步:等待審核通過

PS:注冊過開發者賬號過後,可以選擇首發、雲端測試、軟件加固、廣告接入等功能。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved