https://github.com/libsdl-org/SDL/commit/6880bed495226e7b87e9ef08fc552c0bcfd5fc29
From 6880bed495226e7b87e9ef08fc552c0bcfd5fc29 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 29 Jul 2026 19:45:40 -0700
Subject: [PATCH] Fixed java.lang.ClassNotFoundException: Didn't find class
"android.window.OnBackInvokedCallback" on Android 8.0
---
.../main/java/org/libsdl/app/SDLActivity.java | 41 ++++++++++---------
1 file changed, 22 insertions(+), 19 deletions(-)
diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
index b495e8773dda6..b1dfa9f221d88 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -787,25 +787,7 @@ public void onBackPressed() {
}
}
- static OnBackInvokedCallback backButtonCallback = new OnBackInvokedCallback() {
- Handler mBackKeyHandler;
-
- @Override
- public void onBackInvoked() {
- if (mBackKeyHandler == null) {
- mBackKeyHandler = new Handler(Looper.getMainLooper());
- }
-
- onNativeKeyDown(KeyEvent.KEYCODE_BACK);
- mBackKeyHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- onNativeKeyUp(KeyEvent.KEYCODE_BACK);
- }
- }, 500);
- }
- };
-
+ static OnBackInvokedCallback backButtonCallback;
static boolean mBackKeyTrapEnabled = false;
public static void setBackButtonTrapEnabled(boolean enabled) {
@@ -819,6 +801,27 @@ public static void setBackButtonTrapEnabled(boolean enabled) {
return;
}
+ if (backButtonCallback == null) {
+ backButtonCallback = new OnBackInvokedCallback() {
+ Handler mBackKeyHandler;
+
+ @Override
+ public void onBackInvoked() {
+ if (mBackKeyHandler == null) {
+ mBackKeyHandler = new Handler(Looper.getMainLooper());
+ }
+
+ onNativeKeyDown(KeyEvent.KEYCODE_BACK);
+ mBackKeyHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ onNativeKeyUp(KeyEvent.KEYCODE_BACK);
+ }
+ }, 500);
+ }
+ };
+ }
+
if (enabled) {
mSingleton.getOnBackInvokedDispatcher().registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT, backButtonCallback);
}