[Android]Ziplign打包最后一步

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你的应用程序,并确保将最新对齐后的版本提供给用户。此外,别忘了还有你的新应用程序也需要这么做!

时间: 2024-10-01 21:54:42

[Android]Ziplign打包最后一步的相关文章

【IOS-COCOS2D-X 游戏开发之七】整合COCOS2DX的ANDROID项目到XCODE项目中,XCODE编写&编译代码,ANDROID导入打包运行即可!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/667.html 此篇针对较早的-x引擎讲解的,最新的可以参考: [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新2.0.1版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!   之前有两节介绍了mac下配置Android NDK并搭建Cocos2dX以

Xamarin开发Android应用打包apk

原文:Xamarin开发Android应用打包apk Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1.debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件Size非常大,不建议使用. 2.Release时,"部署"勾选√,生成--部署解决方案后,代码目录下bin\Release中会自动生成部署用***-Signed.apk文件,文件Size比较小. 3.自己打包,工具--Publish

《Android程序设计》一3.8 Android应用打包:.apk文件

3.8 Android应用打包:.apk文件 Android提供了一个名为apkbuilder的应用,它能够生成可安装的Android应用文件,这些应用文件的扩展名是.apk..apk是一种ZIP文件格式,它和很多其他面向Java的应用类似,包含应用说明.已经编译的应用类和应用资源.Android还提供了aapt工具对文件进行打包,这些文件也是生成.apk文件,但是开发人员通常倾向于在其开发环境中使用该工具构建他们的应用.绝大多数用户只是简单地依赖其IDE来创建其.apk文件. 一旦开发人员创建

android st...-关于android studio打包问题

问题描述 关于android studio打包问题 我用它打包 出现问题 Error:Error: This class should provide a default constructor (a public constructor with no arguments) (com.csoft.hospital.ProgressActivity) [Instantiatable] 提示这个类需要一个构造函数 可是这个类是接口啊??怎么弄啊 求解 解决方案 Android Studio下多渠道

【COCOS2D-X(2.X) 游戏开发系列之二】COCOS2DX最新2.X版本跨平台整合NDK+XCODE,XCODE编写&编译代码,ANDROID导入打包运行即可!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2dx-v2-0/962.html 前段时间有事情不在北京也很少上网所以一直没有更新博客,那么今天Himi向大家分享一下最新cocos2dx 2.0.1版本整合Xcode 编译运行Android的博文: 首先Himi使用的引擎版本是cocos2dx 2.0: 主要特点: 使用opengl es2.0支持CocosBuilder集成了

求大神帮助啊-android Studio打包报错,不能转换的数据类型

问题描述 android Studio打包报错,不能转换的数据类型

Android多渠道打包的方法步骤

本文介绍了Android多渠道打包的方法步骤,分享给大家,具体如下: 1.生成签名文件 点击 Build -> Generate Signed APK: 2.创建一个签名 红色填写部分需要认真填写,并牢记,其余部分随意填写 有了签名,单个app打包我就不详细说了,具体说下多渠道打包的步骤 2.多渠道打包 作用:就是根据不同的渠道值,去具体分析每个渠道的用户情况 步骤一: 在AndroidManifest.xml的application标签里添加一个meta-data标签定义 <meta-dat

Android Studio打包.so库到apk中实例详解

Android Studio打包.so库到apk中实例详解 由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(1.1.0版本)还无法做到那么自动,但是我们可以通过以下方式进行. 首先在Android Studio工程的app目录下创建整个jni目录,jni目录里写Android.mk.Application.mk以及各类C/C++和汇编源文件.然后跟原来一样

转[Android]APK打包过程详解(一)

原文地址:http://jojol-zhou.iteye.com/blog/729271 如作者要求,请留言,博主可删除此博文.  这篇文章对android打包过程的每个步骤做了详细的解释,这里我给一个Maven简单版本作为概括  第一步, aapt,如果pom依赖中有apklib,将会先解压,与原文件一起产生aidl r等文件. 第二步, aidl,javac,编译, 和传统maven编译一样, 需要解决依赖, 包冲突等还有scope. 第三步, proguard,混淆,发布包需要,会把所有依