path: root/src/plugins/platforms
diff options
authorBogDan Vatra <>2016-07-20 14:56:01 +0300
committerBogDan Vatra <>2016-07-20 14:33:31 +0000
commite6034a4740756334317ab2445b518a645930f4f4 (patch)
tree9bffd78fb3d12a89b124137d9c8066adbafe40b1 /src/plugins/platforms
parentd2c98368d7885108112897230130adc2b459dc12 (diff)
Make sure JNI_OnLoad is not called more than once
Since Android 5.0 Google introduce a nasty bug[1] which calls JNI_OnLoad more than once. Basically every time when a library is loaded JNI_OnLoad is called if found, but it calls *again* JNI_OnLoad of its .so dependencies! So, JNI_OnLoad of gets called may times, this is not a problem as long as it's called from Qt's java delegate class loader. The problem is that the application .so file *must* be called from default class loader to allow the user to find his custom Activity/Service stuff. [1] Workaround Change-Id: Ia71209658ef56056b560018597608acf7cb0f9ea Reviewed-by: Eskil Abrahamsen Blomfeldt <>
Diffstat (limited to 'src/plugins/platforms')
1 files changed, 5 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index ac37e7bd92..671dad98b2 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -822,6 +822,11 @@ QT_END_NAMESPACE
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
+ static bool initialized = false;
+ if (initialized)
+ return JNI_VERSION_1_6;
+ initialized = true;
typedef union {
JNIEnv *nativeEnvironment;