UE4 缩小安卓打包体积(翻译自官方文档)

原文链接:https://docs.unrealengine.com/en-us/Platforms/Android/ReducingAPKSize

减少APK包大小

无论您的UE4项目针对哪种类型的Android设备,将Android应用程序包(APK)的大小减小到Google Play商店的50MB限制都可能具有挑战性。在以下指南中,我们将介绍您可以采取的步骤,以帮助尽可能减少项目的最终APK包大小,只使用UE4编辑器中提供给您的工具。

ETC1纹理考虑因素

在使用ETC1 Texture格式打包Android项目时,您需要注意ETC1不会压缩其中嵌入了Alpha信息的纹理,而是将它们视为完全未压缩的纹理。虽然这不会对项目的运行时性能产生太大影响,但它会增加项目APK的大小。如果您的项目确实需要使用Alpha的纹理,最好使用两个单独的纹理; 一个用于漫反射,一个用于Alpha,而不是单个纹理,其中嵌入了Alpha。这将确保在项目烘焙和打包时压缩您的纹理。

平台不可知技术

除了上面列出的Android特定方法之外,还有很多方法可以减少任何打包游戏的大小(无论目标平台如何)。

创建一个新的空项目

当您第一次开始使用基于Android的移动项目时,您可能会想要使用现有项目作为基础来工作或创建启用了Starter Content的新项目。不要这样做,而是创建一个全新的,空的 基于C ++或蓝图的项目,然后使用迁移工具来引入您想要使用的内容。这样,您可以确保项目中的唯一内容是需要的内容。

压缩cooked内容

减少APK包大小的最简单,最快捷的方法是告诉UE4在打包过程中压缩APK包。要打开包压缩,您需要在UE4编辑器中执行以下操作。

  1. 首先,转到主工具栏并选择编辑选项,然后选择项目设置,打开项目的设置。

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 在“项目”部分下,单击“ Packaging 部分以显示项目打包方式。

    UE4 缩小安卓打包体积(翻译自官方文档)

     

  3. 单击“打包”设置底部的“ Advanced Project 以显示“ Advanced Project Settings

    UE4 缩小安卓打包体积(翻译自官方文档)

     

  4. 查找标记为Create compressed cooked packages的选项并启用它(如果尚未启用)。

    UE4 缩小安卓打包体积(翻译自官方文档)

     

如果您未使用“创建压缩cooked包”复选标记框打包游戏,则在项目重新打包并启用时,应该会看到大小差异。实际上,当启用Create compressed cooked packages时,某些项目的APK包的大小减少最多50%并不罕见。

共享材质着色器和库

启用共享材质着色器代码共享材质本机库将有助于减少项目的整体包大小,但这是以增加加载时间为代价的。要在UE4项目中启用此选项,您需要执行以下操作:

  1. 首先,在主工具栏上转到 编辑 > 项目设置

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 包装部分的底部,您应该启用以下两个复选框。
    • 共享材质着色器代码 (Share Material Shader Code)
    • 共享材料本机库(Share Material Native Libraries)

    UE4 缩小安卓打包体积(翻译自官方文档)

    点击查看完整图片。

排除编辑内容

启用此选项将确保UE4编辑器使用的所有内容都不会打包到您的项目中。请注意,启用此功能可能会导致可能使用编辑器内容的项目中缺少内容的问题。要在UE4项目中启用这两个选项,您需要执行以下操作:

  1. 首先,在主工具栏上转到 编辑 > 项目设置

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 在“项目”部分下,单击“ 打包”部分以显示项目打包方式。

    UE4 缩小安卓打包体积(翻译自官方文档)

    点击查看完整图片。

  3. 单击“打包”设置底部的“ 高级属性”以显示“ 高级项目设置”

    UE4 缩小安卓打包体积(翻译自官方文档)

    点击查看完整图片。

  4. 向下滚动,直到看到“ 烘焙时排除编辑器内容(Exclude editor content when cooking)”选项,然后单击旁边的复选标记框启用它。

    UE4 缩小安卓打包体积(翻译自官方文档)

    请注意,启用此功能可能会导致可能使用编辑器内容的项目中缺少内容的问题。

设置项目的级别

