[Gear VR] Oculus Submission Validator error: Target SDK version is not 19 (targetSdkVersion)

Doing a “for distribution” export for GearVR and using the Oculus Submission Validator I get the following error:

Target SDK version is not 19 (targetSdkVersion)

Which settings are required to remove the error? This is with the default:

  • SDK API Level: latest
  • NDK API Level: latest

When I tried:

  • SDK API level: matchNDK or android-19
  • NDK API level: android-19

I receive a build error:

MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: [1/1] clang++.exe UE4Game-Android-Shipping-armv7-es2.so
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:234: error: undefined reference to 'srand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:234: error: undefined reference to 'srand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime\Core\Private\Android/AndroidMisc.cpp:408: error: undefined reference to 'sigemptyset'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:231: error: undefined reference to 'rand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\Android/AndroidString.h:294: error: undefined reference to 'atof'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\Android/AndroidString.h:294: error: undefined reference to 'atof'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\Android/AndroidString.h:303: error: undefined reference to 'atof'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:231: error: undefined reference to 'rand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:231: error: undefined reference to 'rand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\GenericPlatform/GenericPlatformMath.h:231: error: undefined reference to 'rand'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Runtime/Core/Public\Android/AndroidString.h:294: error: undefined reference to 'atof'
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: -------- End Detailed Actions Stats -----------------------------------------------------------
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: ERROR: UBT ERROR: Failed to produce item: U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Binaries\Android\UE4Game-Android-Shipping-armv7-es2.so
MainFrameActions: Packaging (Android (ETC2)): UnrealBuildTool: Total build time: 43.65 seconds
MainFrameActions: Packaging (Android (ETC2)): CommandUtils.Run: Run: Took 43.7052773s to run UnrealBuildTool.exe, ExitCode=5
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 AutomationUtils.Automation: Command failed (Result:5): U:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe UE4Game Android Shipping   -noxge -NoHotReloadFromIDE -ignorejunk. See logfile for details: 'UnrealBuildTool-2015.09.28-20.37.12.txt' 
MainFrameActions: Packaging (Android (ETC2)): Stacktrace:    at AutomationTool.CommandUtils.RunAndLog(String App, String CommandLine, String Logfile, Int32 MaxSuccessCode, String Input, ERunOptions Options, Dictionary`2 EnvVars) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\ProcessUtils.cs:line 800
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.CommandUtils.RunUBT(CommandEnvironment Env, String UBTExecutable, String CommandLine, String LogName, Dictionary`2 EnvVars) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\UBTUtils.cs:line 50
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, Dictionary`2 EnvVars) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\UE4Build.cs:line 347
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.UE4Build.Build(BuildAgenda Agenda, Nullable`1 InDeleteBuildProducts, Boolean InUpdateVersionFiles, Boolean InForceNoXGE, Boolean InUseParallelExecutor, Boolean InForceNonUnity, Boolean InForceUnity, Boolean InShowProgress, Dictionary`2 PlatformEnvVars) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\UE4Build.cs:line 1459
MainFrameActions: Packaging (Android (ETC2)):    at Project.Build(BuildCommand Command, ProjectParams Params, Int32 WorkingCL) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\Scripts\BuildProjectCommand.Automation.cs:line 114
MainFrameActions: Packaging (Android (ETC2)):    at BuildCookRun.DoBuildCookRun(ProjectParams Params) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 209
MainFrameActions: Packaging (Android (ETC2)):    at BuildCommand.Execute() in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\BuildCommand.cs:line 37
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.Automation.Execute(List`1 CommandsToExecute, CaselessDictionary`1 Commands) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 392
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.Automation.Process(String[] CommandLine) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 360
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.Program.MainProc(Object Param) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\Program.cs:line 135
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.InternalUtils.RunSingleInstance(Action`1 Main, Object Param) in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\AutomationUtils\Utils.cs:line 708
MainFrameActions: Packaging (Android (ETC2)):    at AutomationTool.Program.Main() in u:\UnrealEngine\GitHub\4.9_Branch\UnrealEngine\Engine\Source\Programs\AutomationTool\Program.cs:line 53
MainFrameActions: Packaging (Android (ETC2)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Android (ETC2)): Program.Main: AutomationTool exiting with ExitCode=5
MainFrameActions: Packaging (Android (ETC2)): Domain_ProcessExit
MainFrameActions: Packaging (Android (ETC2)): AutomationToolLauncher exiting with ExitCode=5
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
PackagingResults:Error: Error Unknown Error

Hi aussieburger -

It looks like the Min SDK version in your project settings is not set to 19.

Thank You

Eric Ketchum

Hi Eric,
thanks for the answer - i should have mentioned I had set that to 19 already as you have it in your screenshot.
Basically I did exactly as the gear vr setup docs: https://docs.unrealengine.com/latest/INT/Platforms/GearVR/QuickStart/index.html

except I cannot do:

https://docs.unrealengine.com/latest/images/Platforms/GearVR/QuickStart/2/GVR_Android_SDK_Setup.jpg

as I get the build error as in my original post. I installed the android works with the default settings also as per the docs.

only “latest” works for me for NDK level - android-19 results in the unknown build error.

EDIT: I should mention I’m using a forked 4.9 with this change in it:
https://answers.unrealengine.com/questions/302901/gear-vr-how-to-do-the-required-volume-ui.html
it appears using ‘android-19’ in the binary 4.9 is working - any ideas what i should build in Visual Studio to allow me to build with this setting in a source code 4.9??

Hi Erik,

I just tested again on a normal Binary UE4.9.2 with the required settings and while I don’t get a build fail I still see the error in the Oculus Submission check tool. This is easy to reproduce export any GearVR project and run the submission checker yourself to see the error message. In my opinion the settings in Unreal don’t seem to be creating the required setting in the manifest that Oculus is looking for :frowning:

I still think there is a bug / feature missing here - UE4 sets the min sdk but not the target sdk.

I’m working around it by putting:

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19" />

in the ManifestRequirementsOverride.txt. hopefully that works in the meantime!

Hey Aussieburger, just want to confirm that this is indeed a bug. I’ve reproduced it and logged it for our developers as UE-21797.

Thanks for bringing this to our attention.
Also, the workaround you’re using is indeed valid for the meantime. :slight_smile:

I came across another bug where you also need to explicitly mention permissions for memory read & write.
If someone comes across this bug, consider adding this to your ‘ManifestRequirementsOverride.txt’

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Yeah I needed to do that as well
Would be good if that was included out of the box by UE4 when GearVR export checkbox is ticked though. I’m guessing they don’t see it here - want to create a new ticket for it?

I mean yeah. The submission doesn’t goes through if these things are not in place. I read in the forums, that the memory read write has been introduced lately, so i guess UE4 needs to explicitly include that.

Hi, I just tried searching for the bug to see if it has been addressed yet - but I can’t find any record of it here: https://issues.unrealengine.com/

Is this the right place to look?

It has been addressed already - since 4.11 or so the default created manifest is fine for Oculus submissions

PS: the issues link did not exist back when this bug was reported hence the reason why it does not exist there.

Hi @aussieburger When I built last night using 4.13 it wasn’t working and had changed the 19 to a 9 - as described above.

What wasn’t working exactly? 19 working fine for me - you may need to update your Android SDK (CodeWorksforAndroid-1R4-windows) if you mean you’re having trouble building with 19 selected.

This was the message I received after APK package upload to Oculus