Windows平台
-
下载/安装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之下:Libs、Resources和Source三个文件夹以及里面的所有文件,以及RichtapTools.uplugin文件(换言之,除了Binaries和Intermediate两个临时文件夹之外的文件都需要打包)
Zip文件命名规则:RichtapTools_<插件版本号>_日期.zip
7. 邮件通知
将上述两个Zip文件的下载地址分别放入邮件正文
邮件标题须带上<插件版本号>
Android平台
继续上面的工作,仍然在Windows机器上执行Android打包(官网文档)。上述步骤#1~#4同。其他步骤:
-
安装Android Studio,推荐版本2022.3.1
-
打开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平台
-
安装Xcode 14:https://developer.apple.com/xcode/
-
在App Store创建一个新的App:RichTapTestCloud
-
UE4编辑器中,编辑菜单--项目设置--平台(ios)--单击Signing,将开发者证书和描述文件配置到项目中
-
执行命令行进行打包:
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+。