天天看點

zipalign

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

在Android中,每個應用程式中儲存的資料檔案都會被多個程序通路:安裝程式會讀取應用程式的manifest檔案來處理與之相關的權限問題;Home應用程式會讀取資源檔案來擷取應用程式的名和圖示;系統服務會因為很多種原因讀取資源(例如,顯示應用程式的Notification);此外,就是應用程式自身用到資源檔案。

在Android中,當資源檔案通過記憶體映射對齊到4位元組邊界時,通路資源檔案的代碼才是有效率的。但是,如果資源本身沒有進行對齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個過程将會比較緩慢且會花費額外的記憶體。

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

遺憾的是,對于使用者來說,這個情況恰恰是相反的——從未對齊的apk中讀取資源比較慢且花費較多記憶體。最好的情況是,Home程式和未對齊的程式啟動得比對齊後的慢(這也是唯一可見的效果)。最壞的情況是,安裝一些未對齊資源的應用程式會增加記憶體壓力,并是以造成系統反複地啟動和殺死程序。最終,使用者放棄使用如此慢又耗電的裝置。

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

使用ADT:

o     如果你使用導出向導的話,Eclipse中的ADT插件(從Ver. 0.9.3開始)就能自動對齊Release程式包。使用向導,右擊工程屬性,選擇“Android Tools” > “Export Signed Application Package…”。當然,你還可以通過AndroidManifest.xml編輯器的第一頁做到。

使用Ant:

o     Ant編譯腳本(從Android 1.6開始)可以對齊程式包。老平台的版本不能通過Ant編譯腳本進行對齊,必須手動對齊。

o     從Android 1.6開始,Debug模式下編譯時,Ant自動對齊和簽名程式包。

o     Release模式下,如果有足夠的資訊簽名程式包的話,Ant才會執行對齊操作,因為對齊處理發生在簽名之後。為了能夠簽名程式包,進而執行對齊操作,Ant必須知道keystore的位置以及build.properties中key的名字。相應的屬性名為key.store和key.alias。如果這些屬性為空,簽名工具會在編譯過程中提示輸入store/key的密碼,然後腳本會執行簽名及apk檔案的對齊。如果這些屬性都沒有,Release程式包不會進行簽名,自然也就不會進行對齊了。 

手動:

o     為了能夠手動對齊程式包,Android 1.6及以後的SDK的tools/檔案夾下都有zipalign工具。你可以使用它來對齊任何版本下的程式包。你必須在簽名apk檔案後進行,使用以下指令:zipalign -v 4 source.apk destination.apk

驗證對齊:

o     以下的指令用于檢查程式包是否進行了對齊:zipalign -c -v 4 application.apk

我們極力推薦手動zipalign你的應用程式,并確定将最新對齊後的版本提供給使用者。此外,别忘了還有你的新應用程式也需要這麼做!

上一篇: ps 替換顔色
下一篇: usb 上網2

繼續閱讀