[vlc-devel] [PATCH 4/7] android: util: load ClassLoader functions

Alexandre Janniaux ajanni at videolabs.io
Wed Feb 10 11:23:20 UTC 2021


Fill the jclass and findClass in the jfields table.
---
 modules/video_output/android/utils.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/modules/video_output/android/utils.c b/modules/video_output/android/utils.c
index e46b8e004d..96832ad2b3 100644
--- a/modules/video_output/android/utils.c
+++ b/modules/video_output/android/utils.c
@@ -109,12 +109,17 @@ struct vlc_android_jfields
         jclass clazz;
         jmethodID init_st;
     } Surface;
+    struct {
+        jobject instance;
+        jmethodID findClass;
+    } ClassLoader;
 };
 
 struct AWindowHandler
 {
     JavaVM *p_jvm;
     jobject jobj;
+    jobject classloader;
     vout_window_t *wnd;
 
     struct vlc_android_jfields jfields;
@@ -846,6 +851,25 @@ AWindowHandler_new(vlc_object_t *obj, vout_window_t *wnd, awh_events_t *p_events
     /* Zero the jfields structure before usage. */
     p_awh->jfields = (struct vlc_android_jfields) { .AWindow.clazz = NULL };
 
+    p_awh->jfields.ClassLoader.instance = var_InheritAddress(obj, "android-classloader");
+    if (p_awh->jfields.ClassLoader.instance)
+    {
+        jclass ClassLoader_clazz = (*p_env)->GetObjectClass(p_env,
+                p_awh->jfields.ClassLoader.instance);
+        p_awh->jfields.ClassLoader.findClass = (*p_env)->GetMethodID(p_env,
+                ClassLoader_clazz, "findClass",
+                "(Ljava/lang/String;)Ljava/lang/Class;");
+        (*p_env)->DeleteLocalRef(p_env, ClassLoader_clazz);
+        if ((*p_env)->ExceptionCheck(p_env))
+        {
+            msg_Err(obj, "ClassLoader didn't have a findClass method");
+            if (p_awh->jobj)
+                (*p_env)->DeleteGlobalRef(p_env, p_awh->jobj);
+            free(p_awh);
+            return NULL;
+        }
+    }
+
     p_awh->wnd = wnd;
     if (p_events)
         p_awh->event.cb = *p_events;
-- 
2.30.1



More information about the vlc-devel mailing list