打包Android项目

介绍如何打包最终Android项目。

Windows
MacOS
Linux
Prerequisite Topics

This page assumes you have prior knowledge of the following topics. Please read them before proceeding.

在接下来的教程中,我们将了解打包 虚幻引擎4(UE4)项目以部署到Android设备上的方法。UE4中的Android打包流程简单易用,同时可输出多个文件,便于在手机上安装和卸载项目用于测试的项目。

基本设置

开始之前,需满足以下要求和项目设置:

  • 需在计算机上设置 Android Studio。参见设置Android SDK和NDK

  • Android设备必须已启用 开发模式(Development Mode)USB调试(USB Debugging)。参见设置Android设备进行开发

  • 需配置Android的 项目设置(Project Settings),并接受Android SDK授权协议。参见

    [Android快速入门指南](SharingAndReleasing/Mobile/Android/Basics/GettingStarted)

若尚未创建项目,使用 第三人称模板 进行创建,并将 目标硬件(Target Hardware) 设为 移动设备/平板电脑(Mobile/Tablet),同时将质量设为 可缩放3D或2D(Scalable 3D or 2D)

1.打包项目

在本章中,我们需将项目打包为.APK文件。

由于正在测试该游戏,因此目前在 开发 模式下打包。游戏完成后即可在 打包项目(Package Project) 菜单中选择 版本配置(Build Configurations),在 发布(Shipping) 下进行打包。

  1. 文件(File) 菜单中,前往 打包项目(Package Project)> Android,并选择要打包的纹理格式。由于所有设备均支持Android ETC1,因此本例中选择此格式。

    点击放大图像。

    不同设备支持不同纹理格式,具体基于其应用的硬件。欲了解各类格式详情,参见Android开发参考

    格式

    描述

    ETC1

    基于Android的所有设备均支持该格式,但其无法压缩透明纹理(未压缩保存)。若需要透明度来获得更好压缩效果,建议使用RGB和单独的透明纹理。

    ETC1a

    ETC1用于非透明纹理,ETC2用于透明纹理。若设备不支持ETC2,透明纹理将在运行时解压到RGBA中。此格式可在ETC1和ETC2设备上使用,但相较于ETC2,非透明纹理的ETC1质量可能偏低。

    ETC2

    所有OpenGL 3.x类设备均支持该格式,其支持透明压缩。

    ATC

    Qualcomm Adreno GPU支持此格式,其支持透明压缩。

    DXT

    Nvidia Tegra GPU支持此格式,其支持透明压缩。

    PVRTC

    PowerVR GPU支持此格式,其支持透明压缩。

    ASTC

    最新纹理压缩格式,利用此格式可通过指定块大小进行更多质量控制,其支持透明压缩。目前在某些设备上可用。

  2. 将弹出提示,说明打包游戏的保存位置,其应默认为项目文件夹。新建文件夹并命名为 Android_Builds

    点击放大图像。

  3. 打包项目时,右下角将出现打包消息,显示打包进度。

    package_toast.png

  4. 打包成功后,编辑器右下角将显示打包成功消息。

    Packageing_Completed.png

  5. 导航至步骤2中创建的文件夹。其中有一个新文件夹,将以打包时所选纹理类型命名。在本例中,该文件夹命名为 Android_ETC1

    点击放大图像。

2.将打包项目部署到设备

现在项目已被打包为.APK文件,本章节中将介绍将版本部署到设备的方法。

  1. 用USB线将Android设备连接到PC。若收到提示,请允许PC更改文件。

  2. 打开Android_ETC1文件夹,然后 双击 Install<em>[ProjectName]</em>Development.bat 批处理文件,将项目安装到Android设备上。

点击放大图像。

若未使用USB线连接设备,运行.BAT文件将无任何反应。

  1. 用USB线将Android设备连接到PC。若收到提示,请允许PC更改文件。

  2. 打开Android_ETC1文件夹,然后 双击 Install[ProjectName]Development_armv7-es3.command 文件,将项目安装到Android设备上。

    若未使用USB线连接设备,运行.command文件将无任何反应。

  1. 用USB线将Android设备连接到PC。若收到提示,请允许PC更改文件。

  2. 打开 Android_ETC1 文件夹,其中包含打包过程中创建的文件。

    LinuxAndroid_Step37.png

    此处有 InstallationUninstallation shell脚本(*.sh),以及包含将项目安装到Android设备(支持ETC1压缩方案)所需全部文件的Android应用程序包(*.apk)。

  3. 在文件夹中点击右键并选择 在终端中打开(Open in Terminal),从该文件夹的位置打开终端。

    LinuxAndroid_Step38.png

  4. 在终端中输入 ./Install_LinuxAndroidProject_Development-arm64.es2.sh,将项目安装到Android设备。

    点击放大图像。

    若运行shell脚本时遭遇问题,尝试在终端中输入 adb devices,验证设备是否已连接到计算机。

  5. 在安装过程中,shell脚本应将以下输出发送到终端

    点击放大图像。

    Shell脚本完成安装进程后,将出现 安装成功 消息。

完成本教程后,项目应显示在Android设备上,如下图所示:

此外,你将拥有打包的.APK文件和随附助手程序,以将其部署到其他设备进行测试。

打包App Bundle

Android App Bundle 是Google提供的一种发布格式,可用作打包.apks的替代方案。你可以创建一个Android App Bundle(.aab),然后将其上传到 Google Play商店,而无需为不同的设备子集创建不同的.apks。然后,商店的动态发布系统使用App Bundle的内容生成.apk,该文件在用户下载应用程序时,针对用户的特定设备进行优化。

除了大幅简化维护Google Play商店中的构建所涉及的工作之外,App Bundle编译可以发布最大150 MB的.apks,而非以前的100 MB。此限制适用于最终.apk,而不是用于生成.apk的App Bundle。

要创建App Bundle构建(build),请打开 项目设置(Project Settings),然后导航至 平台(Platforms) > Android 分段。在 App Bundle 分段中,启用 生成束(AAB)(Generate Bundle (AAB))

生成AAB设置

现在,当你打包Android项目时,你将生成.aab文件,上传到Google Play。你还将生成用于测试目的的通用.apk。

因为Google Play商店的限制,Android App Bundle不能用.obb文件发布。

借助可用于配置App Bundle构建的其他设置,你可以微调App Bundle用于生成项目最终.apks时的敏感度。

设置

说明

从Bundle生成通用APK(Generate Universal APK from Bundle)

启用此设置将允许App Bundle为最终用户生成通用的.apk文件,该文件可以在任何类型的设备上运行。这不会影响为在计算机上进行测试而生成的通用.apk。

启用ABI拆分(Enable ABI Split)

App Bundle将基于用户CPU使用的应用程序二进制接口生成单独的.apks。例如:arm64-v8a、x86、x86_64。

启用语言拆分(Enable language split)

App Bundle将基于用户的语言生成单独的.apks。 将仅下载用户本地化用的字符串。

启用密度拆分(Enable density split)

App Bundle基于图像分辨率和DPI生成单独的.apks。将仅下载与用户设备兼容的图标和启动屏幕。

例如,如果你启用ABI拆分但禁用语言拆分,则.aab会根据用户设备的兼容ABI为用户设备量身定制最终APK,但是每个用户都将收到所有语言的资源,无论其设备或语言设置如何。

默认设置下,最终的.apk将拥有最小的尺寸,而禁用这些设置则会产生较大的.apk。

有关如何将.apks或.aabs上传到Google Play商店的信息,请参阅Android发布

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback