Files
AndroidNativeUsb/app/src/main/cpp/JBindings.h
T

35 lines
930 B
C++
Raw Normal View History

2025-05-13 01:14:56 +03:00
#pragma once
#include "JniContext.h"
#include <optional>
class JBindings {
protected:
JBindings(const char* className) {
JNIEnv* env = JniContext::getJniEnv();
_class = findClass(env, className);
}
std::optional<jfieldID> getStaticFieldID(const char* name, const char* signature) {
try{
auto result = JniContext::getJniEnv()->GetStaticFieldID(_class, name, signature);
JniContext::checkException();
return result;
}catch(...){
return std::nullopt;
}
}
//
static jclass findClass(JNIEnv* env, const char* className) {
auto classLocalRef = env->FindClass(className);
if(classLocalRef == nullptr){
return nullptr;
}
auto globalRef = (jclass)env->NewGlobalRef(classLocalRef);
env->DeleteLocalRef(classLocalRef);
return globalRef;
}
jclass _class;
};