Android從零單排之簽名打包,android簽名打包
轉載請註明出處:http://blog.csdn.net/crazy1235/article/details/46289803簽名介紹什麼是簽名?
在現實生活中,簽名就相當與合約上的簽字和蓋章。只有簽名之後,才具有一定的效力。如果沒有簽名,“合約”就沒有對象,也就沒有法律效力了。
為什麼要簽名?
Android系統要求每一個應用程式必須經過數位簽章才能安裝到系統中,也就是說沒有經過簽名的app,是沒有辦法安裝到你的android機器上的。
Android通過數位簽章來標誌應用程式和開發人員之間的聯絡,它是對應用程式自我認證的一個方式。
說白了,就是為了標誌一個APP的所屬,區分APP。
簽名的好處:
- 程式升級帶來方便。
只有相同簽名和相同包名的程式才能覆蓋安裝。
- 應用程式模組化。
android系統允許擁有同一個數位簽章的程式運行在一個進程中,android程式會將他們視為同一個程式,所以可以將程式分模組開發,使用者只需在需要的時候下載相應的模組即可。
- 資料共用
android提供了基於數位憑證的許可權賦予機制,應用程式可以喝其他程式共用一些資料給擁有相同簽名的程式。
(最後兩點好處,筆者暫時沒有接觸到。)
如何簽名打包
對APK進行簽名,有兩種方式,分別是 1. 通過ADT提供的圖形化介面簽名打包、2. 通過DOS命令來簽名打包。
首先需要說明的一下就是:我們一般偵錯工具,使用的都是debug簽名(debug.keystore)。
一般我們開發應用程式的時候,都是多人協作的,每個人的機器的debug的簽名都是不一樣的,所以經常會遇到你寫的程式提交之後,同事更新了之後就不能正常的運行。比如百度地圖的相關代碼邏輯,是與簽名有很大聯絡的。使用debug簽名會導致,某些代碼只能在你自己的機器上運行,這樣就太LOW了。
所以一般都是共用一個release簽名。
最終發布apk版本的時候,用的就是release版的簽名,也就是正式版的簽名。
下面,筆者對這兩種方式都自己講解一下:
通過圖形化介面簽名打包
項目右鍵,你會看到:Android Tools
Export Signed Application Package
表示匯出帶有簽名的apk檔案。
Export Unsigned Application Package
表示匯出不帶有簽名的apk檔案
我們選擇第一項,然後next,
此時你可以選擇使用已經存在的keystore,也可以自己建立一個keystore。
我們選擇建立一個:
next之後,
在此介面需要填寫一些簽名的資訊,比如:別名,簽名密碼,使用到期日,組織資訊等。
再次下一步,就是產生帶有簽名的apk檔案了。
經過上面的一系列的步驟,就打包出來一個帶有簽名的apk檔案。
下次再發布版本的時候,就可以使用已經產生的簽名打包了。
next之後,如果你的簽名檔案密碼是正確,會自動把你設定的別名列出來:
然後輸入你的簽名的密碼,下一步,下一步就行了。
通過命令的方式簽名打包
在使用命令的方式產生簽名打包之前,我們先看一下debug.kestore都包括哪些資訊。
使用如下命令,可以查看簽名的資訊:
keystool -list -v -keystore debug.keystore
debug簽名的口令是: android
可以看到debug.keystore中包含的資訊,與我們用圖形化介面建立簽名填寫的資訊基本對應。
我們對工程進行簽名打包需要用到兩個工具:keytool、jarsigner。
- keytool:用於產生數位簽章。
keytool不僅可以用來查看簽名資訊,也可以用來產生一個簽名,該工具位於jdk的bin目錄下。
產生簽名的命令如下:
keytool -genkey -v -keystore xxx.keystore -alias xxx -keyalg RSA -validity xxx
執行這條命令之後,會提示你輸入一些資訊:
- jarsigner: 使用簽名給apk檔案簽名。該用具也位於jdk的bin目錄中。
使用命令編譯出一個apk檔案,很繁瑣,得不償失。我們使用圖形化介面來打包出一個不帶簽名的apk。
使用如下命令對此apk進行簽名
jarsigner -verbose -keystore xxx.keystore -signedjar xxx.apk xxx.apk xxx
執行此命令之後,稍微等待一會,就會提示你打包成功。
筆者在研究簽名打包的過程中,在網上看到還有一個步驟,就是使用zipalign命令對apk進行最佳化。
zipalign -v 4 xxx.apk xxx_aligned.apk
命令的意思就是把xxx.apk最佳化成為xxx_aligned.apk。針對項目比較龐大的時候,使用此命令有較大的明顯,比較小的項目最佳化效果不是很明顯。
此命令解釋如下(網路):
zipalign能夠是apk檔案未壓縮的資料在4個位元組邊界上對齊,這樣android系統就可以使用mmap()函數讀取檔案,可以在讀取資源檔上擷取較高的效能。
總結
- 簽名不同的相同包結構的apk不能覆蓋安裝,在手機上安裝的時候,會提示你簽名衝突。在eclipse等開發工具上啟動並執行時候,會做如下提示:
- 未經過簽名的apk不能安裝到手機上。在經過Export Unsigned Application Package步驟之後,eclipse就會給你提示:在發布程式之前,需要對程式簽名處理。
此篇blog到此結束~~
感謝大家支援!如有錯誤,請指出~~
謝謝~