There are many ways to reduce the build size. After going through all the stages, I was able to reduce the size of the game on Android from 150 to 50 MB.
Build Configuration and For Distribution
The first you should set the "Build Configuration" to "Shipping" and enable "For distribution" as in the following screenshot:
Excluding and compresing assets
You should exclude unused assets and compress the needed ones in this way:
Use of sharing material
It is also useful to enable sharing material shader code and use of shared material native libraries, which will slightly reduce the size.
Disabling Movable Point Lights
If you are not using moving point lights, set "Max Movable Point Lights" to 0. This will slightly reduce the size of the shaders and hence the size of the assembly.
Removing unused packaged assets
You can also delete unnecessary assets that are packaged with your game but never used. First, you need to understand which assets you need to exclude during assembly. To do this, open the "main.obb.png" file as an archive located in the "assets" folder inside your game's pak file. To unpack the .pak file, open the console in the "Engine/Binaries/Win64" folder and write the following command:
UnrealPak.exe [PathToPakFile].pak -extract [PathToExtractPakFile]
After you have decided which assets and folders are not needed, you need to open (or create) the PakBlacklist-Shipping.txt file in the "[ProjectName]/Build/Android" folder, and specify the folders and files that need to be excluded when building the project. In my case, I got the following list (everyone will have their own):
../../../Engine/Plugins/Blendables/ ../../../Engine/Plugins/Editor/ ../../../Engine/Plugins/Enterprise/ ../../../HopDash/AssetRegistry.bin ../../../Engine/Content/ArtTools/ ../../../Engine/Content/EngineFonts/Faces/ ../../../Engine/Content/Internationalization/icudt64l/coll/ ../../../Engine/Content/Internationalization/icudt64l/translit/ ../../../Engine/Content/Internationalization/icudt64l/lang/ ../../../Engine/Content/Internationalization/icudt64l/unit/ ../../../Engine/Content/Internationalization/icudt64l/zone/ ../../../Engine/Content/Internationalization/icudt64l/region/ ../../../Engine/Content/Localization/ ../../../Engine/Content/Maps/ ../../../Engine/Content/MobileResources/ ../../../Engine/Content/SlateDebug/ ../../../Engine/Content/Tutorial/ ../../../Engine/Content/Slate/Fonts/ ../../../Engine/Content/Slate/Testing/ ../../../Engine/Content/Slate/Tutorials/ ../../../Engine/Content/Slate/Icons/ ../../../Engine/Content/Slate/CrashTracker/ ../../../Engine/Content/Slate/Old/ ../../../Engine/Content/Slate/Docking/ ../../../Engine/Content/Slate/Common/ ../../../Engine/Plugins/Runtime/LeapMotionController/ ../../../Engine/Plugins/Editor/SpeedTreeImporter/Content/SpeedTree9/game_wind_noise.ubulk
Disabling engine modules
If you are sure that your game and all assets are as compressed as possible, but still not satisfied with the build size, there is another option - to rebuild the engine with disabling unnecessary but heavy modules that are also included when the project is packaged.
To do this, download the engine sources, generate the necessary files for Visual Studio and open the UE4.sln file.
Then open the UE4Game.target.cs file in Visual Studio and enter the following values (some parameters may not be relevant for your project, so use it if necessary):
bCompileAPEX = false; bCompileICU = false; bBuildDeveloperTools = true; bCompileRecast = false; bCompileSpeedTree = false; bCompileForSize = true; bCompileCEF3 = false; bCompileFreeType = false; bIWYU = true; bUsesSlate = false; bCompileChaos = false; bUseChaos = false; bUseChaosChecked = false; bUseChaosMemoryTracking = false; bCompilePhysX = false; bCompileNvCloth = false; bCompileRecast = false; bCompileNavmeshSegmentLinks = false; bCompileNavmeshClusterLinks = false; bUseDebugLiveCodingConsole = false; bUseLoggingInShipping = false; bLoggingToMemoryEnabled = false; bUseLauncherChecks = false; bEnforceIWYU = true;
Then just rebuild the engine and that's all.