检查.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),这样能够减小编译出二进制文件的尺寸。这里提到的这些设置在Xcodeproject中对于Release的配置是默认的。

警告:这些设置会让你的程序非常难debug。

在一般开发环境build中不建议这样设置。

减小指令集的大小:

眼下指令集有下面几种:

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

armv7--> iPhone4 iPhone4s

armv7s --> iPhone5  iPhone5c

armv64 --> iPhone5s

机器对指令集的支持是向下兼容,因此iPhone5s是能够在armv7的指令集上执行。仅仅是效率没有那么高。

你的设备是armv7s指令集,那么它也能够兼容执行比armv7s版本号低的指令集:armv7、armv6

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

名词解释:

Architecture:该编译选项是为了指定project将被编译成哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的。假设支持的指令集数目有多个。就会编译出包括多个指令集代码的数据包,造成终于编译的包非常大。

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包的大小的更多相关文章

  1. UE4 减少APK包的大小

    本文依据官方文档 Reducing APK Package Size整理而来,不过我会陆续添加自己减少包大小的心得. ETC1 纹理 当使用ETC1打Android包时,注意ETC1是不会压缩带Alp ...

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

    通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...

  3. eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN

    eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...

  4. Fragment用app包还是v4包解析

    转自:http://blog.csdn.net/zc0908/article/details/50721553 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了 ...

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

    app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...

  6. TCP 和 UDP 协议发送数据包的大小 (转载)

    MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小 ...

  7. UDP包的大小与MTU

    在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分 ...

  8. Appium+Python自动化 3 -获取 app 包名和 activity

    方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr n ...

  9. Tcp Udp发送包的大小限制问题

    以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.    这个1500字节被称为链路层的MTU(最大传输单元).    但这并不是指链路层的长度被限制在 ...

随机推荐

  1. ELNEC Programmer

    BeeHive204 Very fast universal 4x 48-pindrive concurrent multiprogramming system with ISP capability ...

  2. Android实例剖析笔记(一)

    摘要:用实例讲解Andriod的开发过程 开卷语 俗话说,“熟读唐诗三百首,不会作诗也会吟”.最近收集了很多Android的示例代码,从这些代码的阅读和实验中学习到很多知识,从而产生写这个系列的打算, ...

  3. python笔记30-docstring注释添加变量

    前言 python里面添加字符串注释非常简单,如何将变量放入 python 的函数注释里面呢? docstring也就是给代码加注释的内容了,python可以给函数,类.方法,模块添加注释内容,注释标 ...

  4. jquery 根据name获取元素的问题

    我要获取name属性为test的元素 但是这个test是赋值给变量的 如var name='test'; 即要获取name属性为变量name的元素 请问jquery怎么写? $("input ...

  5. 环境变量篇getenv putenv setenv

    getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdlib.h> 定义函数 char * getenv(const ...

  6. Retrofit 简介 wiki 文档

    简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...

  7. JavaScript生成GUID的方法

    一.生成GUID的方法一     JScript 代码   复制 function guid() { function S4() { return (((1+Math.random())*0x1000 ...

  8. 检测设备平台,操作系统,方向 Javascript 库:Device.js

    Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <html> 标签添加一些设备平台,操作系统,方向相关的 CSS class,这样就 ...

  9. 【Python】Python 微服务框架 nameko

    nameko: 1.支持服务发现.负载均衡 2.支持依赖自动注入,使用很方便 3.缺点:超时.限速.权限等机制不完善 代码示例:https://github.com/junneyang/nameko- ...

  10. Inside GDALAllRegister之二: 自动加载驱动

    代码    GetGDALDriverManager()->AutoLoadDrivers(); 包含了两部分: 首先获得GDALDriverManager的singleton对象的指针,这点之 ...