Correct SDK and NDK to target for Oculus Quest 1 and 2 in UE 4.26

Did you follow:

?

I’m using:

Minimum SDK Version: 25

Target SDK Version: 25

SDKAPILevelOverride=android-28

NDKAPILevelOverride=latest

which runs fine and can be uploaded to the Oculus Apps Dashboard

I am creating a VR project using Unreal Engine 4.26. I have done the default Android setup as mentioned in Unreal Documentation. I have also added the paths to the SDK, NDK and AVA in the “Android SDK” section of “Project Settings”

Now, my questions are,

  • What values should I put in the “SDK
    API Level” and “NDK API Level” in the
    Android SDK section of Project
    Settings?
  • What values should I put in the
    “Minimum SDK Version” and “Target SDK
    Version” in the Android section of
    “Project Settings”?
  • Do I need to download any other
    version of Android SDK or NDK using
    Android Studio? I currently have
    Android API 30 and 29(Android
    10.0(Q)) SDK installed. For NDK, I have 21.1.6352462 Installed.

I have searched for answers regarding these questions everywhere and all the posts about these are out of date. Any help will be appreciated!

I did follow the guide from the link you posted. There is no mention of which SDK and NDK to target in that post. Also, in that post, it says that the min SDK version should be 23 and the max should be 25. I appreciate you mentioning your settings, but in the latest Oculus plugin update (v27), it says that they updated both Quest and Quest 2 to Android 10, doesn’t that mean that we should be using “android-29” in the SDK API Level? (As Android 10 is API level 29). This is why there is a lot of confusion. So I am looking for a definite answer. Thank you again for your help.

I suspect that Oculus still recommends specifying 23 as the minimum SDK because there are still Oculus Go devices out in the wild that theoretically have that old version of Android. There’s not much harm in specifying a newer minimum. Worst case: someone who has refused software updates on their Quest won’t be able to run your app.

Android has good backward-compatibility. Let’s say there’s some API function makeBeep(float) that takes a 0-1 range (this will be a pretty contrived example, but it gets the point across). Then, in API level 2, they change it to a 0-100 range. When an app is loaded that targets SDK version 1, the system will link it to a compatibility layer that provides a makeBeep wrapper which multiplies the number it’s given by 100, and passes the converted result to the new implementation (sometimes they just maintain old implementations, sometimes it’s a compatibility wrapper). The way you’re “supposed” to do things changed, but the old app, without actually changing how it does things, still works! Now, if you change your app to target level 2 without actually revising any of the code, all of the beeps that it makes will be 100x quieter than intended, because the system trusts the app to use the 0-100 range, but the app still thinks it needs a 0-1 range.

If Oculus says to use SDK version 25, we should assume that’s the newest version they have written their code (that you embed in your game via their plugin) to support. By specifying 29 instead of 25 as the target level, Android will decide not to use older libraries or compatibility layers. Maybe it will work, but maybe it will create some bugs.