背景
项目使用的自动化打包环境!
依赖的内容
- gitlab ci
- android studio
- openjdk
- unreal引擎源码的【不知道是不是一定要,反正我用的就是源码的】
这里就是
Android
为例!
步骤
既然是Android
平台的话,那么就一定少不了sdk
了!
Android SDK和NDK的环境
我使用的是unreal 4.27.2
的版本,所以我就直接按照官方的文档直接下载了对应的SDK
和NDK
;
在之后搞开发的都懂了,就是各种环境变量
- 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.
想想估计是unreal
的android
相关配置还没有处理!
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_HOME
是Android SDK
的环境变量JAVA_HOME
是jdk
的环境变量NDK_ROOT
是ndk
的环境变量 以上都是自定义的,也可以通过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用到的基本环境已经完成了,目前项目已经能自动打包了!