Android App的簽名打包

來源:互聯網
上載者:User

轉摘自:

http://blog.csdn.net/linghu_java/article/details/6701666

Andriod應用程式如果要在手機或模擬器上安裝,必須要有簽名! 

1.簽名的意義
  為了保證每個應用程式開發商合法ID,防止部分開放商可能通過使用相同的Package Name來混淆替換已經安裝的程式,我們需要對我們發布的APK檔案進行唯一簽名,保證我們每次發布的版本的一致性(如自動更新不會因為版本不一致而無法安裝)。

2.簽名的步驟
  a.建立key
  b.使用步驟a中產生的key對apk簽名

3.具體操作

  方法一: 命令列下對apk簽名(原理)
  建立key,需要用到keytool.exe (位於jdk1.6.0_24jre\bin目錄下),使用產生的key對apk簽名用到的是jarsigner.exe (位於jdk1.6.0_24\bin目錄下),把上兩個軟體所在的目錄添加到環境變數path後,開啟cmd輸入

         D:>keytool -genkey -aliasdemo.keystore -keyalg RSA -validity 40000

        -keystore demo.keystore

       /*說明:-genkey 產生密鑰

             -alias demo.keystore 別名 demo.keystore

           -keyalg RSA 使用RSA演算法對簽名加密

             -validity 40000 有效期間限4000天

             -keystore demo.keystore */

         D:>jarsigner -verbose -keystoredemo.keystore -signedjar demo_signed.apk

         demo.apk demo.keystore

        /*說明:-verbose 輸出簽名的詳細資料

            -keystore  demo.keystore 密鑰庫位置

            -signedjar demor_signed.apkdemo.apk demo.keystore 正式簽名,三個參數中

依次為簽名後產生的檔案demo_signed,要簽名的檔案demo.apk和密鑰庫demo.keystore.*/

  注意事項:android工程的bin目錄下的demo.apk預設是已經使用debug使用者簽名的,所以不能使用上述步驟對此檔案再次簽名。正確步驟應該是:在工程點擊右鍵->Anroid Tools-Export Unsigned Application Package匯出的apk採用上述步驟簽名。

  方法二:使用Eclipse匯出帶簽名的apk
  Eclipse直接能匯出帶簽名的最終apk,非常方便,推薦使用,步驟如下:
  第一步:匯出。
 
  第二步:建立密鑰庫keystore,輸入密鑰庫匯出位置和密碼,記住密碼,下次Use existingkeystore會用到。
 
  第三步:填寫密鑰庫資訊,填寫一些apk檔案的密碼,使用到期日和組織單位的資訊。

  第四步:產生帶簽名的apk檔案,到此就結束了。

  第五步:如果下次發布版本的時候,使用前面產生的keystore再簽名。


  第六步:下一步,下一步,然後就OK了!

  方法三:使用IntelliJIDEA匯出帶簽名的apk 
  
方法步驟基本和Eclipse相同,大概操作路徑是:菜單Tools->Andrdoid->Export signed apk。

4.簽名之後,用zipalign(壓縮對齊)最佳化你的APK檔案。
  未簽名的apk不能使用,也不能最佳化。簽名之後的apkGoogle推薦使用zipalign.exe(位於android-sdk-windows ools目錄下)工具對其最佳化:

       D:>zipalign -v 4 demo_signed.apkfinal.apk

  如上,zipalign能夠使apk檔案中未壓縮的資料在4個位元組邊界上對齊(4個位元組是一個效能很好的值),這樣android系統就可以使用mmap()(請自行查閱這個函數的用途)函數讀取檔案,可以在讀取資源上獲得較高的效能,
  PS:1.在4個位元組邊界上對齊的意思就是,一般來說,是指編譯器吧4個位元組作為一個單位來進行讀取的結果,這樣的話,CPU能夠對變數進行高效、快速的訪問(較之前不對齊)。
          2.對齊的根源:android系統中的Davlik虛擬機器使用自己專有的格式DEX,DEX的結構是緊湊的,為了讓運行時的效能更好,可以進一步用"對齊"進一步最佳化,但是大小一般會有所增加。

5.簽名對你的App的影響。
   你不可能只做一個APP,你可能有一個宏偉的戰略工程,想要在生活,服務,遊戲,系統各個領域都想插足的話,你不可能只做一個APP,Google建議你把你所有的APP都使用同一個簽署憑證。
   使用你自己的同一個簽署憑證,就沒有人能夠覆蓋你的應用程式,即使包名相同,所以影響有:
  1) App升級。 使用相同簽名的升級軟體可以正常覆蓋老版本的軟體,否則系統比較發現新版本的簽署憑證和老版本的簽署憑證不一致,不會允許新版本安裝成功的。
  2) App模組化。android系統允許具有相同的App運行在同一個進程中,如果運行在同一個進程中,則他們相當於同一個App,但是你可以單獨對他們升級更新,這是一種App層級的模組化思路。
  3) 允許代碼和資料共用。android中提供了一個基於簽名的Permission標籤。通過允許的設定,我們可以實現對不同App之間的訪問和共用,如下:

[html] view plaincopyprint?

1.    AndroidManifest.xml:<permission android:protectionLevel="normal" />  

其中protectionLevel標籤有4種值:normal(預設值),dangerous, signature,signatureOrSystem。簡單來說,normal是低風險的,所有的App不能訪問和共用此App。dangerous是高風險的,所有的App都能訪問和共用此App。signature是指具有相同簽名的App可以訪問和共用此App。signatureOrSystem是指系統image中App和具有相同簽名的App可以訪問和共用此App,Google建議不要使用這個選項,因為簽名就足夠了,一般這個許可會被用在在一個image中需要共用一些特定的功能的情況下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.