一、zipalign介绍
Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。因此,这种方式能够让应用程序和整个系统运行得更快。我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本。
根据官方文档的描述,Android系统中Application的数据都保存在它的APK文件中,同时可以被多个进程访问,安装的过程包括如下几个步骤:
1、Installer通过每个apk的manifest文件获取与当前应用程序相关联的permissions信息。
2、Home application读取当前APK的Name和Icon等信息。
3、System server将读取一些与Application运行相关信息,例如:获取和处理Application的notifications请求等。
4、最后,APK所包含的内容不仅限于当前Application所使用,而且可以被其它的Application调用,提高系统资源的可复用性。
zipalign优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure alignment(数据结构对齐标准:DSA)限定为4-byte boundaries。如果第一次接触有关Data structure alignment的内容,强烈建议搜索更多与其相关的内容来充分理解这样做的最终目的,这也是理解zipalign工作原理的关键。 如果不采取对齐的标准,处理器无法准确和快速的在内存地址中定位相关资源。
二、如何使用
方法一:使用命令行
1、在Android SDK的tools文件夹下,找到zipalign.exe文件。2、把你要优化的apk复制到你解压出来的tools文件夹下。
开始->运行->CMD调出命令行窗口
命令行下输入 你解压的文件夹路径\zipalign -v 4 你要优化的apk名字.apk 优化后的apk名字.apk
例如C:\Windows\android-sdk-windows\tools\zipalign -v 4 Example.apk Example.1.apk
其中这里-v代表详细输出,4代表对齐为4个字节。
方法二:在build.gradle配置
buildTypes { release { //Zipalign优化 zipAlignEnabled true } debug { //Zipalign优化 zipAlignEnabled false } }
三、zipalign参数
环境配置(配置zipalign
的环境变量)
如果你没有使用ohmyzsh
~ vim ~/.bashrc
如果使用的是ohmyzsh
vim ~/.zshrc
写入下面的第三个pasth,记住前面的目录是你自己的sdk的路径,别直接复制
#Android sdk
export ANDROID_HOME=/Users/guoyoujin/Library/Android/sdk
export PATH=$PATH:$HOME/Library/Android/sdk/tools:$HOME/Library/Android/sdk/platform-tools
export PATH=$PATH:$HOME/Library/Android/sdk/build-tools/24.0.3
#GOROOT
最后重新载入修改的文件
source ~/.bashrc or source ~/.zshrc
输入zipalign即可查看详细信息了
➜ TxCustomerServices git:(v1.16.1) ✗ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
Usage: zipalign [-f] [-p] [-v] [-z] <align> infile.zip outfile.zip
zipalign -c [-v] <align> infile.zip
<align>: alignment in bytes, e.g. '4' provides 32-bit alignment
-c: check alignment only (does not modify file)
-f: overwrite existing outfile.zip
-p: page align stored shared object files
-v: verbose output
-z: recompress using Zopfli
简单使用
官网简单描述是这样的,相信大家也能看懂
The <alignment> is an integer that defines the byte-alignment boundaries. This must always be 4 (which provides 32-bit alignment) or else it effectively does nothing.
Flags:
-f : overwrite existing outfile.zip
-v : verbose output
-p : outfile.zip should use the same page alignment for all shared object files within infile.zip
-c : confirm the alignment of the given file
对齐程序包资源
zipalign -f -v 4 infile.apk outfile.apk
比对apk是否对齐
zipalign -c -v 4 outfile.apk
输出Verification succesful
则表示已经比对过了
zipalign;
-c :检查.apk文件是否zipalign优化过
-f :覆盖已经存在的文件
-p :页面对其存储对象文件
-v :输出优化后的详细信息 xx.apk
-z :将使用Zopfli
zipalign -v 4 source.apk destination.apk