一个经常被忽视的区域可能会导致您的项目膨胀APK包大小无法正确设置项目的选项,例如默认情况下应该使用哪个级别,或者哪个级别用于级别转换。要设置应该用于此类交互的级别(或级别),您可以执行以下操作。

  1. 首先,在主工具栏上转到 编辑 > 项目设置

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 然后,在“ 地图和模式”部分的“ 项目”下,查找“ 默认地图”部分。

    UE4 缩小安卓打包体积(翻译自官方文档)

  3. 单击游戏默认地图 旁边的箭头,然后从资产列表中选择应该用于游戏默认起始级别的地图。

    UE4 缩小安卓打包体积(翻译自官方文档)

  4. 重复此过程,直到您为每个所需的地图类型输入了级别。

选择要打包或不打包的内容

在项目设置的“打包”部分中,您可以指定应该或不应该将哪些地图和内容与游戏打包在一起。要指定项目中应包含哪些地图,您需要执行以下操作:

如果您没有指定应该烘焙哪些地图,那么将烘焙所有地图,包括您可能拥有的任何测试地图。如果不指定应该烘焙哪些地图,将导致您的最终打包游戏比需要的更大。

  1. 首先,转到主工具栏并选择编辑 > 项目设置,打开项目的设置。

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 然后,在“ 打包”部分的“ 项目”下,查找“ 打包”选项。

    UE4 缩小安卓打包体积(翻译自官方文档)

  3. 单击“包装”部分底部的小白色三角形以显示高级包装选项。

    UE4 缩小安卓打包体积(翻译自官方文档)

  4. 滚动到Advanced Packaging选项的下半部分,直到您看到项目内容目录中的Cook所有内容的复选框(忽略下面的地图列表)Cook everything in the project content directory(ignores list of maps below)选项。您在此处看到的选项将允许您指定应打包或不应与项目打包的内容和地图。

    UE4 缩小安卓打包体积(翻译自官方文档)

  5. 按下 要用于包括或排除资产的选项旁边的白色加号

    UE4 缩小安卓打包体积(翻译自官方文档)

  6. 单击添加的新条目旁边的三个小白点将显示一个窗口,允许您选择要包含或排除的资产。

    UE4 缩小安卓打包体积(翻译自官方文档)

  7. 选择资产后,输入框现在将包含指向该资产在项目文件夹中的位置的链接。

    UE4 缩小安卓打包体积(翻译自官方文档)

物业名称

描述

