引言
之前学习 UE4 的时候,常常使用提供的模板来创建项目,结果发现打包成 apk 后包体体积达到几百 M 甚至上 G。而在 Unity 最新的 2019 版本,一个空的 Unity 工程打出的 android 包,包体的大小约为 18 M。那么, UE4 打出的 android 最小包大约为多大呢?
创建一个干净的工程
1.设置内容包
在创建项目时可以选择是否包含初学者内容包,正式项目为了时项目尽量干净,应选择 不带初学者内容包
2.设置目标硬件和图像级别
目标硬件和图像级别可以在创建项目时设置,也可在项目创建后进行设置
-
默认的目标硬件为
桌面/主机
, 移动设备应用开发应选择移动设备/平板电脑
-
图像级别默认为最高品质,移动端改为
可缩放3D或2D
3.设置启动地图
直接打包创建的空项目,在手机上运行会出现场景内容为黑色,只显示左右两个模拟手柄。这是因为没有设置项目的 游戏默认地图
,参考 变更默认关卡 ,设置步骤如下:
-
设置(Settings) — 项目设置(Porject Settings) — 地图和模式 (Maps & Modes)
-
Default Maps ,此处有两个设置项,编辑器开始地图(Editor Startup Map)和游戏默认地图(Game Default Map),这里需要设置的是
游戏默认地图
可以选择自定义的地图,假如只是测试,可以直接将当前 UE4 编辑器默认打开的地图保存下来(直接在编辑器默认场景下 Ctrl+S 进行保存),命名为 TestMap
假如想要测试最小包,那最好新建一个空 Map,保存到 Content 中然后将其设置为 Game Defualt Map。
打包设置
打包项目设置
-
平台 —> Android SDK 完成各项环境配置
-
打开 平台 —> Android 设置页面,点击
接受SDK证书
,填写包名,取消Enable Gradle instead of Ant
勾选,勾选Package game data inside .apk?
打包时可以把数据从 apk 中分离出来,也可直接打进 apk 中,通过
Package game data inside .apk?
选项来控制。
Android 打包结果
从兼容性考虑,这里以 Android ETC1 的方式来测试打包结果,具体测试数据如下:
-
使用编辑器默认打开地图 Template_Default 作为 Game Default Map 打包,包体大小约为 89.1 MB
-
使用新建的空 Map 作为 Game Default Map 打包,包体大小约为 87 MB
包体瘦身
上面所述,都是将游戏数据包(obb 包)打进 apk 中得到的测试结果。参考官方给的包体瘦身建议 Reducing Packaged Game Size ,对应空白工程包体体积影响较大的包体瘦身优化,有如下两种方式:
-
创建压缩烘焙包
在项目设置中的打包设置项:设置 — 项目 — 正在打包(Packing) — Packaging 中勾选
创建压缩烘焙包
(create compressed cooked packages)包体大约 68.5 MB(假如使用空 Map 打包,大小为 68 MB),可以查看包内文件,发现
main.obb.png
文件体积从 44 MB 减小为 22 MB。
-
apk 中抽离 obb 文件
解压打出的 apk 包,可以看到
assets
目录下有一个main.obb.png
文件,这是项目所有数据和资源文件的合包。打包的时候,其实可以通过设置该数据包是否打进 apk 中,即:设置 — Android — APK Packaging
中取消Package game data inside .apk?
,即可将 obb 文件从 apk 中剥离。在打包目录下会生成一个 apk 和一个main.1.包名.obb
两个文件。这样子原本的 apk 可以达到 46 MB 左右的大小,但在实际项目中通常不这么做,因为这样的方式安装了游戏 apk 后,需要把 obb 文件复制到应用目录下才能正常启动游戏。
小结
综上所述,使用 UE4 打包 android 平台可运行的最小包体大小约为 68 MB,考虑剥离 obb 文件可以达到 46 MB 左右。这样的包体大小,对于小型游戏,显然不太合适。
当然,这里我并未尝试通过禁用未用到的插件来测试包体大小