找回密码
 注册帐号

扫一扫,访问微社区

优化内置 ios 播放器的大小

2015-1-8 17:44| 发布者: 杨炎| 查看: 1788| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 优化内置 ios 播放器的大小减少播放器大小的两种主要方式是更改 xcode 中的活动生成配置 (active build configuration)以及更改 unity 的剥离级别 (stripping level)在发布模式下构建您可以在 xcode活动生成配置 (ac ...

优化内置 ios 播放器的大小

减少播放器大小的两种主要方式是更改 xcode 中的活动生成配置 (active build configuration)以及更改 unity 的剥离级别 (stripping level)

发布模式下构建

您可以在 xcode活动生成配置 (active build configuration)下拉菜单中选择调试 (debug)发布 (release)之间的一项操作。根据游戏自身的大小,选择发布 (release)模式生成的播放器将比调试 (debug)小 2-3mb。

活动生成配置 (active build configuration) 下拉菜单

在发布 (release) 模式下,播放器会去掉任何的调试信息进行构建,所以如果您的游戏崩溃或有其他问题,将没有可用的、可输出的堆栈跟踪信息。这适合部署已完成的游戏,但在开发期间您可能更希望使用调试模式。

ios 剥离级别 (stripping level)(高级版许可功能)

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

剥离程序集级别:通过分析脚本的字节码,来将这些脚本没有引用的类和类函数从 dll 中删除,从而使其不进入 aot 编译阶段。这种优化减少了主要的二进制以及对应 dll 的大小。在不使用反射的条件下,这种优化安全可靠。

剥离字节码级别:任何 .net dll(储存在数据 (data) 文件夹中)仅从元数据中被剥离出来。这种可能性主要是因为所有的代码都已经在 aot 阶段被预编译并链接到主要的二进制文件中。

使用 micro mscorlib级别:使用一种特殊的、较小的 mscorlib 版本。某些组件将从库中删除,例如,安全、reflection.emit、远程处理、非公历日历等。同时,内部组件之间的相互依赖性也会降至最低。这项优化降低了主要的二进制和 mscorlib.dll 尺寸,但是,它与某些系统及 system.xml 程序集类不兼容,所以必须谨慎使用。

这些级别可以累积,因此,级别 3 优化隐式地包含了级别 2 和级别 1,级别 2 优化包含级别 1。

请注意:micro mscorlib是核心库的最低级版本,它只保留了 unity mono 运行时间必要的项目。使用 micro mscorlib 的最佳做法是不要使用应用程序不需要的任何 .net 类或其他功能。guid 就是一个应该省略的例子;它们可以轻松地被自定义的伪 guid 所替代,这样做将产生更好的性能和更小的应用程序。

提示

如何使用反射处理剥离

剥离很大程度上取决于静态代码分析,如果使用反射等动态功能,有时候将不能有效使用剥离。在这些情况下,有必要给出一些提示指出哪些类是不应该触动的。unity 为每个工程都建立了自定义剥离文件夹黑名单。使用黑名单是创建link.xml文件并将它放入资源 (assets)文件夹的一个简单方法。以下是link.xml文件的内容示例。标记为预留的类将不受剥离影响:-

请注意:有时候可能难以确定哪些类会被进行错误的剥离,而应用程序可能需要这些类。您可以在模拟器上运行剥离应用程序,检查 xcode 控制台中的错误信息,从而获取有用的信息。

下面是如何让发布版本尽可能的小的简单清单。

最小化资源:启用 pvrtc 纹理压缩,尽可能降低其分辨率。同时,尽量减少未压缩的音频数量。点击此处,查看更多减少文件大小的提示。

设置 ios 剥离级别为使用 micro mscorlib

设置脚本调用优化级别为快速但不支持异常 (fast but no exceptions)

切勿让代码与 system.dll 或 system.xml.dll 产生任何关联,这些库与 micro mscorlib 兼容。

删除不必要的代码依赖性。

设置 api 兼容级别为.net 2.0 子集。请注意,.net 2.0 子集与其他库的兼容性非常有限。

设置目标平台 (target platform) 为armv6 (opengl es1.1)

切勿使用 js 数组。

避免泛型容器与结构等数值类型相结合。

我可以使用 unity 构建小于 20mb 的应用程序吗?

可以,如果所有大小优化被都关掉,一个空项目在 appstore 中大小大致为 13 mb左右。这为游戏提供了大约 7mb 的压缩资源预算。如果您拥有高级许可证(并因此可以访问剥离选项),那么只含有主相机的空场景在 appstore 中可压缩到大约 6 mb(zipped 和 drm 连接),这样,您就可以有大约 14 mb 的可用空间用于压缩资源。

为什么我的应用程序发布到 appstore 之后,大小有所增加?

在发布您的应用程序时,apple 将首先加密二进制文件,然后通过 zip 压缩。大部分情况下,apple 的 drm 将增加约 4mb 的二进制大小。一般说来,您应该预计文件最终大小约等于所有文件(可执行文件除外)的 zip 压缩存档,再加上未压缩的可执行文件的大小。

相关阅读

文章点评
相关文章
Unity大学【第二期】!