减包瘦身是个精细活。本文整理了0907版本操作过程,以备日后参考。

经过一番折腾,各位攻城狮的努力,美术设计师的支持,策划爷的理解,UI资源(图集、字体、单局外模型贴图)从45.4MB减少到24.5MB。如下表所示。

下文看图说话。实操中针对同一个资源,可组合应用多个压缩选项。文中所指【图集Atlas】是多个小图片的合集,【Texture】是单张图片,大小指的都是打包前的资源大小。

1、   删除无效的、废弃的资源

理由是显然的,无效的、废弃的资源就应该移除项目工程之外。确认是否废弃资源可以通过以下几个方面考量:

Texture:(1)在prefab中搜索texture.png.meta文件的guid,确认是否被引用;(2)在C#代码中搜索文件名,确认是否被动态指定。

图集Atlas:(1)在prefab中搜索atlas.prefab.meta文件的guid,确认是否被引用。

图集Atlas的单个图片:(1)在prefab中搜索图片文件名,确认是否被直接引用;(2)在C#代码中搜索图片完整或局部文件名,确认是否被动态指定。

2、   取消图集Atlas的正方形限制

工程项目中提供了图集制作工具(HDAtlasMaker),默认是生成正方形图集Atlas。然而此举很浪费,因为若限制图集为正方形,很多时候图集大部分区域是空白。事实上应取消正方形限制。

例子(无损):宽*高:2048*2048(16M) => 1024*2048(8M)

适用场合:去掉正方形限制后可缩减一个尺寸的Atlas。

3、   使用TexturePackerGUI打包,勾选Trim属性去除透明边界

例子(无损):宽*高:512*1024(2M) => 512*512(1M)

适用场合:去掉透明边界后可缩减一个尺寸的Atlas。

使用TexturePackerGUI工具制作图集时,可以预览图集效果。勾选Trim属性的实质是,图集打包时设置Padding属性代替透明边界。

4、   调整Texture初始默认导入设置

Texture的默认导入设置包含Mip Maps。然而Mip Maps是为了物体在视野远近不同而生成不同分辨率的纹理。而UI贴图不需要考虑远近,无需生成小纹理。所以应将Texture导入设置改用Advanced,并取消Generate Mip Maps。

无损:1.3M => 1.0M

适用场合:默认导入设置为Texture的全部UI图片资源。

5、   调整Texture导入设置(Advanced:无Alpha透明通道)

(1)            无损:RGBA 32 Bits(2.3MB) => RGB 24 Bits(1.7MB)

适用场合:无Alpha透明通道的单个图片,如登陆背景、通用背景。

(2)            有损:RGB 24 Bits(1.7MB) => RGB ETC 4Bits(256KB)

此项压缩有损画质,然而压缩效果却很明显。注意ETC需设置资源宽高为2幂次方。实际尺寸非2幂次方时,将以伸缩处理。

适用场合:无Alpha透明通道,且画质要求较低的单个图片,如:结算背景、领奖背景、通用背景、Loading图、3D模型贴图等。

(3)            有损:RGB ETC 4Bits & Max 1024(256KB) => RGB ETC 4Bits & Max 512(64KB)

在(2)的基础上,此处设置宽高最大512,当实际尺寸超过512时将拉伸到实际尺寸,会进一步模糊画质。此处512也可根据实际情况选用256、128、64、32等。

适用场合:同(2),无Alpha透明通道,且画质要求更低的单个图片。

6、   调整Texture导入设置(Advanced:有Alpha透明通道)

(1)            有损:RGBA 32 Bits(1.1MB) => RGBA 16 Bits(0.5MB)

适用场合:有Alpha透明通道,且画质要求较低的单个图片。

(2)            有损:RGBA 16 Bits & Max 1024(0.5MB) => RGBA 16 Bits & Max 512(360KB)

适用场合:同(2),有Alpha透明通道,且画质要求更低的单个图片。画质在(2)的基础上进一步模糊。

7、   Texture从Atlas分离出来

