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