减小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设置为
LevelFastest,; 将build setting 中的
Smallest [-Os]Strip设置为
Debug Symbols During CopyYES(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包的大小的更多相关文章
- UE4 减少APK包的大小
本文依据官方文档 Reducing APK Package Size整理而来,不过我会陆续添加自己减少包大小的心得. ETC1 纹理 当使用ETC1打Android包时,注意ETC1是不会压缩带Alp ...
- Android中获取应用程序(包)的大小-----PackageManager的使用(二)
通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...
- 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. ...
- Fragment用app包还是v4包解析
转自:http://blog.csdn.net/zc0908/article/details/50721553 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了 ...
- app包中的fragment和v4包中的fragment的使用的区别
app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...
- TCP 和 UDP 协议发送数据包的大小 (转载)
MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小 ...
- UDP包的大小与MTU
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分 ...
- Appium+Python自动化 3 -获取 app 包名和 activity
方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr n ...
- Tcp Udp发送包的大小限制问题
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在 ...
随机推荐
- ELNEC Programmer
BeeHive204 Very fast universal 4x 48-pindrive concurrent multiprogramming system with ISP capability ...
- Android实例剖析笔记(一)
摘要:用实例讲解Andriod的开发过程 开卷语 俗话说,“熟读唐诗三百首,不会作诗也会吟”.最近收集了很多Android的示例代码,从这些代码的阅读和实验中学习到很多知识,从而产生写这个系列的打算, ...
- python笔记30-docstring注释添加变量
前言 python里面添加字符串注释非常简单,如何将变量放入 python 的函数注释里面呢? docstring也就是给代码加注释的内容了,python可以给函数,类.方法,模块添加注释内容,注释标 ...
- jquery 根据name获取元素的问题
我要获取name属性为test的元素 但是这个test是赋值给变量的 如var name='test'; 即要获取name属性为变量name的元素 请问jquery怎么写? $("input ...
- 环境变量篇getenv putenv setenv
getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdlib.h> 定义函数 char * getenv(const ...
- Retrofit 简介 wiki 文档
简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...
- JavaScript生成GUID的方法
一.生成GUID的方法一 JScript 代码 复制 function guid() { function S4() { return (((1+Math.random())*0x1000 ...
- 检测设备平台,操作系统,方向 Javascript 库:Device.js
Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <html> 标签添加一些设备平台,操作系统,方向相关的 CSS class,这样就 ...
- 【Python】Python 微服务框架 nameko
nameko: 1.支持服务发现.负载均衡 2.支持依赖自动注入,使用很方便 3.缺点:超时.限速.权限等机制不完善 代码示例:https://github.com/junneyang/nameko- ...
- Inside GDALAllRegister之二: 自动加载驱动
代码 GetGDALDriverManager()->AutoLoadDrivers(); 包含了两部分: 首先获得GDALDriverManager的singleton对象的指针,这点之 ...