Android 1.6 SDK中包含了一个用于优化APK的新工具zipalign。 它提高了优化后的Applications与Android系统的交互效率(俗话:“要致富先修路”,Android小组重新为Applications 与Android系统之间搭建了一条高速公路),从而可以使整个系统的运行速度有了较大的提升。Android小组强烈建议开发者在发布新Apps之前使 用zipalign优化工具,而且对于已经发布但不受限于系统版本的Apps,建议用优化后的APK替换现有的版本。在下面的内容中将从三个方面介绍 zipalign:

  • zipalign如何优化
  • 如何使用zipalign
  • 使用zipalign的理由

根据官方文档的描述,Android系统中Application的数据都保存在它的APK文件中,同时可以被多个进程访问,安装的过程包括如下几个步骤:

  • Installer通过每个apk的manifest文件获取与当前应用程序相关联的permissions信息
  • Home application读取当前APK的Name和Icon等信息。
  • System server将读取一些与Application运行相关信息,例如:获取和处理Application的notifications请求等。
  • 最后,APK所包含的内容不仅限于当前Application所使用,而且可以被其它的Application调用,提高系统资源的可复用性。

zipalign优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure alignment(数 据结构对齐标准:DSA)限定为4-byte boundaries。如果第一次接触有关Data structure alignment的内容,强烈建议搜索更多与其相关的内容来充分理解这样做的最终目的,这也是理解zipalign工作原理的关键。如果不采取对齐的标 准,处理器无法准确和快速的在内存地址中定位相关资源。

目前的系统中使用fallback mechanism机制处理那些没有应用DSA标准的应用程序,这的确大大的方便了普通开发者无需关注繁琐的内存操作问题。但是相反,对于这样的应用程序 将给普通用户带来一定的麻烦,不但影响程序的运行的效率,而且使系统的整体执行效率下降和占用大量不必要的内存资源,甚至消耗一定的电池资源 (battery life)。

在Android 1.6 SDK中提供了三种应用Align操作的方法:

  • 使用ADT:
    • 从 ADT 0.9.3版本开始,可以通过export wizard自动对发布的application packages执行align操作。设置方法:鼠标右键点击Project,然后选择”Android Tools” > “Export Signed Application Package…”。或者可以直接在AndroidManifest.xml中设置。
  • 使用 Ant:
    • 对于API Level 大于等于4的Application Packages可以直接通过Ant build script来Align优化。但对于API Level小于4的情况,只能采取手动Align优化。
    • 默认下应用Ant build script运行Debug packages(API Level >= 4)时,将自动执行Align优化。
    • 针对Release packages。当使用Ant build script执行Align优化时,首先需要拥有足够的信息来Sign packages。当完成Signing之后, 才能执行Align优化。通过官方文档了解如何Sign Packages。
  • 手动执行Align优化:
    • 利用tools文件夹下的zipalign工具。首先调出cmd命令行,然后执行:zipalign -v 4 source.apk androidres.apk。这个方法不受API Level的限制,可以对任何版本的APK执行Align优化。
    • 同时可以利用zipalign工具检查当前APK是否已经执行过Align优化。命令:zipalign -c -v 4 androidres.apk

再一次提醒开发者,立刻应用zipalign工具强制优化已经发布的application packages,并让你的用户使用最新的版本。

英文原版 official Android blog

更多相关文章

  1. 页面调用ADB操作Android设备
  2. Android(安卓)studio 使用NDK 实现串口 动态库
  3. Android(安卓)Jni中使用线程及回调更新UI
  4. android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
  5. Android(安卓)NDK
  6. Android实现图表绘制和展示
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android学习心得——NeverLost
  2. Android整机调试串口新玩法
  3. Android动态修改ListView中指定Item的组
  4. Android(安卓)Studio--低版本如何不使用A
  5. Android(安卓)8.0 EditText 焦点无法移动
  6. Android中的对象序列化方法
  7. [Android] 基于 Linux 命令行构建 Androi
  8. Android获得线性渐变某点的颜色
  9. Android、iOS 将有Edge浏览器 Win10又一
  10. android ORM框架LitePal完全解析(crud)