如何从我的构建中排除不必要的 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 在构建中包含了一些已删除的库。
但是,如果我们无法统一找到那些元素怎么办?这种方法奏效了。
步骤:
删除 Assembly-CSharp 和 Assembly-CSharp-firstpass 中的引用
按照路径将那些删除的 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 .....
测试你的游戏,我真的不知道这种做法有什么问题,我的意思是,我真的不知道这种做法有什么问题:D
将 _old
文件重命名为下一个项目等的原始名称。
还有另一种方法:
第 1 步: 右键单击 .apk 文件并使用 WinRAR/ZIP
打开它
第二步:进入assets文件夹,然后进入bin\Data\Managed
第 3 步: 在那里你会找到所有的 DLL,只需删除你想要的(不是那么多 :D)
Unity 提供了一项功能,可以为您去除未使用的代码,从而去除 dll。
按照以下步骤操作:
- Select菜单编辑->项目设置.
- 在项目设置对话框中,selectPlayer.
- 在播放器中 select 其他设置.
- 向下滚动到 优化 部分。
- 更改下拉列表中的选项 Managed Striping Level。
此功能有很多选项,您甚至可以 link 使用 link.xml 文件中的 Assets[=] 特定程序集36=] 文件夹。
我强烈建议阅读 Unity 官方文档 Managed Code Stripping 以获取更多信息。
就是这样。希望对你有帮助。
我正在尝试优化游戏的文件大小,尤其是 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 在构建中包含了一些已删除的库。
但是,如果我们无法统一找到那些元素怎么办?这种方法奏效了。
步骤:
删除 Assembly-CSharp 和 Assembly-CSharp-firstpass 中的引用
按照路径将那些删除的 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 .....
测试你的游戏,我真的不知道这种做法有什么问题,我的意思是,我真的不知道这种做法有什么问题:D
将
_old
文件重命名为下一个项目等的原始名称。
还有另一种方法:
第 1 步: 右键单击 .apk 文件并使用 WinRAR/ZIP
打开它第二步:进入assets文件夹,然后进入bin\Data\Managed
第 3 步: 在那里你会找到所有的 DLL,只需删除你想要的(不是那么多 :D)
Unity 提供了一项功能,可以为您去除未使用的代码,从而去除 dll。
按照以下步骤操作:
- Select菜单编辑->项目设置.
- 在项目设置对话框中,selectPlayer.
- 在播放器中 select 其他设置.
- 向下滚动到 优化 部分。
- 更改下拉列表中的选项 Managed Striping Level。
此功能有很多选项,您甚至可以 link 使用 link.xml 文件中的 Assets[=] 特定程序集36=] 文件夹。
我强烈建议阅读 Unity 官方文档 Managed Code Stripping 以获取更多信息。
就是这样。希望对你有帮助。