Android Zipalign工具

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

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

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

       對於應用程序開發者來說,這種顯式讀取方式是相當便利的。它允許使用一些不同的開發方法,包括正常流程中不包含對齊的資源,因此,這種讀取方式具有很大的便利性(本段的原始意思請參考原文)。

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

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

       使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章