例子(几乎无损):宽高:512*512(1M) => 256*512(0.5M)+ RGBA 16Bits(50KB)

适用场合:分离出尺寸最大的单个图片后,剩下小图片生成的图集Atlas能缩小一个尺寸。

8、   去掉边缘发光

例子(几乎无损):宽高:640*326(0.8M) => 234*126(115KB)

适用场合:边缘发光去掉后对画质不影响或影响甚微的单个图片。

9、   去掉边缘装饰

例子(几乎无损):宽高:585*141(322KB) => 510*79(157KB)

适用场合:边缘装饰去掉后对画质不影响或影响甚微的单个图片。

10、              整合图集Atlas

例子(几乎无损):两个256*512(0.5M*2) => 一个256*512(0.5M)+若干独立小图

适用场合:图集小图片有交集,所属模块类似,且都有剩余空间,放一起刚刚好。

11、              重新裁切透明边框尺寸(Atlas)

例子(几乎无损):512*512(0.5M) => 512*256(256KB)

适用场合: NGUI Font。由于UI Font不能直接Trim,需处理原始资源,切掉透明边框。

12、              重新裁切透明边框尺寸(Texture)

例子(无损):640*499(0.6M) => 640*450(0.5M)

适用场景:有透明边框的Texture。由于Texture不能直接Trim,需处理原始资源,切掉透明边框。

13、              缩小资源原始尺寸(Atlas)

例子(有损):宽*高:1024*2048(8M) => 1024*1024(4M)

适用场景:图集Atlas空白太多,且图集元素能接受小范围的画质模糊。

将小图片缩小80%,重新制作图集,实际应用UISprite时再通过代码恢复125%回到原始尺寸。

14、              缩小资源原始尺寸(Texture)

例子(有损):宽*高:577*1024(1.7M)vs 480*852(1.2M)vs 288*512(432KB)

适用场景:登陆界面背景原始尺寸640*1136。

若直接导入原尺寸,则资源较大(2.1M)。

若按Max 1024导入也不小(1.7M)。

若按Max 512导入则只需432KB,然而此图为重要门面背景,画质不能忍。又因为导入设置不支持512~1024的中间尺寸,唯有手动缩小原始尺寸到合适尺寸和画质,比如此处中间版本【原图66.6% = 480*852(1.2M)】。

15、              调整策划需求

例子(无损):640*630(1.2M) => 32*32(3KB)

适用场景:特定需求,特定应用场景。

项目中的具体需求是,特定时间区间内显示运营Loading图,其他时间显示默认Loading图。这里可以让运营策划调整该特定时间区间,使之包含整个测试期间,那么默认Loading图就无需显示,其导入尺寸可缩小到最小。此处不直接删除默认Loading图是为了避免逻辑出错,且方便日后恢复。

16、              统一背景资源

例子:背景大图。

背景大图等资源应尽量复用。以下曾经出现过的几个背景图差异微小,经商讨后,最终统一用第三个,删除另外两个。

17、              缩减关键图集Atlas尺寸

例子:Common图集Atlas把ABCS品质独立出来,剩下打包更小尺寸的Atlas。关键图集出现概率很高,此处缩减操作是为内存考虑。

18、              分析构建日志

例子:分析C:\Users\[你的用户名]\AppData\Local\Unity\Editor\Editor.log当中的构建日志部分,查看打包资源列表,发现:

(1)NGUI样例图集被打包进去了。

搜索发现并无被直接引用,而是间接引用。为防止出错不直接删除,而是将Max Size调整到很小。

(2)发现了重复图集。

(3)宠物图集占用5.3MB,而不是4.0MB,经检查发现导入设置有误,生成了Mip Maps。类似的大图集有好几个,逐一检查处理。

(4)新手引导和头像集合这两个图集很大,进一步将重点优化。

