diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2020-01-15 10:57:54 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2020-01-16 13:46:22 +0200 |
commit | cb74352f3ad9cac58a60c36513edbeb6c65c0562 (patch) | |
tree | d7370818a8a17a2286cace66a79247fb11a089fb | |
parent | 0c5493b7e31f96277851667a9c0c04f0d7c9d750 (diff) |
Fix a ClassNotFoundException crash on app start
This is equivalent to e6034a4740756334317ab2445b518a645930f4f4 in
qtbase, and needed because of a bug on Android that causes JNI_OnLoad()
to be called multiple times for the same library.
Fixes: QTBUG-80995
Change-Id: I86686feeb30f13cf56ea13c98bed3d5b799dfd90
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-rw-r--r-- | src/purchasing/inapppurchase/android/qandroidjni.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/purchasing/inapppurchase/android/qandroidjni.cpp b/src/purchasing/inapppurchase/android/qandroidjni.cpp index 3c4d700..d1f4920 100644 --- a/src/purchasing/inapppurchase/android/qandroidjni.cpp +++ b/src/purchasing/inapppurchase/android/qandroidjni.cpp @@ -119,15 +119,23 @@ static JNINativeMethod methods[] = { {"purchaseFailed", "(JIILjava/lang/String;)V", (void *)purchaseFailed} }; -jint JNICALL JNI_OnLoad(JavaVM *vm, void *) +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + static bool initialized = false; + if (initialized) + return JNI_VERSION_1_6; + initialized = true; + JNIEnv *env; - if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_4) != JNI_OK) - return JNI_FALSE; + if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6) != JNI_OK) + return JNI_ERR; jclass clazz = env->FindClass("org/qtproject/qt5/android/purchasing/QtInAppPurchase"); + if (!clazz) + return JNI_ERR; + if (env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0) - return JNI_FALSE; + return JNI_ERR; - return JNI_VERSION_1_4; + return JNI_VERSION_1_6; } |