keywords: [UE4]Android package for engine source build

Keywords: Android Packaging, Building

先设置NDK的环境变量: https://docs.unrealengine.com/latest/INT/Platforms/Android/Reference/index.html#environmentvariables

然后重新运行引擎源码根目录下的Setup.bat。此时会开始下载几百兆的内容,且Excluding没有出现Android字样,如果没有配置NDKROOT,Excluding会包含Android,表示下载内容排除android编译环境。

如果不设置环境变量,也可以通过命令行Setup.bat --all来下载所有平台的编译文件(包括ios和linux)。
Setup.bat的几种参数:

//包含所有平台
Setup.bat --all

//包含指定平台
Setup.bat --include=Linux --include=IOS

//排除指定平台
Setup.bat --exclude=Linux --exclude=IOS

下载完成后,rebuild一下Development - Android

常见错误

如果不下载android的相关文件,编译安卓版本时可能出现以下错误:

错误1(出现这个错误的另一个原因是Project Settings的Android-SDK的NDK API Level修改了,UE4默认是android-19):

UATHelper: Packaging (Android (ASTC)):   clang++.exe: error: no such file or directory: 'C:/UnrealEngine-4.18.1-release/Engine/Build/Android/Prebuilt/bsdsignal/lib/armeabi-v7a/libbsdsignal.a'
UATHelper: Packaging (Android (ASTC)):   Total build time: 899.04 seconds (Local executor: 890.45 seconds)
UATHelper: Packaging (Android (ASTC)): Took 899.2723232s to run UnrealBuildTool.exe, ExitCode=5
UATHelper: Packaging (Android (ASTC)): ERROR: Command failed (Result:5): C:\UnrealEngine-4.18.1-release\Engine\Binaries\DotNET\UnrealBuildTool.exe WarSoul Android Development -Project=G:\Source\Work\project2\ue4_proj\WarSoul\WarSoul.uproject  G:\Source\Work\project2\ue4_proj\WarSoul\WarSoul.uproject -NoUBTMakefiles  -remoteini="G:\Source\Work\project2\ue4_pr
oj\WarSoul" -skipdeploy -noxge -NoHotReload -ignorejunk. See logfile for details: 'UnrealBuildTool-2017.12.18-17.10.06.txt' 
UATHelper: Packaging (Android (ASTC)):        (see C:\UnrealEngine-4.18.1-release\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace)
UATHelper: Packaging (Android (ASTC)): AutomationTool exiting with ExitCode=5 (5)
UATHelper: Packaging (Android (ASTC)): BUILD FAILED
PackagingResults: Error: Unknown Error

错误2:

10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lgpg
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3PROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3ExtensionsPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3CookingPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3CommonPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPxFoundationPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPxPvdSDKPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPsFastXmlPROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3VehiclePROFILE
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lcxa_demangle
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -licudata
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -licuuc
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -licui18n
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -licule
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -liculx
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -licuio
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lfreetype2412
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lharfbuzz
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lpng
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lcurl
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -logg
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lvorbis
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lvorbisfile
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lopus
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lspeex_resampler
10>D:/sdks/NVPACK_new/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld : error : cannot find -lPhysX3CookingPROFILE

错误3:

