How to view ndk-build errors in detail?

Hi all,

I’m in the process of adding OpenCV to Unreal Engine, and I’m running into some issues that are difficult to decipher because ndk-build does not print the full error in the Output Log.

I’m packaging my project as Android ETC2.

For instance, if I add the following lines to Engine\Build\Android\Java\jni\Android.mk

OPENCV_CAMERA_MODULES:=off
OPENCV_LIB_TYPE:=STATIC
OPENCV_INSTALL_MODULES:=on
include …/…/…/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk

In this case, I know that my include path is broken, but this is the error I get from Output Log:

MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: ====3/9/2015 5:07:43 PM====PREPARING NATIVE CODE=================================================================
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: Preparing native code for debugging…
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: UnrealBuildTool Exception: ERROR: C:\Android\android-ndk-r10d/ndk-build.cmd failed with args APP_ABI="armeabi-v7a " NDK_DEBUG=1
MainFrameActions: Packaging (Android (ETC2)): CommandUtils.Run: Run: Took 8.7495004s to run UnrealBuildTool.exe, ExitCode=2
MainFrameActions: Packaging (Android (ETC2)): ErrorReporter.Error: ERROR: AutomationTool error: Command failed (Result:2): Z:\EmergentVR\Github\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe MobiusCapture Android Development Z:\EmergentVR\Github\MobiusCapture\MobiusCapture.uproject -noxge -
MainFrameActions: Packaging (Android (ETC2)): NoHotReloadFromIDE. See logfile for details: ‘UnrealBuildTool.txt’
MainFrameActions: Packaging (Android (ETC2)): BuildCommand.Execute: ERROR: BUILD FAILED
MainFrameActions: Packaging (Android (ETC2)): Program.Main: ERROR: AutomationTool terminated with exception:
MainFrameActions: Packaging (Android (ETC2)): Program.Main: ERROR: Exception in AutomationTool: Command failed (Result:2): Z:\EmergentVR\Github\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe MobiusCapture Android Development Z:\EmergentVR\Github\MobiusCapture\MobiusCapture.uproject -noxge -
MainFrameActions: Packaging (Android (ETC2)): NoHotReloadFromIDE. See logfile for details: ‘UnrealBuildTool.txt’
MainFrameActions: Packaging (Android (ETC2)): Stacktrace: at AutomationTool.CommandUtils.RunAndLog(String App, String CommandLine, String Logfile, Int32 MaxSuccessCode, String Input, ERunOptions Options, Dictionary2 EnvVars) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\ProcessUtils.cs:line 795 MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.CommandUtils.RunUBT(CommandEnvironment Env, String UBTExecutable, String CommandLine, String LogName, Dictionary2 EnvVars) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\UBTUtils.cs:line 35
MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.UE4Build.BuildWithUBT(String ProjectName, String TargetName, UnrealTargetPlatform TargetPlatform, String Config, String UprojectPath, Boolean ForceMonolithic, Boolean ForceNonUnity, Boolean ForceDebugInfo, Boolean ForceFlushMac, Boolean DisableXGE, String InAddArgs, Boolean ForceUnity, Dictionary2 EnvVars) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\UE4Build.cs:line 344 MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.UE4Build.Build(BuildAgenda Agenda, Nullable1 InDeleteBuildProducts, Boolean InUpdateVersionFiles, Boolean InForceNoXGE, Boolean InForceNonUnity, Boolean InForceUnity, Dictionary2 PlatformEnvVars) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\UE4Build.cs:line 1331 MainFrameActions: Packaging (Android (ETC2)): at Project.Build(BuildCommand Command, ProjectParams Params, Int32 WorkingCL) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Scripts\BuildProjectCommand.Automation.cs:line 114 MainFrameActions: Packaging (Android (ETC2)): at BuildCookRun.DoBuildCookRun(ProjectParams Params) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 251 MainFrameActions: Packaging (Android (ETC2)): at BuildCommand.Execute() in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\BuildCommand.cs:line 37 MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.Automation.Execute(List1 CommandsToExecute, CaselessDictionary`1 Commands) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Automation.cs:line 380
MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.Automation.Process(String[] CommandLine) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Automation.cs:line 352
MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.Program.MainProc(Object Param) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Program.cs:line 168
MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.InternalUtils.RunSingleInstance(MainProc Main, Object Param) in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Utils.cs:line 705
MainFrameActions: Packaging (Android (ETC2)): at AutomationTool.Program.Main() in z:\EmergentVR\Github\UnrealEngine\Engine\Source\Programs\AutomationTool\Program.cs:line 115
MainFrameActions: Packaging (Android (ETC2)): Program.Main: ERROR: Command failed (Result:2): Z:\EmergentVR\Github\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe MobiusCapture Android Development Z:\EmergentVR\Github\MobiusCapture\MobiusCapture.uproject -noxge -NoHotReloadFromIDE. See logfi
MainFrameActions: Packaging (Android (ETC2)): le for details: ‘UnrealBuildTool.txt’
MainFrameActions: Packaging (Android (ETC2)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Android (ETC2)): Program.Main: AutomationTool exiting with ExitCode=2
MainFrameActions: Packaging (Android (ETC2)): Domain_ProcessExit
MainFrameActions: Packaging (Android (ETC2)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Android (ETC2)): AutomationToolLauncher exiting with ExitCode=2
MainFrameActions: Packaging (Android (ETC2)): copying UAT log files…
MainFrameActions: Packaging (Android (ETC2)): RunUAT.bat ERROR: AutomationTool was unable to run successfully.
MainFrameActions: Packaging (Android (ETC2)): BUILD FAILED

As you can see, there is no indication that Android.mk is to blame, let alone that my include path is incorrect.

Normally I would expect to get something like the following from ndk-build:

Android.mk:8: …/…/…/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk: No such file or directory
make.exe: *** No rule to make target `…/…/…/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk’. Stop.

As you might imagine, this behavior makes debugging ndk errors almost impossible. Is there a hidden mechanism that will allow ndk errors to pass through the UnrealBuildTool?

Thanks in advance.