烘焙项目内容目录中的所有内容(忽略下面的地图列表

烘焙项目内容目录中的所有内容。

只烘焙地图(这只影响厨师所有)

仅烘焙地图(这仅影响cook所有标志)。

创建压缩cooked

创建压缩cooked包(减少部署大小)。

如果您正在使用此内容,则此包中不包含编辑器内容可能会导致游戏崩溃/错误

跳过烘焙编辑内容。

要包含在打包构建中的映射列表

在命令行中未指定其他映射列表时要包括的映射列表。

Cook的其他资产目录

这列出了包含.uasset文件的其他目录,无论它们是否被项目中的任何内容引用,都应始终进行烘焙。请务必注意,这些路径与项目内容目录相关。

目录永远不会做饭

这列出了永远不应该煮cooked的目录。

要打包的其他非资产目录。

此列表目录包含应始终添加到.PAK文件的文件(如果使用.pak文件;否则将它们复制为单个文件)。这用于暂存您通过UFS(虚幻文件系统)文件IO API 手动加载的其他文件。请务必注意,这些路径与项目内容目录相关。

要复制的其他非资产目录。

这将列出包含在打包项目时应始终复制的文件的目录,但不应该是.pak文件的一部分。这用于暂存您使用USF  (虚幻文件系统)文件IO API(例如,执行其自己的内部文件IO的第三方库)手动加载的其他文件。注意:  请务必注意,这些路径是相对于项目内容目录的。

检查将要烘焙的内容

要确保只将与项目相关的内容添加到APK文件中,您可以通过查看项目中的Cooked文件夹来检查要将哪些内容添加到项目的APK 中。您可以通过转到(ProjectName)\ Saved \ Cooked找到Cooked文件夹,然后选择具有您为项目制作的格式的文件夹。

请注意,在完成第一次烘焙后,您将只能看到Cooked文件夹中的内容。

下图显示了Match 3示例游戏中的Texture文件夹。文件夹中的内容已按大小排序,因此更容易查看哪些资产最大。确定最重要的资产后,您可以检查UE4内部的资产,看看实际上是否可以缩小它们的大小而不会牺牲资产的完整性。

开发与运输建造规模

在尝试确定项目的最终大小时,请记住项目的开发版本将略大于您的装运构建大小。在Medieval Match示例游戏中,开发和运输构建之间的大小差异约为14%。但是,由于每个项目都有不同的要求,因此项目的两种不同构建类型之间的节省可能比或节省14%。

每设备纹理LOD

随着虚幻引擎4.8的发布,您现在可以指定在哪些设备上使用哪种尺寸的纹理。您可以在移动平台纹理指南部分中阅读更多相关信息。

删除未使用的内容

当您的项目最终准备好为商店打包时,请确保首先删除任何未使用或测试的内容,方法是在内容浏览器中选择它并删除它。您可以先选择要删除的内容删除内容,然后按 键盘上的Delete键或使用右键单击菜单中的删除选项。当您尝试从项目中删除某些内容时,将显示“删除资源”菜单,如下图所示。

这是在UE4中删除对象的首选方法,应仅用于删除/删除内容文件夹中其位置的资产。

“删除资产”菜单将通知您尝试删除的资产是否被其他资产引用。如果未引用它,则可以简单地将其删除,但是,如果它被其他资产引用,则可以使用“ 替换引用”选项将对该资产的引用替换为应该打包在项目中的另一个资产。

删除未使用的插件

禁用 UE4编辑器内部任何未使用的  插件是确保不必要的内容和代码不会进入项目的最终APK包文件的另一种方法。这是因为某些 插件 需要一组特定的基本资产和代码才能正常工作。如果是 插件 未禁用,不会从项目中删除使插件 工作所需的资产和代码。虽然这可能不会像减少或删除大纹理那样减少项目的大小,但是当尝试将项目缩小到100 MB大小时,每一点都可以提供帮助。要禁用UE4内部的插件,您需要执行以下操作:

确保彻底测试项目,以确保您禁用的插件 不会干扰项目的功能。

  1. 首先,通过转到主工具栏并单击“ 窗口”选项然后选择“  插件”选项来打开  插件 管理器。

    UE4 缩小安卓打包体积(翻译自官方文档)

  2. 从“ 插件  浏览器”中,选中不同的部分,并通过取消选中“已启用 ”旁边的复选框,禁用所有未使用的插件 。禁用所有  插件后,您需要重新启动UE4编辑器,然后确保重新打包项目。

包黑名单

您现在可以在项目的Build / Platform /(目标平台文件夹)目录中放置一个文本文件,该文件将告诉cooker将部分或完整的文件路径排除在打包到项目中。项目可以有多个用于调试,开发,测试和运输构建的黑名单文件,可以将其设置为包含或排除所需的任何项目数据。您甚至可以为项目支持的每个平台使用不同的黑名单文件,例如Android版本,iOS版本等等。以下是Android列表中黑名单文件的示例。

以下是比赛3中的示例,其中当烘焙和包装游戏时,炊具被告知不包括以下文件。

  • 黑名单文本文件位置和名称: Match3 / Build / Android / PakBlacklist-Shipping.txt

    UE4 缩小安卓打包体积(翻译自官方文档)

对于任何项目,前三个条目应该是安全的,但可能存在运行时需要AssetRegistry.bin的情况(取决于您的项目)。强烈建议您进行全面测试,以确保您要删除的内容不会对您的项目产生负面影响。一个简单直接的方法是打开所有项目的级别,以确保它们正确加载并且没有错误或警告。如果您遇到其他问题并且不确定它们来自何处,请检查 Logcat是否存在错误。

最大动态点光源

Max Dynamic Point Lights属性 可以帮助减少为动态光源生成的着色器数量。此功能对于不需要动态照明的移动游戏特别有用,可以在“ 项目设置”的“ 移动”  部分下找到  

UE4 缩小安卓打包体积(翻译自官方文档)

点击查看完整图片。

要完全禁用此功能,请将Max Dynamic Point Lights从4设置为0,然后在出现提示时重新启动UE4 Editor。

UE4 缩小安卓打包体积(翻译自官方文档)

根据项目的大小和使用的材料数量,您可以实现的尺寸节省范围从几MB到多MB范围。