Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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.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::className<Class>().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#if QT_DEPRECATED_SINCE(6, 2)
68 // ### Qt 7: remove
69 QT_DEPRECATED_VERSION_X_6_2("Use the overload with a const JNINativeMethod[] instead.")
70 bool registerNativeMethods(const char *className, JNINativeMethod methods[], int size);
71#endif
72
73 enum class OutputMode {
74 Silent,
75 Verbose
76 };
77
78 bool checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose);
79 static bool checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose);
80
81private:
82 Q_DISABLE_COPY_MOVE(QJniEnvironment)
84};
85
87
88#endif
89
90#endif // QJNI_ENVIRONMENT_H
static JNINativeMethod methods[]
\inmodule QtCore
\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)
const char className[16]
[1]
Definition qwizard.cpp:100