如何从我的构建中排除不必要的 DLL?

How can I exclude unnecessary DLLs from my build?

我正在尝试优化游戏的文件大小,尤其是 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 应该已过时。我也不使用 Networking 或 Analytics,所以这些也可以删除。不确定 Mono.Security.dll 的作用或 UnityEngine.UI.dll 是否真的有必要。 那么,知道了这一点,我怎样才能摆脱这些看似不必要的 DLL?

似乎没有直接的方法来做到这一点。我只是尝试删除测试项目中的一些 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 文件重命名为下一个项目等的原始名称。

还有另一种方法:

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

打开它

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

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

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

按照以下步骤操作:

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

此功能有很多选项,您甚至可以 link 使用 link.xml 文件中的 Assets[=] 特定程序集36=] 文件夹。

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

就是这样。希望对你有帮助。