Unity中的StrippingLevel,[Unity3D]使用link.xml来控制strippinglevel减少dll库大小技巧、优化安装包大小_unity strippinglevel-程序员宅基地

StrippingLevel的作用

StrippingLevel是用来减少打包出来的player的体积

如图。第一个是选择Strip Byte Code的包的大小,第一个是选择的Disabled的打出来的包的大小,明显的Strip Byte Code的包体积小于没有进行剥离的包,大概1M。 
这里写图片描述

StrippingLevel选项的副作用

使用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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

利用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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

参考链接: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>

如上我们保持link.xml里面的格式这样既可 assembly其实就是dll库名,我们要排除这个dll库里面的1:整个命名空间;2:某个命名空间里面的某个具体类

补充针对排除整个命名空间可以这样加:

<assembly fullname="JsonDotNet">
               	<namespace fullname="Newtonsoft.Json" preserve="all"/>
</assembly>

关于查看dll库可以用默认的mono编辑器或者vs点进目录文件分类的dll就能看见了。

关于如何知道什么类或者命名空间你需要添加进去link.xml,只能你使用这个特殊命名空间才知道了。或者你通过xcode debug出错、eclipse debug真机运行时出错来查看那些类空间报错添加进去即可。



整理。原文链接如下

原文:https://blog.csdn.net/lingyanpi/article/details/77484719

原文:http://www.voidcn.com/article/p-htqggtmn-nb.html



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuhan61659/article/details/80077285

智能推荐

贴一段POI导出代码----POI使用注意事项更新。20170323更新使用_import org.apache.poi.xssf.streaming.sxssfworkbook-程序员宅基地

文章浏览阅读1.2k次。在某台服务器使用SXSSFWorkbook方式报错:No space left on device。没有排查出问题,增加XSSFWorkbook方式,需要更多内存。【具体原因未找到,磁盘空间足够,为文件分配地址看起来也够,该服务器在做一个工具的测试可能频繁生成小文件,另外top中的vitr选项很高,其他程序不好停,也不方便验证问题,只好作罢】之前使用XSSFWorkbook导出太多或者太大..._import org.apache.poi.xssf.streaming.sxssfworkbook报错

Unity学习小技巧_unity怎么退出play模式-程序员宅基地

文章浏览阅读158次。Unity小技巧Play状态下保存数据Play状态下保存数据Play模式下在Inspector的Transform的右上角,点击齿轮小图标,选择Copy Component Values;退出Play模式在Inspector的Transform的右上角,点击齿轮小图标,选择Paste Component Values;..._unity怎么退出play模式

The APR based Apache Tomcat Native library which allows optimal performance in p_init the apr based apache tomcat native library wh-程序员宅基地

文章浏览阅读9.9k次。2010-7-7 12:53:31 org.apache.catalina.core.AprLifecycleListener init信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:/Program Files/Java/jre6/bi_init the apr based apache tomcat native library which allows optimal performance in production environments was not found on the java.library.path

Latex写科技论文小技巧--修改稿件_latex怎么写修改稿-程序员宅基地

文章浏览阅读5.8k次,点赞16次,收藏53次。Latex修改稿件记录一下在返修稿件时,如何较为快捷地完成 revised version 和 pure version 两个不同版本修改稿件的编辑与生成。1. 定义字体颜色的快捷命令因为在修改论文过程中,由于不同期刊的格式不一样,所涉及的cls文件配置也不尽相同,因此可能会遇到自己采样的修改命令和原始官方模板配置中命令相冲突的情况(在IEEE稿件中,用删除线标记所要删除的内容时,往往导致公..._latex怎么写修改稿

词汇总结·《雅思词汇看这本书就够了》_descent和humble-程序员宅基地

文章浏览阅读7.7k次,点赞5次,收藏11次。近来背了一本单词书《雅思词汇看这本就够了》,不过虽然背过了,但是我不知道真的够不够。我把自己认为比较难的词汇以及按照场景的单词都摘录了下来,大致有全书的百分之八十的单词。这本书最好的一方面是按照场景将词汇分类汇聚,这样你记得的词就不会是孤单的,总会有个伴的。是一本不错的单词书,优点有:(1)单词分6分、7分、8分词汇,并且按照阅读、写作、听力分类。(2)按照场景的分类方法将某一类的_descent和humble

Java实现 LeetCode 274 H指数_java求h指数-程序员宅基地

文章浏览阅读1.1w次。274. H指数给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)”示例:输入: citations = ..._java求h指数

随便推点

【转】java.lang.LinkageError: loader constraint violation: when resolving interface method异常-程序员宅基地

文章浏览阅读1.3k次。严重: Servlet.service() for servlet jsp threw exception java.lang.LinkageError: loader constraint violation: when resolving interface method “javax.servlet.jsp.JspApplicationContext.getExpressionFactory_java.lang.linkageerror: loader constraint violation: when resolving method

vue下的checkbox控制(全选,反选,及统计选中个数)-程序员宅基地

文章浏览阅读2k次。<!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <title></title> <style> body, ul, li { mar..._vue计算多选框选中的总数

get_post 攻防世界 使用burpsuite发送GET、POST请求_burpsuite把get改为post-程序员宅基地

文章浏览阅读1.8w次,点赞9次,收藏65次。题面:解题思路:由于题面中要求使用GET方式提交变量,我们可以直接在URL中直接加入/?a=1,表示a参数为1,得到如下页面。由于目前正在学习burpsuite,所以使用burpsuite来实现一下GET方式提交变量,步骤如下(省略设置代理部分):1、拦截该浏览器GET请求2、点击Action,然后Send to repeater,Repeater中有如下请求3、将请求改为如下,点击Go4、此时得到5、使用POST提交方法和GET类似,将GET改为_burpsuite把get改为post

几款实用的内网穿透工具(附加教程)_支持web访问的内网穿透软件-程序员宅基地

文章浏览阅读452次。前言本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。文章目录前言1、npc1.1 简介1.2 特点1.3 使用方法2、frp2.1 简介2.2 特点2.3 使用方法2.3.1 通过 rdp 访问家里的机器2.3.2. 通过 SSH 访问公司内网机器2.3.3. 通过自定义域名访问部署于内网的 Web 服务2.3.4. 对外提供简单的文件访问服务2.4 常用功能2.4.1 统计面板(Dashboard)2.4.2 加密与压缩2.4.3 TLS2.4.4 代理限速2._支持web访问的内网穿透软件

程序猿装13指南-程序员宅基地

文章浏览阅读61次。一“工欲善其事必先利其器。”1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好。一个用来查资料,一个用来写代码。总之要显得信息量很大,效率很高。2.椅子不一定要舒服,但是一定要可以半躺着。3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善。沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子。4.工具书,orelly的,机...

多级队列调度和多级反馈队列调度算法的实现_多级反馈队列调度算法实验代码-程序员宅基地

文章浏览阅读1w次,点赞18次,收藏186次。多级反馈队列调度算法可以如下原理:1、设有N个队列(Q1,Q2…QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) > Priority(Q2) > … > Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。2、对于优先级最低的队列来_多级反馈队列调度算法实验代码