Unity3D_NGUI_安卓APK安装包瘦身实践相关推荐

  1. 京东商城iOS客户端安装包瘦身实践

    一.概述 随着业务的快速增加,商城app的大小也在迅速增加,一度超过了300M.安装包大小的不断增加对app下载成本,推广效率产生了比较大的影响.从2018年9月份我们对商城app开始了为期二期的专项 ...

  2. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

  3. iOS App 安装包瘦身指南

    以下列出了安装包瘦身的无脑执行流程,其中"奇技淫巧"部分为选做题 资源优化 删除无用图片 使用LSUnusedResources查找无用图片 删除重复资源 压缩图片资源 使用Ima ...

  4. 如何将PPT转换成安卓APK安装包

       尽管在安卓系统上有像Office Suite.Documents To Go.金山WPS Office这些强大的办公软件.但在很多时候某些原因下我们还是有想把PPT演示稿转成APK安装包的需求. ...

  5. iOS安装包瘦身的那些事儿

    在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100 ...

  6. 贝壳找房APP安装包瘦身

    一.背景 在满足产品.UI要求的前提下,尽量减少安装包体积. 以customer插件为例: 插件大小为5MB, 其中1MB是dex,而bkbase占了dex的580KB: 3.1MB是图片. 减少re ...

  7. 安卓apk安装包腾讯云-乐固加固以及重新签名

    安卓apk加固重签三部曲: 安卓打包生成apk文件: apk文件进行加固: 加固方式本文通过腾讯云进行加固,登录腾讯云,搜索:移动应用安全进行apk加固. 加固后重签 具备java环境,然后运行以下命 ...

  8. android 批量安装apk,如何一键批量安装APP应用apk安装包?

    在安卓手机应用市场中,有的用户可能会遇到这样的问题,当我们下载了一堆安卓apk安装包,可是还需要我们一个个的点开去安装,这样非常麻烦,还浪费了用户不少时间.那有用户要问了,如何才能实现一键批量安装ap ...

  9. iOS App 瘦身实践总结

    文章最后有我的 12 条小总结. 原文始发地址:我的 GitHub 写在前面 最近公司需求不多,正好研究一下 App 瘦身的办法,写了点小总结. 如果你不知道下面几个问题,不妨可以看看文章. 使用 . ...

最新文章

  1. 《秋暮登北楼》王武陵
  2. java设计模式之设计原则①开闭原则
  3. kubeadm部署k8s_用 kubeadm 部署生产级 k8s 集群
  4. 数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission
  5. 【HDU - 5878】I Count Two Three(打表)
  6. 怎么查询mysql的语法_mysql查询语法
  7. 分享一个数据产品的PRD
  8. 第6章系统数据文件和信息总结
  9. tokengetall php,token_get_all Split given source into PHP tokens php函数分享
  10. java的显示图片的控件_调用java在图像控件中显示网络图片
  11. 用pe修复服务器系统,如何用PE修复系统
  12. unity 实验演示 教程_Unity的演示团队– Unity最出色的视觉效果背后的创造者
  13. 为抖音而生的多闪,如何获取抖音的用户数据?
  14. 苹果授权登录,后端校验(Sign in with Apple)
  15. 一、HTML基础(笔记)
  16. 顾客价值理论(转载)
  17. python连接wss走自己的代理
  18. 基于CIM的馈线建模和应用(论文学习)
  19. java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String,toArray向下转型失败
  20. 【转】Java程序性能优化

热门文章

  1. 你有一笔新订单 语音_坐电梯动口不动手,浦东企业新技术实现乘坐电梯“零接触”!...
  2. ustc linux 网络通,USTC 网络通脚本
  3. idea安装lua插件_KONG网关 — 插件开发
  4. java与html5的区别_HTML4和HTML5的区别
  5. yum源查看mysql_获取MySQL各版本yum源 并安装
  6. android 自定义菜单开发,Android开发学习笔记:浅谈3大类菜单
  7. java txt 写入_JAVA 写入TXT文件
  8. 给一维数组输入6个整数,假设为5,7,4,8,9,1
  9. android input鼠标坐标,android - 如何在EditText中设置光标位置?
  10. C语言20790内所有因子的和,长春市水污染控制指标的因子和聚类分析.pdf