10>  Added repository: D:\sdks\NVPACK_new\android-sdk-windows\extras\android\m2repository
10>  AARImports: com.google.android.gms, play-services-auth, 11.0.4
10>  AARImports: com.google.android.gms, play-services-games, 11.0.4
10>  AARImports: com.google.android.gms, play-services-nearby, 11.0.4
10>  AARImports: com.google.android.gms, play-services-plus, 11.0.4
10>  AARImports: com.android.support, support-v13, 25.2.0
10>  AARImports: com.google.android.gms, play-services-ads, 11.0.4
10>EXEC : error : System.IO.DirectoryNotFoundException: 未能找到路径“C:\UnrealEngine-4.18.1-release\Engine\Intermediate\Android\APK\gradle\app\aar-imports.gradle”的一部分。
10>            在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
10>            在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
10>            在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
10>            在 System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
10>            在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
10>            在 System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
10>            在 UnrealBuildTool.UEDeployAndroid.GenerateGradleAARImports(String EngineDir, String UE4BuildPath, List`1 NDKArches) 位置 C:\UnrealEngine-4.18.1-release\Engine\Source\Programs\UnrealBuildTool\Platform\Android\UEDeployAndroid.cs:行号 3843
10>            在 UnrealBuildTool.UEDeployAndroid.MakeApk(AndroidToolChain ToolChain, String ProjectName, String ProjectDirectory, String OutputPath, String EngineDirectory, Boolean bForDistribution, String CookFlavor, Boolean bMakeSeparateApks, Boolean bIncrementalPackage, Boolean bDisallowPackagingDataInApk, Boolean bDisallowExternalFilesDir) 位置 C:\UnrealEngine-4.18.1-release\Engine\Source\Programs\UnrealBuildTool\Platform\Android\UEDeployAndroid.cs:行号 2972
10>            在 UnrealBuildTool.UEDeployAndroid.PrepTargetForDeployment(UEBuildDeployTarget InTarget) 位置 C:\UnrealEngine-4.18.1-release\Engine\Source\Programs\UnrealBuildTool\Platform\Android\UEDeployAndroid.cs:行号 3472
10>            在 UnrealBuildTool.AndroidPlatform.Deploy(UEBuildDeployTarget Target) 位置 C:\UnrealEngine-4.18.1-release\Engine\Source\Programs\UnrealBuildTool\Platform\Android\UEBuildAndroid.cs:行号 521
10>            在 UnrealBuildTool.UnrealBuildTool.RunUBT(BuildConfiguration BuildConfiguration, String[] Arguments, FileReference ProjectFile) 位置 C:\UnrealEngine-4.18.1-release\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:行号 1718
10>  Total build time: 5.60 seconds (NoActionsToExecute executor: 0.00 seconds)
10>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.MakeFile.targets(41,5): error MSB3075: The command "..\..\Build\BatchFiles\Build.bat UE4Game Android Development -waitmutex" exited with code 5. Please verify that you have sufficient rights to run this command.

错误4:

如果设置了NDKROOT并重新运行Setup.bat下载了android相关的文件,rebuild的时候可能出现以下错误:

error : D:/sdks/NVPACK/android-ndk-r12b/ndk-build.cmd failed with args APP_ABI="armeabi-v7a " NDK_DEBUG=1

解决办法:重启机器。。。

错误5:

ProcessResult.StdOut:   Compiling Native code with NDK API 'android-19'
ProcessResult.StdErr:   Performing 1 actions (4 in parallel)
ProcessResult.StdErr:   [1/1] clang++.exe WarSoul-armv7-es2.so
ProcessResult.StdErr:   D:/sdks/NVPACK/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: cannot find -l-lcxa_demangle
ProcessResult.StdErr:   clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
ProcessResult.StdErr:   ERROR: UBT ERROR: Failed to produce item: G:\Source\Work\project2\ue4_proj\WarSoul\Binaries\Android\WarSoul-armv7-es2.so
ProcessResult.StdErr:   Total build time: 79.29 seconds (Local executor: 0.00 seconds)
CommandUtils.Run: Took 79.5196648s to run UnrealBuildTool.exe, ExitCode=5

原因:
自己的工程中使用了stl相关api(其实自己代码中没有使用stl、但是有个第三方plugin中使用了stl),但是ue4编译android版本时链接stl有bug。
解决办法:
将android-ndk-r12b\sources\cxx-stl\stlport\libs\armeabi\下的libstlport_static.a拷贝出来,放在工程的某个目录下并在Build.cs中链接此lib文件。这是ndk链接stl的bug,nkd 15版本据说已修复,但是目前ue4编译android版本只支持ndk 12即其以下版本。
网上其他人说的解决办法(但是我测试后无效):执行GenerateProjectFiles.bat重新生成UE4.sln,并打开VS后clean再rebuild。然后再build Android/Development。


人一切的痛苦,本质上都是对自己的无能的愤怒。──王小波