@@ -108,17 +108,32 @@ jobject RenderAPI_Android::createWindowSurface()
108
108
{
109
109
DEBUG (" Entering createWindowSurface" );
110
110
111
- jclass cls_JavaClass = jni_env->FindClass (" org/videolan/libvlc/AWindow" );
111
+ jclass activityThread = jni_env->FindClass (" android/app/ActivityThread" );
112
+ jmethodID currentApplication = jni_env->GetStaticMethodID (activityThread, " currentApplication" , " ()Landroid/app/Application;" );
113
+ jobject app = jni_env->CallStaticObjectMethod (activityThread, currentApplication);
114
+
115
+ jclass contextClass = jni_env->FindClass (" android/content/Context" );
116
+ jmethodID getClassLoader = jni_env->GetMethodID (contextClass, " getClassLoader" , " ()Ljava/lang/ClassLoader;" );
117
+ jobject classLoader = jni_env->CallObjectMethod (app, getClassLoader);
118
+
119
+ jclass classLoaderClass = jni_env->FindClass (" java/lang/ClassLoader" );
120
+ jmethodID loadClass = jni_env->GetMethodID (classLoaderClass, " loadClass" , " (Ljava/lang/String;)Ljava/lang/Class;" );
121
+
122
+ jstring className = jni_env->NewStringUTF (" org.videolan.libvlc.AWindow" );
123
+ jclass cls_JavaClass = (jclass)jni_env->CallObjectMethod (classLoader, loadClass, className);
124
+ jni_env->DeleteLocalRef (className);
125
+
126
+ if (cls_JavaClass == nullptr )
127
+ {
128
+ DEBUG (" Failed to find class org.videolan.libvlc.AWindow" );
129
+ abort ();
130
+ }
112
131
// find constructor method
113
132
jmethodID mid_JavaClass = jni_env->GetMethodID (cls_JavaClass, " <init>" , " (Lorg/videolan/libvlc/AWindow$SurfaceCallback;)V" );
114
- // create object instance
115
- DEBUG (" Calling jni_env->NewObject(cls_JavaClass, mid_JavaClass, nullptr)..." );
116
133
134
+ // create object instance
117
135
jobject obj_JavaClass = jni_env->NewObject (cls_JavaClass, mid_JavaClass, nullptr );
118
136
// return object with a global reference
119
-
120
- DEBUG (" Calling jni_env->NewGlobalRef(obj_JavaClass)" );
121
-
122
137
return jni_env->NewGlobalRef (obj_JavaClass);
123
138
}
124
139
0 commit comments