纳金网

标题: Unity3d 发布到ios平台 项目工程文件大小优化 [打印本页]

作者: 艾西格亚    时间: 2012-10-24 18:30
标题: Unity3d 发布到ios平台 项目工程文件大小优化
本文由9Ria ( liuxiaoni )原创编译



降低的播放机大小主要有两个途径:一是更改Xcode内的Active Build Configuration,二是更改Unity的Stripping级别。



在发布模式下生成



你可以在 Xcode的Active Build Configuration下拉菜单中的调试和发布选项之间进行选择。根据自身游戏的大小,选择发布模式生成的player会比选择调试模式减少2-3MB的大小。



在发布模式下,player会去掉任何的调试信息进行生成,所以如果你的游戏崩溃或有其他问题,将是没有可用的、可输出的堆栈跟踪信息。这适合发布已完成的游戏,但你更应该在开发过程中使用调试模式。



iOS Stripping级别(Advanced License feature)



尺寸优化工作可通过以下几种方式被剥离机制激活:



Strip assemblies级别:通过分析脚本的字节码,来将这些脚本没有引用的类和方法从 Dll 中删除,从而使其不进入 AOT编译阶段。这种优化减少了主要的二进制以及相应 Dll的大小。在不使用反射的条件下,这种优化是安全的。



Strip ByteCode级别:任何.Net Dll(存储数据文件夹中)将从元数据中被剥离出来。这是可能的,因为所有的代码都已经AOT阶段被预编译并链接到主要的二进制文件中



使用micro mscorlib级别:使用一种特殊的、较小的mscorlib版本。某些部件将从此库中被移除,例如,安全,Reflection.Emit,远程处理,非公历日历等组件都将被删除。此外,内部组件之间的相互依赖性也会被降至最低。该种优化减少了主要的二进制以及mscorlib.dll的大小,但不能与一些系统和 System.Xml程序集类兼容。因此,小心地使用它。



这些级别是累积的,第3级优化隐式地包含级别 2和级别1,而第 2级优化则包含级别1。



Micro mscorlib是核心库的最低级版本。只有这些项目是目前Unity中的Mono运行库所需要的。使用micro mscorlib的最佳做法是不使用任何你的应用程序所不需要的.Net的类或其他功能。GUID就是一个你可以忽略的例子,她可以轻松地被自定义的伪 Guid所替代,这样做将产生更好的性能和更小的应用程序。



如何处理使用反射机制的Strip



Strip程度取决于静态代码的分析,但有时侯,这种分析并不是很有效,特别是针对使用类似反射一样的动态功能的代码。在这种情况下,有必要给出一些提示来指出哪些类是不应该被触动的。Unity支持对于每个项目都给出一个自定义Strip黑名单。使用黑名单是创建 link.xml 文件并将它放入Assets文件夹的一个简单方法。以下是一个的 link.xml文件的示例。其中有保留标记的类将不会被Strip:



有时侯,我们很难确定哪些类会被进行错误的Strip。通常你可以通过在模拟器上运行已被Strip的应用程序和检查 Xcode 控制台的错误消息来获取有用的信息。



简单的清单,使你的发布版本尽可能地小



1.最小化你的资源(assets):启用 PVRTC压缩纹理,并尽可能低降低其分辨率。此外,尽量缩减无损压缩的音频的个数。这里还有一些额外的缩减文件大小的提示。



2.设置iOSStrip级别为Use micro mscorlib。



3.设置脚本调用优化级别为Fast but no exceptions。



4.不要让你的任何代码与System.dll或 System.Xml.dll有关联,因为这些库并不兼容micro mscorlib。



5.去掉不必要的代码关联。



6.将API兼容性级别设置为.Net 2.0子集。请注意.Net 2.0子集与其他库与兼容性比较有限。



7.设置目标平台为armv6 (OpenGL ES1.1)。



8.不要使用 JS阵列。



9.避免泛型容器与结构等类型相结合。



我能用Unity创造出低于 20 mb的应用程序吗?



当然可以。如果所有优化被都关掉,一个空项目在AppStore中大小大致为 13 MB左右。这在游戏中为你提供了大约7 MB的压缩资源预算。如果你拥有先进的许可证(并因此获得Strip选项),那么只含有主相机的空场景在AppStore中可压缩到大约 6 MB (zipped和 DRM连接),这样,你就可以有大约 14 MB可用空间用于压缩资源。



为什么我的应用程序发布到AppStore后大小增加了?



当他们发布你的应用程序时,苹果首先对二进制文件进行加密,然后将它通过 zip压缩。最常见的,苹果 DRM会使二进制文件大小增加大约 4 MB左右。作为一般规则,你应预见到的文件最终大小大致为所有文件(除了可执行文件)的 zip压缩大小,再加上未压缩的可执行文件的大小。

作者: 王者再临    时间: 2012-10-24 22:49
很有帮助的文章,收藏起来
作者: .    时间: 2012-10-25 21:04
顶起
作者: 狂风大尉    时间: 2013-2-28 23:31
希望在新的一年里专心的学习好Unity!

作者: 齐天大圣    时间: 2013-3-1 09:52
不错, 标记一个, 马上就会用到的.

作者: dzspb    时间: 2013-3-2 16:47
很实用的东西,谢谢啊!
作者: radio    时间: 2013-3-3 10:21
差不多就要用上了,看看
作者: Sora    时间: 2013-3-20 19:20
原來如此 受教了 !!!!!

作者: texfill    时间: 2013-3-21 11:45
这个不错很多类型的游戏均需要该效果

作者: 王者再临    时间: 2013-3-21 19:52
希望有安卓方面的优化分享

作者: likunhan    时间: 2013-11-9 15:25
很有用的文章,表示感谢!
作者: joydance    时间: 2013-11-9 15:51
很实用的东西




欢迎光临 纳金网 (http://www.narkii.com/club/) Powered by Discuz! X2.5