赞
踩
StrippingLevel是用来减少打包出来的player的体积
如图。第一个是选择Strip Byte Code的包的大小,第一个是选择的Disabled的打出来的包的大小,明显的Strip Byte Code的包体积小于没有进行剥离的包,大概1M。
使用Stripping Level需要注意的是,有可能会导致一些API执行过程中报异常,比如选择Strip Byte Code下,HttpWebRequest就会报异常:System.NotSupportedException,原因是被Strip出去了。
- /// <summary>
- /// 获取下载文件的大小
- /// </summary>
- /// <returns>The length.</returns>
- /// <param name="url">URL.</param>
- public static long GetLength (string url) {
- HttpWebRequest requet = HttpWebRequest.Create(url) as HttpWebRequest;
- requet.Method = "HEAD";
- HttpWebResponse response = requet.GetResponse() as HttpWebResponse;
- UnityEngine.Debug.LogFormat("GetLength StatusCode:{0}", response.StatusCode);
- return response.ContentLength;
- }
- <linker>
- <assembly fullname="mscorlib">
- <type fullname="System.Reflection" preserve="all"/>
- <type fullname="System.Security.Cryptography" preserve="all"/>
- <type fullname="System.Runtime.CompilerServices" preserve="all"/>
- <type fullname="System.Runtime.InteropServices" preserve="all"/>
- <type fullname="System.Diagnostics" preserve="all"/>
- <type fullname="System.Security" preserve="all"/>
- <type fullname="System.Security.Permissions" preserve="all"/>
- </assembly>
- </linker>
参考链接:https://docs.unity3d.com/Manual/iphone-playerSizeOptimization.html
无论从减少安装包大小还是迎合unity64位IL2CPP默认就会打开StrippingLevel功能,通过库剖离来减少DLL的空间大小。
那么问题是我们自定义库使用了一些type,例如xml,或者webclient c#封装的http请求等,如果被任性解剖出去,那么肯定是不允许的。
可以在Assets/下添加link.xml文件来手动排除不被剖离的类。
- <linker>
- <assembly fullname="mscorlib">
- <type fullname="System.Reflection" preserve="all"/>
- <type fullname="System.Security.Cryptography" preserve="all"/>
- <type fullname="System.Runtime.CompilerServices" preserve="all"/>
- <type fullname="System.Runtime.InteropServices" preserve="all"/>
- <type fullname="System.Diagnostics" preserve="all"/>
- <type fullname="System.Security" preserve="all"/>
- <type fullname="System.Security.Permissions" preserve="all"/>
- </assembly>
- </linker>
补充针对排除整个命名空间可以这样加:
- <assembly fullname="JsonDotNet">
- <namespace fullname="Newtonsoft.Json" preserve="all"/>
- </assembly>
关于如何知道什么类或者命名空间你需要添加进去link.xml,只能你使用这个特殊命名空间才知道了。或者你通过xcode debug出错、eclipse debug真机运行时出错来查看那些类空间报错添加进去即可。
整理。原文链接如下
原文:https://blog.csdn.net/lingyanpi/article/details/77484719
原文:http://www.voidcn.com/article/p-htqggtmn-nb.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。