UE打包环境配置

背景

项目使用的自动化打包环境!

依赖的内容

  • gitlab ci
  • android studio
  • openjdk
  • unreal引擎源码的【不知道是不是一定要,反正我用的就是源码的】

这里就是Android为例!

步骤

既然是Android平台的话,那么就一定少不了sdk了!

Android SDK和NDK的环境

我使用的是unreal 4.27.2的版本,所以我就直接按照官方的文档直接下载了对应的SDKNDK;

在之后搞开发的都懂了,就是各种环境变量

  • ANDROID_SDK_HOME
  • ANDROID_NDK_HOME
  • JAVA_HOME

完成以上配置后,就开始各种ci打包,结果出现了

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

想想估计是unrealandroid相关配置还没有处理!

unreal的Android Package Setting的配置一般是放置在c:/Users/{用户}/AppData/Local/Unreal Engine/Engine/Config/UserEngine.ini

[/Script/AndroidPlatformEditor.AndroidSDKSettings]
SDKPath=(Path="C:/Users/UE/AppData/Local/Android/Sdk")
NDKPath=(Path="C:/Users/UE/AppData/Local/Android/Sdk/ndk/21.4.7075529")
JavaPath=(Path="C:/android/OpenJDK")
SDKAPILevel=latest
NDKAPILevel=android-21

可以通过ci生成和写入该文件

结果打包还是一样!

看了一下官方的文档,有一个AutoSDK的工具

AutoSDK

在引擎源码的Engine/Extras目录下就有AutoSDK以及android相关的工具!

AutoSDK的内容这里就不在细说,简单说一下怎么使用就可以了!

  • 配置UE_SDKS_ROOT的环境变量,包含AutoSDK的UBT路径通常是在{引擎源码}\Engine\Binaries\DotNET\UnrealBuildTool.exe

因为打包机使用的是win,所以这里就选择了HostWin64

配置的是Android平台,所以使用Android目录的-23x/Setup.bat后再执行SetupEnvironmentVars.bat,结果就是Set 一对变量!!!

认真看了一下文档,才发现这个是给我们接其他sdk的。血亏(耗费了时间)

Extras/Adnroid

在和AutoSDK同级的目录下,发现了个Android目录,

然后我直接运行了SetupAndroid.bat,结果就是各种问题

Unable to locate local Android SDK location. Did you run Android Studio after installing?

还是直接看bat代码简单

虽然SetupAndroid就可以直接帮你配置好环境,但是一些基本的环境变量还是需要按照它的规则来的!

ANDROID_HOMEAndroid SDK的环境变量 JAVA_HOMEjdk的环境变量 NDK_ROOTndk的环境变量 以上都是自定义的,也可以通过AndroidStudio来下载(AndroidStudio最好是默认重新 下载,放置在AppData,要不然还是需要自己配置一些东西的!)

SetupAndroid的文件中,我们能看到引擎使用的各种sdk的版本!一定要对应着版本下载(或者让ue自行配置!)

call "%SDKMANAGER%" "platform-tools" "platforms;android-28" "build-tools;28.0.3" "cmake;3.10.2.4988404" "ndk;21.4.7075529"

有意思的是,这里的环境配置完成后,你会发现直接在打包机器上运行是没有问题的; 但是如果使用ci去运行的时候!

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

经过一轮测试,原因很简单

这个是直接在用户变量的,ci使用的用户并不是这个! 所以最好是加到系统中,直接从用户上copy下来就可以了!

Gradle

这个比较简单,直接运行BuildCookRun的时候,ue就会提示需要下载的gradle版本!

Creating rungradle.bat to work around commandline length limit (using unused drive letter Z:)
    Making .apk with Gradle...
    Downloading https://services.gradle.org/distributions/gradle-6.1.1-all.zip
    ....................................................................................................................................
    Unzipping C:\Windows\system32\config\systemprofile\.gradle\wrapper\dists\gradle-6.1.1-all\cfmwm155h49vnt3hynmlrsdst\gradle-6.1.1-all.zip to C:\Windows\system32\config\systemprofile\.gradle\wrapper\dists\gradle-6.1.1-all\cfmwm155h49vnt3hynmlrsdst
  
    Welcome to Gradle 6.1.1!

上述情况我们能看到UE已经帮你下载好了Gradle但是还是有报错!

* What went wrong:
    Execution failed for task ':app:packageDebug'.
    > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
       > Entry name 'META-INF/android.arch.lifecycle_extensions.version' collided

解决思路是添加GRADLE_USER_HOME后重启ci!

到此,ci用到的基本环境已经完成了,目前项目已经能自动打包了!