[Android]Ziplign打包最後一步
Android SDK中包含一個“zipalign”的工具,它能夠對打包的應用程式進行優化。在你的應用程式上執行zipalign,使得在執行時Android與應用程式間的互動更加有效率。因此,這種方式能夠讓應用程式和整個系統執行得更快。我們強烈推薦在新的和已經發布的程式上使用zipalign工具來得到優化後的版本——即使你的程式是在老版本的Android平臺下開發的。這篇文章將描述zipalign如何有助於效能改善以及如何使用它來優化你的app。
在Android中,每個應用程式中儲存的資料檔案都會被多個程式訪問:安裝程式會讀取應用程式的manifest檔案來處理與之相關的許可權問題;Home應用程式會讀取資原始檔來獲取應用程式的名和圖示;系統服務會因為很多種原因讀取資源(例如,顯示應用程式的Notification);此外,就是應用程式自身用到資原始檔。
[color=red]在Android中,當資原始檔通過記憶體對映對齊到4位元組邊界時,訪問資原始檔的程式碼才是有效率的。但是,如果資源本身沒有進行對齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個過程將會比較緩慢且會花費額外的記憶體。[/color]
對於應用程式開發者來說,這種顯式讀取方式是相當便利的。它允許使用一些不同的開發方法,包括正常流程中不包含對齊的資源,因此,這種讀取方式具有很大的便利性(本段的原始意思請參考原文)。
[color=red]遺憾的是,對於使用者來說,這個情況恰恰是相反的——從未對齊的apk中讀取資源比較慢且花費較多記憶體。最好的情況是,Home程式和未對齊的程式啟動得比對齊後的慢(這也是唯一可見的效果)。最壞的情況是,安裝一些未對齊資源的應用程式會增加記憶體壓力,並因此造成系統反覆地啟動和殺死程式。最終,使用者放棄使用如此慢又耗電的裝置。[/color]
幸運的是,對應用程式中的資源作對齊操作很簡單:
· 使用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 [color=red] 以下的命令用於檢查程式包是否進行了對齊:zipalign -c -v 4 application.apk
[/color]
我們極力推薦手動zipalign你的應用程式,並確保將最新對齊後的版本提供給使用者。此外,別忘了還有你的新應用程式也需要這麼做!
在Android中,每個應用程式中儲存的資料檔案都會被多個程式訪問:安裝程式會讀取應用程式的manifest檔案來處理與之相關的許可權問題;Home應用程式會讀取資原始檔來獲取應用程式的名和圖示;系統服務會因為很多種原因讀取資源(例如,顯示應用程式的Notification);此外,就是應用程式自身用到資原始檔。
[color=red]在Android中,當資原始檔通過記憶體對映對齊到4位元組邊界時,訪問資原始檔的程式碼才是有效率的。但是,如果資源本身沒有進行對齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個過程將會比較緩慢且會花費額外的記憶體。[/color]
對於應用程式開發者來說,這種顯式讀取方式是相當便利的。它允許使用一些不同的開發方法,包括正常流程中不包含對齊的資源,因此,這種讀取方式具有很大的便利性(本段的原始意思請參考原文)。
[color=red]遺憾的是,對於使用者來說,這個情況恰恰是相反的——從未對齊的apk中讀取資源比較慢且花費較多記憶體。最好的情況是,Home程式和未對齊的程式啟動得比對齊後的慢(這也是唯一可見的效果)。最壞的情況是,安裝一些未對齊資源的應用程式會增加記憶體壓力,並因此造成系統反覆地啟動和殺死程式。最終,使用者放棄使用如此慢又耗電的裝置。[/color]
幸運的是,對應用程式中的資源作對齊操作很簡單:
· 使用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 [color=red] 以下的命令用於檢查程式包是否進行了對齊:zipalign -c -v 4 application.apk
[/color]
我們極力推薦手動zipalign你的應用程式,並確保將最新對齊後的版本提供給使用者。此外,別忘了還有你的新應用程式也需要這麼做!
相關文章
- 在論壇設定的最後一步出錯
- Android Apk 打包AndroidAPK
- mysql 5.5 win7安裝最後一步總是停止響應MySqlWin7
- Android 一步一步教你使用ViewDragHelperAndroidView
- Android APK打包流程AndroidAPK
- Android多渠道打包Android
- 史上最詳細的Android Studio系列教程六--Gradle多渠道打包AndroidGradle
- Android新增OpenCV支援,一步一步新增。AndroidOpenCV
- 淺談Android打包流程Android
- Android 多渠道打包配置Android
- Flutter 打包 android端 apkFlutterAndroidAPK
- Android打包的那些事Android
- vue打包後,訪問不到Vue
- ios最簡單的測試打包方式iOS
- VI 跳到最後一行和跳到最後一行的最後一個字元字元
- Walle —— Android多渠道打包神器Android
- 簽名打包Android版apkAndroidAPK
- Android多渠道打包實踐Android
- Android開發 —— apk打包流程AndroidAPK
- android多渠道打包最快方案Android
- HBuilder Android APP打包釋出UIAndroidAPP
- Android App的簽名打包AndroidAPP
- android混淆打包經驗分享!Android
- 使用ANT打包Android應用Android
- Android程式自動化打包Android
- 修改vue打包後的結構Vue
- pyinstaller打包exe--requests模組打包後無法執行
- 一步一步學ROP之Android ARM 32位篇Android
- 一步一步給你的 Android app 加入聊天功能AndroidAPP
- VI操作--跳到最後一行和跳到最後一行的最後一個字元字元
- Unity打包Pc(Windows)後,複製一個exe到打包後的Plugins資料夾UnityWindowsPlugin
- Android開發 - Serializable 介面對物件進行“打包”傳遞和接收後“解包”解析Android物件
- 一步一步搭建react應用-前後端初始化React後端
- Android Studio NDK:三、打包SOAndroid
- Android美團多渠道打包Walle整合Android
- Android Studio打包專案:APKAndroidAPK
- Android 多包名打包應用Android
- Android資源混淆打包工具Android