Search code examples
optimizationdllunity-game-enginegame-engine

How can I exclude unnecessary DLLs from my build?


I'm trying to optimize the file size of my game, in particular the android build. I have optimized the assets and set the build stripping level to Use micro mscorlib. However, looking at the Editor.log reveals the DLLs still take up more than 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 seemed a bit much, so I looked at which DLLs are actually added. I found this:

 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

This looks like it can be improved quite a bit. I don't use UnitScript, so Assembly-UnityScript-firstpass.dll and Assembly-UnityScript.dll should be obsolete. Neither do I use Networking or Analytics, so these could be removed as well. Not sure what Mono.Security.dll does or whether UnityEngine.UI.dll is really necessarry. So, knowing this, how can I get rid of these seemingly unnecessary DLLs?


Solution

  • Seems like there is not a direct way to do that. I just tried removing some dlls references on a test project and wasn't enough. Unity was including some of the removed libraries in the build anyway.

    But, what if we make impossible to unity to find those elements? That approach worked.


    Steps:

    1. Remove references in Assembly-CSharp and Assembly-CSharp-firstpass

      Edit references in project

      References list

    2. Follow the path and rename those removed dlls to something else, like filename.dd_old:

      Follow the path of those dlls

      Rename those dlls

    3.- Compile, Build, and see the results :)

    Before:

    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 .....
    

    After:

    Mono dependencies included in the build
    Dependency assembly .....
    Dependency assembly - UnityEngine.UI.dll
    Dependency assembly - UnityEngine.SpatialTracking.dll
    Dependency assembly .....
    
    1. Test your game, I really don't know what can be wrong with this practice, and I mean, I really don't know what cannot go wrong with this practice :D

    2. Rename the _old files to their original names for the next project, etc..