引擎对 Android 版本的支持
在之前的笔记里:Android SDK 版本与 Android 的版本 列出了 Android 系统版本和 API Leve 版本之间的对照表。
但是 UE 不同的引擎版本对 Android 的系统支持也是不一样的,在 Project Setting
-Android
中的 Minimum SDK Version
中可以设置最小的 SDK 版本,也就是 UE 打包 Android 所支持的最低系统版本。
在 UE4.25 中,最低可以设置 Level 为 19,即 Android4.4,在 4.25 之前的引擎版本最低支持 Level 9,也就是 Android 2.3。
这部分的代码可以在 Runtime/Android/AndroidRuntimeSettings/Classes/AndroidRuntimeSettings.h 中查看,并对比不同引擎版本的区别。
SDK 版本与 Android 的版本对照表
可以在 Google 的开发者站点看到:Android SDK Platform
Build.VERSION_CODES 的含义:Build.VERSION_CODES
AndroidVersion | SDK Version | Build.VERSION_CODES |
---|---|---|
Android 11 | (API level 30) | R |
Android 10 | (API level 29) | Q |
Android 9 | (API level 28) | P |
Android 8.1 | (API level27) | O_MR1 |
Android 8.0 | (API level 26) | O |
Android 7.1 | (API level 25) | N_MR1 |
Android 7.0 | (API level 24) | N |
Android 6.0 | (API level 23) | M |
Android 5.1 | (API level 22) | LOLLIPOP_MR1 |
Android 5.0 | (API level 21) | LOLLIPOP |
Android 4.4W | (API level 20) | KITKAT_WATCH |
Android 4.4 | (API level 19) | KITKAT |
Android 4.3 | (API level 18) | JELLY_BEAN_MR2 |
Android 4.2 | (API level 17) | JELLY_BEAN_MR1 |
Android 4.1 | (API level 16) | JELLY_BEAN |
Android 4.0.3 | (API level15) | ICE_CREAM_SANDWICH_MR1 |
Android 4.0 | (API level 14) | ICE_CREAM_SANDWICH |
Android 3.2 | (API level 13) | HONEYCOMB_MR2 |
Android 3.1 | (API level 12) | HONEYCOMB_MR1 |
Android 3.0 | (API level 11) | HONEYCOMB |
Android 2.3.3 | (API level 10) | GINGERBREAD_MR1 |
Android 2.3 | (API level 9) | GINGERBREAD |
UE4 对 Android 的最低支持是 SDK9,也就是 Android2.3。
引擎对 AndroidNDK 的要求
UE 在打包 Android 的时候会要求系统中具有 NDK 环境,但是不同的引擎版本对 NDK 的版本要求也不一样。
当使用不支持的 NDK 版本时,打包会有如下错误:
1 | UATHelper: Packaging (Android (ETC2)): ERROR: Android toolchain NDK r14b not supported; please use NDK r21 to NDK r23 (NDK r21b recommended) |
提示当前系统中的 NDK 版本不支持,并会显示支持的版本。
UE 打包时对 NDK 版本的检测是在 UBT 中执行的,具体文件为UnrealBuildTool/Platform/Android/AndroidToolChain.cs
。
其中定义了当前引擎版本支持的 NDK 的最低和最高版本:
1 | // in ue 4.25 |
可以在 Github 上比较方便地查看不同引擎版本要求的 NDK 版本:UE_425_AndroidToolChain.cs
不同的引擎版本对 NDK 的要求 UE 文档中也有介绍:Setting Up Android SDK and NDK for Unreal
Unreal Engine | NDK Version |
---|---|
4.25+ | NDK r21b, NDK r20b |
4.21 - 4.24 | NDK r14b |
4.19 - 4.20 | NDK r12b |
NDK 的编译器版本
UE4 支持r14b
-r18b
的 Android NDK,但是我在 UE4.22.3 中设置 r18b
被引擎识别为r18c
:
1 | UATHelper: Packaging (Android (ETC2)): Using 'git status' to determine working set for adaptive non-unity build (C:\Users\imzlp\Documents\Unreal Projects\GWorldClient). |
之所以要换 NDK 的版本是因为不同的 NDK 版本所包含的编译器对 C++11 标准支持度不同。
NDK | clang version |
---|---|
r14b | clang 3.8.275480 (based on LLVM 3.8.275480) |
r17c | clang version 6.0.2 |
r18b | clang version 7.0.2 |
r20b | clang version 8.0.7 |