在游戏项目中,当我们在打包各个平台时,总希望每个平台的包能够最小化便于分发,而且上架某些平台还有明确的大小要求。对于UE而言,它包含了巨量代码以及大量的插件,Build阶段还将生成反射的胶水代码,在编译时产生了大量的代码段。以Android平台为例,将导致libUE4.so的大小急剧增长,对于包体和运行时内存都造成了压力。再加上一些引擎必要和额外带入的资源也能占据上百M,空APK的大小很容易达到数百M的规模!不仅仅为了符合上架平台的要求,从包体和内存优化的角度,也有必要对UE包的大小进行裁剪。
包大小分布
在APK内,游戏相关的空间占比较大的部分,为下面几项:
-
可执行代码(so -
lib/arm64-v8a
) -
main.obb.png
(游戏内资源Pak、DirectoriesToAlwaysStageAsNonUFS
的部分) -
第三方组件拷贝进APK内的文件
需要分别针对上面列出的三种情况,分别制定具体的优化策略。
压缩NativeLibs
当APK安装时,对于NativeLibs有两种处理方式:
-
安装时解压so到应用的内部存储目录(
/data/app/<package_name>/lib/
) -
直接从APK文件中加载so,可以加快安装过程
而它就引出了一个问题: