手把手教你:UE 4.27插件项目的自动化打包(Windows、Android、iOS统统搞定)

Windows平台

1. 下载/安装Epic Games launcher;然后安装 Unreal Engine v4.27.2

注意:launcher和具体版本的engine务必安装在相同的父目录下!如下:

2. 安装Visual Studio 2019或2022。安装完成后执行菜单:帮助 | 检查更新,确保装上最新的补丁。

3. 将上述安装目录下的 <InstallationPath>\UE_4.27\Engine\Build\BatchFiles 添加到系统的Path环境变量里

4. Git拉取最新代码

5. 执行命令行进行打包:

// 目标平台:Windows

RunUAT BuildCookRun -project="D:\Codes\richtap_pocs\UnrealEngine\RichTapTestCloud\RichTapTestCloud.uproject" -noP4 -platform=Win64 -clientconfig=Development -serverconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory="D:\MyUEGameWin"

打包完成后,将D:\MyUEGameWin目录下的文件压缩成一个zip文件,命名规则:RichTapTestCloud_日期.zip;

注意:

a) 系统可能弹出防火墙拦截提示,点击“允许访问”

b) .uproject工程文件需要指定完整路径

c) 如果不指定-archivedirector参数,则打包出来的文件存放在:RichTapTestCloud\Saved\StagedBuilds

d) 其他命令行参数该怎么选择?可以参考在UE编辑器里打包时Output Log窗口的输出

【注】platform参数的可选值:Win32,Win64,HoloLens,Mac,XboxOne,PS4,IOS,Android,HTML5,Linux,LinuxAArch64,AllDesktop,TVOS,Switch,Lumin

6. 将插件打成zip包(将用于客户交付)

编写Python脚本:<插件版本号> 从RichTapTestCloud\Plugins\RichtapTools\RichtapTools.uplugin 这个文件中读出,这是个Json文件,须解析"VersionName"字段。

Zip包里的第一级子目录名字是RichtapTools。然后,把RichTapTestCloud\Plugins\RichtapTools目录下的这些文件放到RichtapTools之下:LibsResourcesSource三个文件夹以及里面的所有文件,以及RichtapTools.uplugin文件(换言之,除了Binaries和Intermediate两个临时文件夹之外的文件都需要打包)

Zip文件命名规则:RichtapTools_<插件版本号>_日期.zip

7. 邮件通知

将上述两个Zip文件的下载地址分别放入邮件正文

邮件标题须带上<插件版本号>


Android平台

继续上面的工作,仍然在Windows机器上执行Android打包(官网文档)。上述步骤#1~#4同。其他步骤:

1. 下载/安装Android Studio,推荐版本2022.3.1

2. 打开Android Studio的SDK Manager,默认已经安装了版本34。需要修改工具链版本(重要!):

SDK Platforms页签下,勾选Android API 34,勾选 Android 12L (API Level 32)

SDK Tools页签下:

  • Android SDK Build-Tools,勾选34.0.0,勾选29.0.3

  • NDK (Side by side) ,勾选 21.4.7075529

  • Android SDK Command-line Tools,勾选8.0

【注】如果当前机器上已经装了高于32的SDK,也可以不卸载,则须在UE编辑器里指定使用android-32,设置路径为:Edit | Project Settings | Platforms | Android | Project SDK Override,将SDK API Level (specific version, 'latest', or 'mactchndk') 的值指定为android-32

3. 在UE的安装目录下,UE_4.27/Engine/Extras/Android,编辑SetupAndroid.bat,将所有set SDKMANAGER=的地方都改成set SDKMANAGER=%STUDIO_SDK_PATH%\cmdline-tools\8.0\bin\sdkmanager.bat

然后运行SetupAndroid.bat,看看是否一切正常!

4. 在UE编辑器里,打开项目设置:Edit | Project Settings | Platforms | Android SDK | SDKConfig,下述三项全部留空,即采用Android Studio的默认设置:

  • Location of Android SDK (the directory usually contains 'android-sdk-')
  • Location of Android NDK (the directory usually contains 'android-ndk-')
  • Location of JAVA (the directory usually contains 'jdk')

另外注意:在 Platforms | Android 设置页面,如果有红色的警示条,需要点击“Configure Now”、“Accept SDK License”。Google Play Services的配置不用管它。

5. 执行命令行进行打包:

RunUAT BuildCookRun -project="D:\Codes\richtap_pocs\UnrealEngine\RichTapTestCloud\RichTapTestCloud.uproject" -noP4 -platform=Android -targetplatform=Android -cookflavor=ASTC -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory="D:\MyUEGameAndroid"

打包完成后,将D:\MyUEGameAndroid目录下的.apk文件拷贝出来。

【注】cookflavor参数的三个取值:ASTC、ETC2和DXT,是压缩比从高到低依次排序的三种不同的纹理压缩格式。ASTC是最新格式,压缩比最高,但也意味着需要更高的计算资源,适用于Open GL ES 3.2+的设备。

6. 将.apk文件的下载地址放到邮件通知里


iOS平台

1. 安装Xcode 14:https://developer.apple.com/xcode/

2. 在App Store创建一个新的App:RichTapTestCloud

3. UE4编辑器中,编辑菜单--项目设置--平台(ios)--单击Signing,将开发者证书和描述文件配置到项目中

4. 执行命令行进行打包:

RunUAT BuildCookRun -nocompileeditor -installed -nop4 -project="/Users/zff/richtap_pocs/UnrealEngine/RichTapTestCloud/RichTapTestCloud.uproject" -package -ue4exe="/Users/Shared/Epic Games/UE_4.27/Engine/Binaries/Mac/UE4Editor.app/Contents/MacOS/UE4Editor" -compressed -ddc=InstalledDerivedDataBackendGraph -pak -prereqs -nodebuginfo -targetplatform=IOS -build -clientconfig=Development -utf8output -cook -stage -archive -archivedirectory="/Users/zff/MyUEGame"

5. 上传TestFlight


踩坑记

在Windows、Android、iOS三个平台的打包流程中,因为Windows较简单,可以优先尝试。跑通Windows之后,再试Android;这一步可能最折腾!以下是一些问题集锦:

1. Windows打包时,报错:

UATHelper: Packaging (Windows (64-bit)): ERROR: Unable to instantiate module 'RichtapTools': System.IO.IOException: 文件“D:\Codes\richtap_pocs\UnrealEngine\RichTapTestCloud\Plugins\RichtapTools\Binaries\Win64\RichTapWinSDKDLL.dll”正由另一进程使用,因此该进程无法访问此文件。

UATHelper: Packaging (Windows (64-bit)): 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

【解决办法】因为每次打包都会执行一个自定义的拷贝SDK DLL的操作,如果在Binaries目录下的这个DLL被UE编辑器占用,就会导致拷贝失败。需要将UE编辑器关闭,再将Plugins\RichtapTools\Binaries\Win64目录下这个DLL删除,然后重新打包即可。

2. Android打包:在UE编辑器里执行 File | Generate Visual Studio Project 或 Refresh Visual Studio Project,报错:UE_4.27\Engine\Binaries\DotNET\UnrealBuildTool.exe 已经存在的一个IO错误... 或者执行 File | Package Project | Android时,UE编辑器直接就crash了...

如果用命令行执行打包,可能看到的错误是:

ERROR: Platform Android is not a valid platform to build. Check that the SDK is installed properly.

【解决办法】确保Epic laucher和engine安装在同一个目录下。安装时如果都是默认路径,有可能一个安装在C:\Program Files下,一个安装在C:\Program Files (x86)下,这样就会有问题!!!需要卸载engine后重新安装。重装之后,记得重新修改和运行engine目录下的SetupAndroid.bat,还有系统环境变量Path里的设置。

3. Android打包出错:':app:compileDebugJavaWithJavac'

Build-tool 33.0.2 is missing DX at C:\Users\Jack\AppData\Local\Android\Sdk\build-tools\33.0.2\dx.bat

UATHelper: Packaging (Android (ASTC)): FAILURE: Build failed with an exception.

UATHelper: Packaging (Android (ASTC)): * What went wrong:

UATHelper: Packaging (Android (ASTC)): Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.

UATHelper: Packaging (Android (ASTC)): > Installed Build Tools revision 33.0.2 is corrupted. Remove and install again using the SDK Manager.

【解决办法】通过Android Studio的SDK Manager,将Build Tools的33版本卸载。UE 4.27最高只能用29版本

4. Android打包出错:':app:processDebugResources'、'app:assembleDebug'

UATHelper: Packaging (Android (ASTC)): aapt2.exe W 10-31 10:15:16 3208 22884 LoadedArsc.cpp:657] Unknown chunk type '200'.

UATHelper: Packaging (Android (ASTC)): > Task :app:processDebugResources

...

UATHelper: Packaging (Android (ASTC)): BUILD FAILED in 7s

UATHelper: Packaging (Android (ASTC)): ERROR: cmd.exe failed with args /c "D:\Codes\richtap_pocs\UnrealEngine\RichTapTestCloud\Intermediate\Android\arm64\gradle\rungradle.bat" :app:assembleDebug

【解决办法】原因是使用了过高版本的Android SDK(比如API Level 33或34等)。可以将高版本Android SDK卸载,仅保留Android 12(API Level 32)。或者在UE编辑器里Android平台设置Project SDK Override,指定为android-32

5. Android打包:在UE编辑里可以成功,在控制台窗口执行命令行也可以成功,唯独在Jenkins环境里执行报错:

ERROR: Platform Android is not a valid platform to build. Check that the SDK is installed properly.

【解决办法】参考这篇文章。需要在操作系统"环境变量"的系统变量里把ANDROID_HOME、NDK_ROOT、NDKROOT、JAVA_HOME再定义一遍(而不仅仅是用户变量)。如果还是不行,那就升级Jenkins版本吧,2.4+。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值