[Android Memory] Android Zipalign zip對齊優化app程序

轉載地址:http://www.cnblogs.com/xirihanlin/archive/2010/04/12/1710164.html
參考文章:http://www.cnblogs.com/lee0oo0/archive/2013/06/13/3133833.html

Android SDK中包含一個「zipalign」的工具,它可以對打包的應用程序進行優化。在你的應用程序上運行zipalign,使得在運行時Android與應用程序間的交互更加有效率。所以,這種方式可以讓應用程序和整個系統運行得更快。咱們強烈推薦在新的和已經發布的程序上使用zipalign工具來獲得優化後的版本——即便你的程序是在老版本的Android平臺下開發的。這篇文章將描述zipalign如何有助於性能改善以及如何使用它來優化你的app。html

在Android中,每一個應用程序中儲存的數據文件都會被多個進程訪問:安裝程序會讀取應用程序的manifest文件來處理與之相關的權限問題;Home應用程序會讀取資源文件來獲取應用程序的名和圖標;系統服務會由於不少種緣由讀取資源(例如,顯示應用程序的Notification);此外,就是應用程序自身用到資源文件。app

在Android中,當資源文件經過內存映射對齊到4字節邊界時,訪問資源文件的代碼纔是有效率的。可是,若是資源自己沒有進行對齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個過程將會比較緩慢且會花費額外的內存。編輯器

對於應用程序開發者來講,這種顯式讀取方式是至關便利的。它容許使用一些不一樣的開發方法,包括正常流程中不包含對齊的資源,所以,這種讀取方式具備很大的便利性(本段的原始意思請參考原文)。工具

遺憾的是,對於用戶來講,這個狀況偏偏是相反的——從未對齊的apk中讀取資源比較慢且花費較多內存。最好的狀況是,Home程序和未對齊的程序啓動得比對齊後的慢(這也是惟一可見的效果)。最壞的狀況是,安裝一些未對齊資源的應用程序會增長內存壓力,並所以形成系統反覆地啓動和殺死進程。最終,用戶放棄使用如此慢又耗電的設備。post

幸運的是,對應用程序中的資源做對齊操做很簡單:性能

  • 使用ADT:
    • 若是你使用導出嚮導的話,Eclipse中的ADT插件(從Ver. 0.9.3開始)就能自動對齊Release程序包。使用嚮導,右擊工程屬性,選擇「Android Tools」 > 「Export Signed Application Package…」。固然,你還能夠經過AndroidManifest.xml編輯器的第一頁作到。
    • 使用Ant:
      • Ant編譯腳本(從Android 1.6開始)能夠對齊程序包。老平臺的版本不能經過Ant編譯腳本進行對齊,必須手動對齊。
      • 從Android 1.6開始,Debug模式下編譯時,Ant自動對齊和簽名程序包。
      • Release模式下,若是有足夠的信息簽名程序包的話,Ant纔會執行對齊操做,由於對齊處理髮生在簽名以後。爲了可以簽名程序包,進而執行對齊操做,Ant必須知道keystore的位置以及build.properties中key的名字。相應的屬性名爲key.store和key.alias。若是這些屬性爲空,簽名工具會在編譯過程當中提示輸入store/key的密碼,而後腳本會執行簽名及apk文件的對齊。若是這些屬性都沒有,Release程序包不會進行簽名,天然也就不會進行對齊了。 
      • 手動:
        • 爲了可以手動對齊程序包,Android 1.6及之後的SDK的tools/文件夾下都有zipalign工具。你可使用它來對齊任何版本下的程序包。你必須在簽名apk文件後進行,使用如下命令:zipalign -v 4 source.apk destination.apk
        • 驗證對齊:
          • 如下的命令用於檢查程序包是否進行了對齊:zipalign -c -v 4 application.apk

咱們極力推薦手動zipalign你的應用程序,並確保將最新對齊後的版本提供給用戶。此外,別忘了還有你的新應用程序也須要這麼作!優化

 
分類:  Android Memory
相關文章
相關標籤/搜索