bool registerNatives(JNIEnv *env)
    {
        jclass appClass = QtAndroid::applicationClass();

        GET_AND_CHECK_STATIC_METHOD(m_registerClipboardManagerMethodID, appClass, "registerClipboardManager", "()V");
        GET_AND_CHECK_STATIC_METHOD(m_setClipboardTextMethodID, appClass, "setClipboardText", "(Ljava/lang/String;)V");
        GET_AND_CHECK_STATIC_METHOD(m_hasClipboardTextMethodID, appClass, "hasClipboardText", "()Z");
        GET_AND_CHECK_STATIC_METHOD(m_getClipboardTextMethodID, appClass, "getClipboardText", "()Ljava/lang/String;");

        return true;
    }
    bool registerNatives(JNIEnv *env)
    {
        jclass appClass = QtAndroid::applicationClass();

        if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
            __android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed");
            return false;
        }

        GET_AND_CHECK_STATIC_METHOD(m_showSoftwareKeyboardMethodID, appClass, "showSoftwareKeyboard", "(IIIII)V");
        GET_AND_CHECK_STATIC_METHOD(m_resetSoftwareKeyboardMethodID, appClass, "resetSoftwareKeyboard", "()V");
        GET_AND_CHECK_STATIC_METHOD(m_hideSoftwareKeyboardMethodID, appClass, "hideSoftwareKeyboard", "()V");
        GET_AND_CHECK_STATIC_METHOD(m_isSoftwareKeyboardVisibleMethodID, appClass, "isSoftwareKeyboardVisible", "()Z");
        GET_AND_CHECK_STATIC_METHOD(m_updateSelectionMethodID, appClass, "updateSelection", "(IIII)V");
        return true;
    }
int AndroidAssetsFileEngineHandler::registerNatives(JNIEnv *env)
{
	__android_log_print(ANDROID_LOG_INFO, g_kjpbsTag, "in registerNatives");

	if (env == NULL) return JNI_FALSE;

	if (g_assetManager == NULL) {
		jclass clazz;
		FIND_AND_CHECK_CLASS("org/qtproject/qt5/android/QtNative");
		g_applicationClass = static_cast<jclass>(env->NewGlobalRef(clazz));

		jmethodID methodID;

		GET_AND_CHECK_STATIC_METHOD(methodID, g_applicationClass, "activity", "()Landroid/app/Activity;");
		jobject objActivity = env->CallStaticObjectMethod(g_applicationClass, methodID);

		clazz = env->GetObjectClass(objActivity);

		GET_AND_CHECK_METHOD(methodID, clazz, "getPackageCodePath", "()Ljava/lang/String;");
		jobject objPackageCodePath = env->CallObjectMethod(objActivity, methodID);

		const char *jstrPackageCodePath;
		jboolean isCopy = JNI_FALSE;
		jstrPackageCodePath = env->GetStringUTFChars((jstring) objPackageCodePath, &isCopy);
		g_strPackageCodePath = QString::fromUtf8(jstrPackageCodePath);
		__android_log_print(ANDROID_LOG_INFO, g_kjpbsTag, QString("PackageCodePath: %1").arg(AndroidAssetsFileEngineHandler::packageCodePath()).toUtf8().data());


		FIND_AND_CHECK_CLASS("android/content/ContextWrapper");
		GET_AND_CHECK_METHOD(methodID, clazz, "getAssets", "()Landroid/content/res/AssetManager;");

		g_assetManager = AAssetManager_fromJava(env, env->CallObjectMethod(objActivity, methodID));

		if (g_assetManager == NULL) {
			__android_log_print(ANDROID_LOG_FATAL, g_kjpbsTag, "assetManager_fromJava returned NULL");
		}


////		QAndroidJniObject
////		GET_AND_CHECK_STATIC_METHOD(methodID, m_applicationClass, "activity", "()Landroid/app/Activity;");
////	    jobject activityObject = env->CallStaticObjectMethod(m_applicationClass, methodID);
//
//		QAndroidJniObject activityObject("android/app/Activity");
//		jclass clazz = env->FindClass("android/content/ContextWrapper");
//		methodID = env->GetMethodID(clazz, "getAssets", "()Landroid/content/res/AssetManager;");
//		g_assetManager = AAssetManager_fromJava(env, env->CallObjectMethod(activityObject.object<jobject>(), methodID));
	}

	__android_log_print(ANDROID_LOG_INFO, g_kjpbsTag, "registerNatives complete");

	return JNI_TRUE;
}
static bool registerNatives(JNIEnv *env)
{
    jclass clazz;
    FIND_AND_CHECK_CLASS("org/qtproject/qt5/android/sensors/QtSensors");
    sensorsClass = static_cast<jclass>(env->NewGlobalRef(clazz));

    if (env->RegisterNatives(sensorsClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
        __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives failed");
        return JNI_FALSE;
    }

    GET_AND_CHECK_STATIC_METHOD(getSensorListMethodId, sensorsClass, "getSensorList", "()[I");
    GET_AND_CHECK_STATIC_METHOD(registerSensorMethodId, sensorsClass, "registerSensor", "(II)Z");
    GET_AND_CHECK_STATIC_METHOD(unregisterSensorMethodId, sensorsClass, "unregisterSensor", "(I)Z");
    GET_AND_CHECK_STATIC_METHOD(getSensorDescriptionMethodId, sensorsClass, "getSensorDescription", "(I)Ljava/lang/String;");
    GET_AND_CHECK_STATIC_METHOD(getSensorMaximumRangeMethodId, sensorsClass, "getSensorMaximumRange", "(I)F");
    GET_AND_CHECK_STATIC_METHOD(getCompassAzimuthId, sensorsClass, "getCompassAzimuth", "(FFFFFF)F");

    return true;
}
    bool registerNatives(JNIEnv *env)
    {
        if (QtAndroidPrivate::androidSdkVersion() < 16)
            return true; // We need API level 16 or higher

        jclass clazz;
        FIND_AND_CHECK_CLASS("org/qtproject/qt5/android/accessibility/QtNativeAccessibility");
        jclass appClass = static_cast<jclass>(env->NewGlobalRef(clazz));

        if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
            __android_log_print(ANDROID_LOG_FATAL,"Qt A11y", "RegisterNatives failed");
            return false;
        }

        jclass nodeInfoClass = env->FindClass("android/view/accessibility/AccessibilityNodeInfo");
        GET_AND_CHECK_STATIC_METHOD(m_addActionMethodID, nodeInfoClass, "addAction", "(I)V");
        GET_AND_CHECK_STATIC_METHOD(m_setCheckableMethodID, nodeInfoClass, "setCheckable", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setCheckedMethodID, nodeInfoClass, "setChecked", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setClickableMethodID, nodeInfoClass, "setClickable", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setContentDescriptionMethodID, nodeInfoClass, "setContentDescription", "(Ljava/lang/CharSequence;)V");
        GET_AND_CHECK_STATIC_METHOD(m_setEnabledMethodID, nodeInfoClass, "setEnabled", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setFocusableMethodID, nodeInfoClass, "setFocusable", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setFocusedMethodID, nodeInfoClass, "setFocused", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setScrollableMethodID, nodeInfoClass, "setScrollable", "(Z)V");
        GET_AND_CHECK_STATIC_METHOD(m_setVisibleToUserMethodID, nodeInfoClass, "setVisibleToUser", "(Z)V");

        if (QtAndroidPrivate::androidSdkVersion() >= 18) {
            GET_AND_CHECK_STATIC_METHOD(m_setTextSelectionMethodID, nodeInfoClass, "setTextSelection", "(II)V");
        }

        return true;
    }