android studio 如何使用zipalign工具优化

一、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
  • 1

如果使用的是ohmyzsh

vim ~/.zshrc
  • 1

写入下面的第三个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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后重新载入修改的文件

source ~/.bashrc     or   source ~/.zshrc
  • 1

输入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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

对齐程序包资源

zipalign -f -v 4 infile.apk outfile.apk
  • 1

比对apk是否对齐

zipalign -c -v 4 outfile.apk
  • 1

输出Verification succesful则表示已经比对过了

zipalign;

-c  :检查.apk文件是否zipalign优化过

-f  :覆盖已经存在的文件

-p :页面对其存储对象文件

-v :输出优化后的详细信息 xx.apk

-z :将使用Zopfli

zipalign -v 4 source.apk destination.apk 我的


猜你喜欢

转载自blog.csdn.net/u010693827/article/details/80199060