From 1db90754826730dc810b92f9a741243b90ae8da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Tue, 24 Sep 2013 18:04:14 +0200 Subject: Android: Use the application's class loader when loading Java classes. Previously the system class loader was used, which meant only system Java classes where available. With this change it's no longer necessary to add a JNI_OnLoad() to get a handle to application specific classes. Change-Id: Ic8fe35b4e525bfeb1d317d5ba6b496e39bf9bb30 Reviewed-by: Yoann Lopes --- src/corelib/kernel/qjnihelpers.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/corelib/kernel/qjnihelpers.cpp') diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index a95194b66a..fbcd0606e6 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -45,6 +45,7 @@ QT_BEGIN_NAMESPACE static JavaVM *g_javaVM = Q_NULLPTR; static jobject g_jActivity = Q_NULLPTR; +static jobject g_jClassLoader = Q_NULLPTR; static inline bool exceptionCheck(JNIEnv *env) { @@ -79,6 +80,20 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) if (exceptionCheck(env)) return JNI_ERR; + + + jmethodID classLoaderMethodID = env->GetStaticMethodID(jQtNative, + "classLoader", + "()Ljava/lang/ClassLoader;"); + + if (exceptionCheck(env)) + return JNI_ERR; + + jobject classLoader = env->CallStaticObjectMethod(jQtNative, classLoaderMethodID); + if (exceptionCheck(env)) + return JNI_ERR; + + g_jClassLoader = env->NewGlobalRef(classLoader); g_jActivity = env->NewGlobalRef(activity); g_javaVM = vm; @@ -96,4 +111,9 @@ JavaVM *QtAndroidPrivate::javaVM() return g_javaVM; } +jobject QtAndroidPrivate::classLoader() +{ + return g_jClassLoader; +} + QT_END_NAMESPACE -- cgit v1.2.3