【问题标题】:How can I exclude unnecessary DLLs from my build?如何从我的构建中排除不必要的 DLL?
【发布时间】:2017-11-12 10:48:04
【问题描述】:

我正在尝试优化我的游戏的文件大小,尤其是 android 版本。我已经优化了资产并将构建剥离级别设置为使用 micro mscorlib。但是,查看 Editor.log 会发现 DLL 仍占 50% 以上:

 Textures      2.7 mb     35.7% 
 Meshes        80.5 kb     1.0% 
 Animations    0.0 kb     0.0% 
 Sounds        0.8 kb     0.0% 
 Shaders       98.2 kb     1.3% 
 Other Assets  177.9 kb     2.3% 
 Levels        110.0 kb     1.4% 
 Scripts       447.4 kb     5.8% 
 Included DLLs 3.9 mb     52.2% 
 File headers  26.2 kb     0.3% 
 Complete size 7.5 mb     100.0% 

3.9mb 似乎有点多,所以我查看了实际添加了哪些 DLL。我发现了这个:

 Mono dependencies included in the build
 Dependency assembly - Mono.Security.dll
 Dependency assembly - System.Core.dll
 Dependency assembly - System.dll
 Dependency assembly - mscorlib.dll
 Dependency assembly - UnityEngine.UI.dll
 Dependency assembly - UnityEngine.Networking.dll
 Dependency assembly - UnityEngine.Analytics.dll
 Dependency assembly - Assembly-CSharp.dll
 Dependency assembly - Assembly-UnityScript-firstpass.dll
 Dependency assembly - Assembly-UnityScript.dll

这看起来可以改进很多。我不使用 UnitScript,因此 Assembly-UnityScript-firstpass.dll 和 Assembly-UnityScript.dll 应该已过时。我也不使用网络或分析,所以这些也可以删除。不确定 Mono.Security.dll 是做什么的,或者 UnityEngine.UI.dll 是否真的需要。 那么,知道了这一点,我该如何摆脱这些看似不必要的 DLL 呢?

【问题讨论】:

  • 哇!!我在 emtpy-sample 场景项目中获得了 include.dll 13mb。

标签: unity3d optimization dll unity5 game-engine


【解决方案1】:

还有另一种方法:

第 1 步: 右键单击​​ .apk 文件并使用 WinRAR/ZIP 打开它

第二步:进入assets文件夹,然后进入bin\Data\Managed

第 3 步: 在那里你会找到所有的 DLL,只需删除你想要的(不是那么多 :D)

【讨论】:

    【解决方案2】:

    似乎没有直接的方法可以做到这一点。我只是尝试在测试项目中删除一些 dll 引用,但还不够。无论如何,Unity 在构建中包含了一些已删除的库。

    但是,如果我们无法统一找到这些元素怎么办?这种方法奏效了。


    脚步:
    1. 删除 Assembly-CSharp 和 Assembly-CSharp-firstpass 中的引用

    2. 按照路径并将那些已删除的 dll 重命名为其他名称,例如 filename.dd_old

    3.- 编译、构建并查看结果 :)

    之前:

    Mono dependencies included in the build
    Dependency assembly .....
    Dependency assembly - UnityEngine.UI.dll
    Dependency assembly - UnityEngine.Networking.dll
    Dependency assembly - UnityEngine.SpatialTracking.dll
    Dependency assembly .....
    

    之后:

    Mono dependencies included in the build
    Dependency assembly .....
    Dependency assembly - UnityEngine.UI.dll
    Dependency assembly - UnityEngine.SpatialTracking.dll
    Dependency assembly .....
    
    1. 测试你的游戏,我真的不知道这种做法有什么问题,我的意思是,我真的不知道这种做法有什么问题 :D

    2. _old 文件重命名为下一个项目的原始名称等。

    【讨论】:

    • 很好的答案。还有另一种方法:如果你构建了一个 apk,你用 WinRAR 打开它并转到“\assets\bin\Data\Managed”。在那里你会找到所有的 DLLS。我刚刚删除了它们,和你一样,我真的不知道这种做法有什么问题。
    • 你也应该写下这个答案!我认为这比我发布的更容易!
    【解决方案3】:

    Unity 提供了一项功能,可以为您去除未使用的代码,从而去除 dll。

    按照以下步骤操作:

    1. 选择菜单编辑->项目设置
    2. 项目设置对话框中,选择播放器
    3. 播放器中选择其他设置
    4. 向下滚动到优化部分。
    5. 在下拉列表中更改选项Managed Striping Level

    此功能有许多选项,您甚至可以使用 Assets 文件夹中的 link.xml 文件链接特定程序集。

    我强烈建议阅读 Unity 官方文档Managed Code Stripping 以获取更多信息。

    就是这样。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多