編輯:關於Android編程
本文主要介紹Android應用程序簽名的相關理論知識以及如何發布Android應用程序。
為大家所熟知的日常生活中的簽名,它是代表某個人的特殊標記,用於唯一標識某個人。而Android 應用程序的簽名的本質與日常生活中的簽名是一樣的,應用程序中的簽名也開發者在應用程序中打上的一種特殊標記,別人在看到這個標記時,他會知道是這個應用程序與你有關或者是你開發的,而不是別人。
是的,Google發布的Android系統要求每個發布的應用程序都必須簽名。Android應用程序的簽名是用來建立程序的開發者與程序包之間的信任關系,當更新應用程序時,Android系統要求新/舊兩個應用程序的簽名必須一致。
與windows上簽名的意義不同的是,Android的簽名不需要權威的數字證書機構認證,不會用於決定終端用戶可以安裝哪些應用程序,它是程序的作者自己完成的,是Android系統中程序包的一種自我認證的機制。
如果你是一個剛入門的開發者,你會發現你開發的應用程序沒有經過自己的簽名也可以安裝在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簽名的應用程序是不能發布到應用商店的。
App的簽名可以通過兩種方式來完成,使用ADT提供的圖形化界面來完成,或者使用命令行(DOS)命令進行簽名。
選擇項目->右鍵->export -> export Android Application(這裡我使用ZHGL這個Android App項目進行演示)
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPGgzPrXatv6yvaO60aHU8dKqtbyz9rXEYXBwuaSzzDwvaDM+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140722/201407220932523.jpg" alt="\">
第一次使用選擇 create new keystore,指定密鑰庫(.keystore)存放的位置:C:\Users\chen.jian\Desktop\AndroidSignature,並設置密鑰庫的密碼。
PS:密鑰可以為多個應用程序簽名哦,建議開發者擁有一個密鑰庫就行了。
簽名證書的概念:現實環境中,證書會攜帶作者/證書內容等相關信息,然後會有頒發證書機構的簽名或者印章,而與這裡的簽名證書在本質上相同,你設定的密碼相當於簽名,簽名工具會使用此密碼對apk進行加密。
——Alias:密鑰庫的別名(作者自行設定,不區分大小寫,密鑰庫可以存放多個簽名證書(數字證書),不同的app 建議創建不同的簽名證書)
——Password:密鑰密碼
——Validity:簽名證書的有效期限
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的環境變量中。
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 -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參數後面的名稱。
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版本升級,那麼將會出現上面那種程序不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程序只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟件有很多使用客戶,這就是大問題了,就相當於軟件不具備升級功能!
網絡上都提供了在Google Play上發布應用程序的流程,我這裡只簡單介紹國內的應用商店(360)如何發布應用程序。
第一步:首先你必須要有一個360的賬號,360的賬號是通用的(可以在安全衛士、手機助手、發布應用程序···),與普通的賬號不同的是,如果要在360應用商店發布軟件,就必須進行實名認證,手持身份證的照片。
第二步:登陸http://dev.360.cn/ 選擇發布應用程序 -> 進入新的頁面後選擇創建軟件
第三步:按照提示填寫軟件的相關信息,值得注意的是360對上傳的圖片尺寸有特殊的要求,最好看清楚之後再截屏、編輯,不然會浪費不少時間。
第四步:等待審核通過
PS:注冊過開發者賬號過後,可以選擇首發、雲端測試、軟件加固、廣告接入等功能。
序言:Activity作為Android四大組件之一,其重要性不言而喻。本文目錄結構:1.Acticity是什麼2.Activity的創建3.Activity的生命周期4
先來看看最終的效果~~嗯。。一個是頭像上移的 另一個是模仿UC浏覽器的。基礎概念其實Behavior就是一個應用於View的觀察者模式,一個View跟隨者另一個View的
要研究的幾個問題 一、Behavior是什麼?為什麼要用Behavior? 二、怎麼使用Behavior? 三、從源碼角度看為什麼要這麼使用Behavior?一、Beha
開啟系統設置中的模擬位置Android 6.0 以下:【開發者選項 -> 允許模擬位置】Android 6.0 及以上:【開發者選項 -> 選擇模擬位置信息應