简单优化:Zipalign

Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。因此,这种方式能够让应用程序和整个系统运行得更快。我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本——即使你的程序是在老版本的Android平台下开发的。这篇文章将描述zipalign如何有助于性能改善以及如何使用它来优化你的app。

在Android中,每个应用程序中储存的数据文件都会被多个进程访问:安装程序会读取应用程序的manifest文件来处理与之相关的权限问题;Home应用程序会读取资源文件来获取应用程序的名和图标;系统服务会因为很多种原因读取资源(例如,显示应用程序的Notification);此外,就是应用程序自身用到资源文件。

在Android中,当资源文件通过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。但是,如果资源本身没有进行对齐处理(未使用zipalign工具),它就必须回到老路上,显式地读取它们——这个过程将会比较缓慢且会花费额外的内存。

对于应用程序开发者来说,这种显式读取方式是相当便利的。它允许使用一些不同的开发方法,包括正常流程中不包含对齐的资源,因此,这种读取方式具有很大的便利性(本段的原始意思请参考原文)。

遗憾的是,对于用户来说,这个情况恰恰是相反的——从未对齐的apk中读取资源比较慢且花费较多内存。最好的情况是,Home程序和未对齐的程序启动得比对齐后的慢(这也是唯一可见的效果)。最坏的情况是,安装一些未对齐资源的应用程序会增加内存压力,并因此造成系统反复地启动和杀死进程。最终,用户放弃使用如此慢又耗电的设备。

幸运的是,对应用程序中的资源作对齐操作很简单:

  • 使用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     以下的命令用于检查程序包是否进行了对齐:zipalign -c -v 4 application.apk

我们极力推荐手动zipalign你的应用程序,并确保将最新对齐后的版本提供给用户。此外,别忘了还有你的新应用程序也需要这么做!

原文:http://www.cnblogs.com/xirihanlin/archive/2010/04/12/1710164.html

时间: 2024-11-09 00:39:10

简单优化:Zipalign的相关文章

linux小白-基础篇-系统简单优化

作为一个刚刚接触Linux的小白,通过一段时间的学习,将我自己的部分笔记整理后拿出来,请求大家指点:因为是"0"基础学起很多地方了解的都不够深入,希望各位前辈能够指点一下:予人玫瑰,手留余香,谢谢! 因为条件有限环境是用VM搭建起来的,下文主要是根据"老男孩教育视频"中的内容整理出来的系统简单优化,希望各位前辈看过以后可以给出建议: 已学习进步为目的,不喜勿喷!谢谢! 系统简单优化    命令 一.关闭selinux                         

编译安装nginx及简单优化配置

一.背景 使用源码包安装lnmp架构及简单的优化配置 二.实验环境 rhel6.5 三.安装过程 1.nginx(提前装好gcc等编译器) (1) 下载源码包  http://nginx.org/ (2) tar -zxf nginx-1.8.1.tar.gz (3) cd nginx-1.8.1 vim auto/cc/gcc 修改第179行 (将本行注释,意为取消debug模式,) (4) ./configure --prefix=/usr/local/lnmp/nginx \ --with

完整构建LNMP,简单优化实现超高并发访问!

LNMP简介 1.什么是LNMP? 也许大家对LAMP比较熟悉,LAMP代表Linux下Apache.MySQL.PHP这种网站服务器架构:同上LNMP代表的就是Linux下Nginx.MySQL.PHP这种网站服务器架构. 2.我们为什么要采用LNMP这种架构呢? 使用Linux.PHP外加MySQL的优点我就无需多说相信大家也都很明了. Nginx是一个轻量级且高效的Linux下的Web服务器软件,最初是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的反向代

【Android UI】ListView的使用和简单优化

ListView是每个app中都要使用的,所以今天我来总结下ListView的使用和一些简单的优化. 先看下运行效果: 一.创建数据库 为了模拟数据,这里将数据保存数据库中,顺便复习一下SQLite的知识,将数据保存到数据库的好处就是很容易模拟网络请求的延迟. 1.创建数据库打开帮助类BlackNumberDBOpenHelper,它继承自SQLiteOpenHelper package com.yzx.listviewdemo.db; import android.content.Contex

C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)

原文:C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距) 核心寻峰算法的原理参考Ronny,链接:投影曲线的波峰查找, C#翻译原理代码参考sowhat4999,链接:C#翻译Matlab中findpeaks方法 前人种树,后人乘凉.感谢原作者详细的解释说明. 这里先把翻译代码贴一下(略微的修改了sowhat4999代码中的几个参数) //调用方法 List<double> data = new List<double>{25, 8, 15, 5, 6, 10, 10, 3,

mysql的简单优化【简单易学】

1.选取最适用的字段属性: 表字段尽量设小,不要给数据库增加没必要的空间:如:值为'01'.'02',给char(2)即可: 2.使用连接(JOIN)来代替子查询(Sub-Queries): 使用join是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作. 3.建立索引: 一般用在JOIN,WHERE判断,ORDERBY排序字段上. 4.避免使用select * from 表名: 需要什么字段就写什么字段. 5.尽量避免在WHERE中!=或者<>,否则放弃使用索引

【Unity笔记】协程Coroutine的简单优化

一个最简单的协程,也至少需要2帧才能完成.第一帧走到yield return null停止,第二帧从此处接着执行完下面的操作.需求:如果缓存中存在某数据则直接使用,否则联网异步下载. private bool cached; // 该数据是否已有缓存 void Start(){ StartCoroutine(Download()); } IEnumerator WorkWhenDownload() { if(cached){ // 直接使用缓存 }else{ // 没有缓存,联网下载 WWW w

刚装完系统的简单优化

第1章安装linux系统后调优及安全设置 1.1 关闭SELinux功能 [[email protected] /]# sed -i 's/SELLINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ==>修改配置文件可使用高配置永久生效,但必须要重启系统,此步时sed快速修改方法,也可以通过vi编辑修改此文件. [[email protected] /]# grep SELINUX=disabled /etc/selinux/confi

历久弥新:SSH框架结构的简单优化过程

随手记录一下大学两年来对SSH框架的一些认识. 第一次接触到SSH框架是在大二的暑假,因为偶然的机会答应了老师使用SSH框架进行一个二手书交易网站的项目开发,由于第一次接触框架,只能简单的根据网络上各种简单的例子进行扩充(换种叫法:面向百度的编程),从而实现相应的功能.下面是项目在IDE里的结构图: 整个项目后端仅简单的分为了三大块:ACTION层负责业务处理和功能实现,DAO层为模型类以及POJO类和SERVICE层.简单的用PACKAGE来区分了层次,使得整个项目的结构显得非常繁琐,复杂.我