减小App包的大小

检查.ipa文件

首先获得app的ipa文件。

将ipa文件的后缀改为.zip,解压得到包内容。

查看资源文件哪个最大。然后试着对最大的文件就行处理

图片

尽量使用8-bit图片

使用8-bit的PNG图片,比32-bit的图片能减少4倍的压缩率。由于8-bit的图片支持最多256种不同的颜色,所以8-bit的图片一般只应该用于一小部分的颜色图片。例如灰度图片最好使用8-bit。

针对32-bit的图片尽量使用高压缩的比率

利用Adobe Photoshop的Save For Web可以减小JPEG和PNG的图片大小。在Xcode中,默认情况下,会自动的使用pngcrush来压缩.png图片。

使用压缩工具进行处理:

推荐使用ImageOptim对图片进行压缩,实验证明该tools。

编译选项

将build setting中的Optimization
Level
设置为Fastest,
Smallest [-Os]
; 将build setting 中的Strip
Debug Symbols During Copy
设置为YES(COPY_PHASE_STRIP
= YES),这样可以减小编译出二进制文件的尺寸。这里提到的这些设置在Xcode工程中对于Release的配置是默认的。

警告:这些设置会让你的程序很难debug。在一般开发环境build中不建议这样设置。

减小指令集的大小:

目前指令集有以下几种:

armv6 --> iPhone  iPhone2 iPhone3G 第一二代的iPod Touch

armv7--> iPhone4 iPhone4s

armv7s --> iPhone5  iPhone5c

armv64 --> iPhone5s

机器对指令集的支持是向下兼容,因此iPhone5s是可以在armv7的指令集上运行,只是效率没有那么高。你的设备是armv7s指令集,那么它也可以兼容运行比armv7s版本低的指令集:armv7、armv6

========================================================

名词解释:

Architecture:该编译选项是为了指定工程将被编译成哪些指令集,支持指令集是通过编译生成相应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。

Valid
architectures :该编译项指定可能支持的指令集,该列表和Architectures列表的交集,将是XCode最终生成的二进制包所支持的指令集。

Build Active Architecture Only :该编译项用于设置是否只编译当前使用的设备对应的arm指令集。

当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid
Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。

当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。

通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。

如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果

我们的项目之前支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。

不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,个人认为是不会影响用户体验的

减小App包的大小

时间: 2024-10-17 13:53:05

减小App包的大小的相关文章

Android中获取应用程序(包)的大小-----PackageManager的使用(二)

通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识. 本部分的内容是如何获取安装包得大小,包括缓存大小(cachesize).数据大小(datasize).应用程序大小(codesize). 本部分的知识点涉及到AIDL.Java反射机制.理解起来也不是很难. 关于安装包得大小信息封装在Packag

Android实习札记(3)---Fragment用app包还是v4包解析

Android实习札记(3)---Fragment用app包还是v4包解析 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了... 到底是用android.app下的Fragment还是用的android.support.v4.app包下的Fragment? 答:其实都可以,没错,都可以!!!我们都知道Fragment是3.0(API 11)后引入的 那么如果开发的app需要在3.0以下的版本运行呢?比如还有一点点市场份额的2.3! 于是乎,v4包就这样应

Tomcat 发布war包提示war包超出大小修改

error信息: java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (55916489) exceeds the configured maximum (52428800)原因:war包超出了上线50MB修改方法:tomcat/weba

app包中的fragment和v4包中的fragment的使用的区别

1.错误:The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, MyFragment) http://www.cnblogs.com/1114250779boke/p/3867494.html 其实主要问题是getSupportFragmentManager(),而不是使用getFragmentManager 2.app包中的fragm

Fragment用app包还是v4包解析

转自:http://blog.csdn.net/zc0908/article/details/50721553 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了... 到底是用Android.app下的Fragment还是用的android.support.v4.app包下的Fragment? 答:其实都可以,没错,都可以!!!我们都知道Fragment是3.0(API 11)后引入的 那么如果开发的app需要在3.0以下的版本运行呢?比如还有一点点市场份

浅析:Unity3D开发的游戏如何降低包体大小

众所周知,通过Unity3D开发的手游包体普遍偏大,动则几百M的安装包,而包体大则会导致手游推广的成本增大,也会影响到用户转化率.除去其他因素,用户在选择下载时,会着重关注游戏包体大小,游戏包体体积过大,下载时间长,会让用户取消下载,同时也会考虑到流量的问题. 因此Unity官方也介绍了几种降低包体大小的方法: 1.替换jpg,使用psd,减少重复资源 2.剔除不必要的资源 3.打包时查看log纪录,由此判断需要减少的文件类型 4.优化,压缩图片,减少图片大小 5.优化,压缩网格和动画,减少文件

Android-获取app包信息异常

public PackageInfo getPackageArchiveInfo (String archiveFilePath, int flags) 获取app包信息,传入文件名,返回的PackageInfo结构如为空,不可访问,出现Null指针: 说明app包可能是无法解析的,有问题: 并不是代码出的错.

讨论:如何降低Cocos2d开发的游戏包体大小

众所周知,通过Cocos2d开发的手游包体普遍偏大,动则几百M的安装包,而包体大则会导致手游推广的成本增大,也会影响到用户转化率.除去其他因素,用户在选择下载时,会着重关注游戏包体大小,游戏包体体积过大,下载时间长,也会致使用户取消下载,同时还会考虑到流量的问题. 一些常见的简单方法: 1.替换jpg,使用psd,减少重复资源: 2.剔除不必要的资源: 3.打包时查看log纪录,由此判断需要减少的文件类型: 4.优化,压缩图片,减少图片大小: 5.优化,压缩网格和动画,减少文件大小: 6.剔除s

liunx 的一些命令,日志查看。Fiddler 抓APP包的总结

cd 命令 切换到目录的路径cd /root/docements 切换到目录/root/docementscd ./path 切换到当前目录下的path目录中,"."表示当前目录cd ../path 切换到上层目录的path目录中."."表示上一层目录 ls 命令查看文件与目录的命令ls -l 列出长数据串,包含文件的属性与权限数据等ls -a 列出全部的文件,连同隐藏文件ls -d 目录本身.而不是列出目录的文件数据ls -h 将文件容量以较易都的方式列出来.ls