aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2016-07-20 15:52:51 +0300
committerBogDan Vatra <bogdan@kdab.com>2016-07-20 13:04:20 +0000
commitf9be94cb60925d67b19e1bbbbeaa70aa575c4933 (patch)
treebf45a9cbaa5d55e1adcd34d76cc7fc8593aa9654
parentb1c4135bfe16192376b2386e5bb1d7a0947a3061 (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! [1] Workaround https://code.google.com/p/android/issues/detail?id=215069 Change-Id: Id04f7e55ee93ec5adef791809eca481fdfdbab4e Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-rw-r--r--src/plugins/gamepads/android/src/qandroidgamepadbackend.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/plugins/gamepads/android/src/qandroidgamepadbackend.cpp b/src/plugins/gamepads/android/src/qandroidgamepadbackend.cpp
index 492e123..009e0eb 100644
--- a/src/plugins/gamepads/android/src/qandroidgamepadbackend.cpp
+++ b/src/plugins/gamepads/android/src/qandroidgamepadbackend.cpp
@@ -608,6 +608,11 @@ void QAndroidGamepadBackend::saveData(const QAndroidGamepadBackend::Mapping &dev
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
{
+ static bool initialized = false;
+ if (initialized)
+ return JNI_VERSION_1_6;
+ initialized = true;
+
JNIEnv* env;
// get the JNIEnv pointer.
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)