在android中,每個應用程式中儲存的資料檔案都會被多個程序訪問:安裝程式會讀取應用程式的manifest檔案來處理與之相關的許可權問題;home應用程式會讀取資源檔案來獲取應用程式的名和圖示;系統服務會因為很多種原因讀取資源(例如,顯示應用程式的notification);此外,就是應用程式自身用到資源檔案。
在android中,當資源檔案通過記憶體對映對齊到4位元組邊界時,訪問資源檔案的**才是有效率的。但是,如果資源本身沒有進行對齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個過程將會比較緩慢且會花費額外的記憶體。
對於應用程式開發者來說,這種顯式讀取方式是相當便利的。它允許使用一些不同的開發方法,包括正常流程中不包含對齊的資源,因此,這種讀取方式具有很大的便利性(本段的原始意思請參考原文)。
遺憾的是,對於使用者來說,這個情況恰恰是相反的——從未對齊的apk中讀取資源比較慢且花費較多記憶體。最好的情況是,home程式和未對齊的程式啟動得比對齊後的慢(這也是唯一可見的效果)。最壞的情況是,安裝一些未對齊資源的應用程式會增加記憶體壓力,並因此造成系統反覆地啟動和殺死程序。最終,使用者放棄使用如此慢又耗電的裝置。
幸運的是,對應用程式中的資源作對齊操作很簡單:
· 使用adt:
· 使用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
· 驗證對齊:
我們極力推薦手動zipalign你的應用程式,並確保將最新對齊後的版本提供給使用者。此外,別忘了還有你的新應用程式也需要這麼做!
簡單優化 Zipalign
在android中,每個應用程式中儲存的資料檔案都會被多個程序訪問 安裝程式會讀取應用程式的manifest檔案來處理與之相關的許可權問題 home應用程式會讀取資源檔案來獲取應用程式的名和圖示 系統服務會因為很多種原因讀取資源 例如,顯示應用程式的notification 此外,就是應用程式自身用...
簡單優化 Zipalign
在android中,每個應用程式中儲存的資料檔案都會被多個程序訪問 安裝程式會讀取應用程式的manifest檔案來處理與之相關的許可權問題 home應用程式會讀取資源檔案來獲取應用程式的名和圖示 系統服務會因為很多種原因讀取資源 例如,顯示應用程式的notification 此外,就是應用程式自身用...
androidAPK優化zipalign工具
目前的系統中使用fallbackmechanism機制處理那些沒有應用dsa標準的應用程式,這的確大大的方便了普通開發者無需關注繁瑣的記憶體操作問題。但是相反,對於這樣的應用程式將給普通使用者帶來一定的麻煩,不但影響程式的執行的效率,而且使系統的整體執行效率下降和占用大量不必要的記憶體資源,甚至消耗...