5#ifndef QJNI_ENVIRONMENT_H
6#define QJNI_ENVIRONMENT_H
8#include <QtCore/QScopedPointer>
10#if defined(Q_QDOC) || defined(Q_OS_ANDROID)
12#include <QtCore/qjnitypes_impl.h>
16class QJniEnvironmentPrivate;
18class Q_CORE_EXPORT QJniEnvironment
24 JNIEnv *operator->()
const;
25 JNIEnv &operator*()
const;
26 JNIEnv *jniEnv()
const;
27 jclass findClass(
const char *className);
28 template<
typename Class>
29 jclass findClass() {
return findClass(QtJniTypes::Traits<Class>::className().data()); }
30 jmethodID findMethod(jclass clazz,
const char *methodName,
const char *signature);
31 template<
typename ...Args>
32 jmethodID findMethod(jclass clazz,
const char *methodName) {
33 constexpr auto signature = QtJniTypes::methodSignature<Args...>();
34 return findMethod(clazz, methodName, signature.data());
36 jmethodID findStaticMethod(jclass clazz,
const char *methodName,
const char *signature);
37 template<
typename ...Args>
38 jmethodID findStaticMethod(jclass clazz,
const char *methodName) {
39 constexpr auto signature = QtJniTypes::methodSignature<Args...>();
40 return findStaticMethod(clazz, methodName, signature.data());
42 jfieldID findField(jclass clazz,
const char *fieldName,
const char *signature);
44 jfieldID findField(jclass clazz,
const char *fieldName) {
45 constexpr auto signature = QtJniTypes::fieldSignature<T>();
46 return findField(clazz, fieldName, signature.data());
48 jfieldID findStaticField(jclass clazz,
const char *fieldName,
const char *signature);
50 jfieldID findStaticField(jclass clazz,
const char *fieldName) {
51 constexpr auto signature = QtJniTypes::fieldSignature<T>();
52 return findStaticField(clazz, fieldName, signature.data());
54 static JavaVM *javaVM();
55 bool registerNativeMethods(
const char *className,
const JNINativeMethod methods[],
int size);
56 bool registerNativeMethods(jclass clazz,
const JNINativeMethod methods[],
int size);
58 bool registerNativeMethods(
const char *className, std::initializer_list<JNINativeMethod> methods)
60 return registerNativeMethods(className, std::data(methods), methods.size());
63 bool registerNativeMethods(jclass clazz, std::initializer_list<JNINativeMethod> methods)
65 return registerNativeMethods(clazz, std::data(methods), methods.size());
68 template<
typename Class
70 , std::enable_if_t<QtJniTypes::isObjectType<Class>(),
bool> =
true
73 bool registerNativeMethods(std::initializer_list<JNINativeMethod> methods)
75 return registerNativeMethods(QtJniTypes::Traits<Class>::className().data(), methods);
78#if QT_DEPRECATED_SINCE(6
, 2
)
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);
84 enum class OutputMode {
89 bool checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose);
90 static bool checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose);
92 static JNIEnv *getJniEnv();
93 static QStringList stackTrace(jthrowable exception);
96 Q_DISABLE_COPY_MOVE(QJniEnvironment)
97 std::unique_ptr<QJniEnvironmentPrivate> d;
~QJniEnvironmentPrivateTLS()
Combined button and popup list for selecting options.