From 0f42f7f4a53ecb659fc9ed39cc55ecd5daab03b8 Mon Sep 17 00:00:00 2001
From: Martin Finkel <me@martinfinkel.com>
Date: Tue, 18 Feb 2025 15:30:19 +0700
Subject: [PATCH] android: add support for GameActivity

---
 PluginSource/RenderAPI_Android.cpp | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/PluginSource/RenderAPI_Android.cpp b/PluginSource/RenderAPI_Android.cpp
index 50d1818..890fe69 100644
--- a/PluginSource/RenderAPI_Android.cpp
+++ b/PluginSource/RenderAPI_Android.cpp
@@ -108,17 +108,32 @@ jobject RenderAPI_Android::createWindowSurface()
 {
     DEBUG("Entering createWindowSurface");
 
-    jclass cls_JavaClass = jni_env->FindClass("org/videolan/libvlc/AWindow");
+    jclass activityThread = jni_env->FindClass("android/app/ActivityThread");
+    jmethodID currentApplication = jni_env->GetStaticMethodID(activityThread, "currentApplication", "()Landroid/app/Application;");
+    jobject app = jni_env->CallStaticObjectMethod(activityThread, currentApplication);
+
+    jclass contextClass = jni_env->FindClass("android/content/Context");
+    jmethodID getClassLoader = jni_env->GetMethodID(contextClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
+    jobject classLoader = jni_env->CallObjectMethod(app, getClassLoader);
+
+    jclass classLoaderClass = jni_env->FindClass("java/lang/ClassLoader");
+    jmethodID loadClass = jni_env->GetMethodID(classLoaderClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
+
+    jstring className = jni_env->NewStringUTF("org.videolan.libvlc.AWindow");
+    jclass cls_JavaClass = (jclass)jni_env->CallObjectMethod(classLoader, loadClass, className);
+    jni_env->DeleteLocalRef(className);
+
+    if(cls_JavaClass == nullptr)
+    {
+        DEBUG("Failed to find class org.videolan.libvlc.AWindow");
+        abort();
+    }
     // find constructor method
     jmethodID mid_JavaClass = jni_env->GetMethodID (cls_JavaClass, "<init>", "(Lorg/videolan/libvlc/AWindow$SurfaceCallback;)V");
-    // create object instance
-    DEBUG("Calling jni_env->NewObject(cls_JavaClass, mid_JavaClass, nullptr)...");
 
+    // create object instance
     jobject obj_JavaClass = jni_env->NewObject(cls_JavaClass, mid_JavaClass, nullptr);
     // return object with a global reference
-
-    DEBUG("Calling jni_env->NewGlobalRef(obj_JavaClass)");
-
     return jni_env->NewGlobalRef(obj_JavaClass);
 }
 
-- 
GitLab