Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qjnienvironment.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QJNI_ENVIRONMENT_H
5#define QJNI_ENVIRONMENT_H
6
7#include <QtCore/QScopedPointer>
8
9#if defined(Q_QDOC) || defined(Q_OS_ANDROID)
10#include <jni.h>
11#include <QtCore/qjnitypes_impl.h>
12
14
16
17class Q_CORE_EXPORT QJniEnvironment
18{
19public:
22 bool isValid() const;
23 JNIEnv *operator->() const;
24 JNIEnv &operator*() const;
25 JNIEnv *jniEnv() const;
26 jclass findClass(const char *className);
27 template<typename Class>
28 jclass findClass() { return findClass(QtJniTypes::Traits<Class>::className().data()); }
29 jmethodID findMethod(jclass clazz, const char *methodName, const char *signature);
30 template<typename ...Args>
31 jmethodID findMethod(jclass clazz, const char *methodName) {
32 constexpr auto signature = QtJniTypes::methodSignature<Args...>();
33 return findMethod(clazz, methodName, signature.data());
34 }
35 jmethodID findStaticMethod(jclass clazz, const char *methodName, const char *signature);
36 template<typename ...Args>
37 jmethodID findStaticMethod(jclass clazz, const char *methodName) {
38 constexpr auto signature = QtJniTypes::methodSignature<Args...>();
39 return findStaticMethod(clazz, methodName, signature.data());
40 }
41 jfieldID findField(jclass clazz, const char *fieldName, const char *signature);
42 template<typename T>
43 jfieldID findField(jclass clazz, const char *fieldName) {
44 constexpr auto signature = QtJniTypes::fieldSignature<T>();
45 return findField(clazz, fieldName, signature.data());
46 }
47 jfieldID findStaticField(jclass clazz, const char *fieldName, const char *signature);
48 template<typename T>
49 jfieldID findStaticField(jclass clazz, const char *fieldName) {
50 constexpr auto signature = QtJniTypes::fieldSignature<T>();
51 return findStaticField(clazz, fieldName, signature.data());
52 }
53 static JavaVM *javaVM();
54 bool registerNativeMethods(const char *className, const JNINativeMethod methods[], int size);
55 bool registerNativeMethods(jclass clazz, const JNINativeMethod methods[], int size);
56
57 bool registerNativeMethods(const char *className, std::initializer_list<JNINativeMethod> methods)
58 {
59 return registerNativeMethods(className, std::data(methods), methods.size());
60 }
61
62 bool registerNativeMethods(jclass clazz, std::initializer_list<JNINativeMethod> methods)
63 {
64 return registerNativeMethods(clazz, std::data(methods), methods.size());
65 }
66
67 template<typename Class
68#ifndef Q_QDOC
69 , std::enable_if_t<QtJniTypes::isObjectType<Class>(), bool> = true
70#endif
71 >
73 bool registerNativeMethods(std::initializer_list<JNINativeMethod> methods)
74 {
75 return registerNativeMethods(QtJniTypes::Traits<Class>::className().data(), methods);
76 }
77
78#if QT_DEPRECATED_SINCE(6, 2)
79 // ### Qt 7: remove
80 QT_DEPRECATED_VERSION_X_6_2("Use the overload with a const JNINativeMethod[] instead.")
81 bool registerNativeMethods(const char *className, JNINativeMethod methods[], int size);
82#endif
83
84 enum class OutputMode {
85 Silent,
86 Verbose
87 };
88
89 bool checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose);
90 static bool checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose);
91
92 static JNIEnv *getJniEnv();
93
94private:
95 Q_DISABLE_COPY_MOVE(QJniEnvironment)
96 QScopedPointer<QJniEnvironmentPrivate> d;
97};
98
100
101#endif
102
103#endif // QJNI_ENVIRONMENT_H
static JNINativeMethod methods[]
\inmodule QtCore
QMetaType signature()
Combined button and popup list for selecting options.
Q_CORE_EXPORT jclass findClass(const char *className, JNIEnv *env)
Q_CORE_EXPORT JavaVM * javaVM()
constexpr timespec operator*(const timespec &t1, int mul)
static QString methodName(const QDBusIntrospection::Method &method)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
#define QT_DEPRECATED_VERSION_X_6_2(text)
#define QT_TECH_PREVIEW_API
const char className[16]
[1]
Definition qwizard.cpp:100