Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
#include <jni.h>
#include <iostream>
#include <string>
// Функция для дампа класса AKRIEN
extern "C" JNIEXPORT void JNICALL Java_com_example_AKRIENDumper_dumpAKRIENClass(JNIEnv *env, jobject obj) {
jclass akrienClass = env->FindClass("com/example/AKRIEN");
if (akrienClass == nullptr) {
std::cerr << "Класс AKRIEN не найден!" << std::endl;
return;
}
// Получаем информацию о методах
jmethodID* methods = nullptr;
jint methodCount = 0;
JNIEnv* jniEnv = env;
// Получаем методы
jclass classClass = jniEnv->GetObjectClass(akrienClass);
jmethodID getMethodsID = jniEnv->GetMethodID(classClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
jobjectArray methodsArray = (jobjectArray)jniEnv->CallObjectMethod(akrienClass, getMethodsID);
methodCount = jniEnv->GetArrayLength(methodsArray);
std::cout << "=== Методы класса AKRIEN ===" << std::endl;
for (int i = 0; i < methodCount; i++) {
jobject method = jniEnv->GetObjectArrayElement(methodsArray, i);
jclass methodClass = jniEnv->GetObjectClass(method);
// Получаем имя метода
jmethodID getNameID = jniEnv->GetMethodID(methodClass, "getName", "()Ljava/lang/String;");
jstring methodName = (jstring)jniEnv->CallObjectMethod(method, getNameID);
const char* methodNameStr = jniEnv->GetStringUTFChars(methodName, nullptr);
// Получаем тип возвращаемого значения
jmethodID getReturnTypeID = jniEnv->GetMethodID(methodClass, "getReturnType", "()Ljava/lang/Class;");
jobject returnType = jniEnv->CallObjectMethod(method, getReturnTypeID);
jclass returnTypeClass = jniEnv->GetObjectClass(returnType);
jmethodID getClassNameID = jniEnv->GetMethodID(returnTypeClass, "getName", "()Ljava/lang/String;");
jstring returnTypeName = (jstring)jniEnv->CallObjectMethod(returnType, getClassNameID);
const char* returnTypeNameStr = jniEnv->GetStringUTFChars(returnTypeName, nullptr);
std::cout << "Метод: " << methodNameStr << " -> " << returnTypeNameStr << std::endl;
jniEnv->ReleaseStringUTFChars(methodName, methodNameStr);
jniEnv->ReleaseStringUTFChars(returnTypeName, returnTypeNameStr);
}
// Получаем поля
jmethodID getFieldsID = jniEnv->GetMethodID(classClass, "getDeclaredFields", "()[Ljava/lang/reflect/Field;");
jobjectArray fieldsArray = (jobjectArray)jniEnv->CallObjectMethod(akrienClass, getFieldsID);
jint fieldCount = jniEnv->GetArrayLength(fieldsArray);
std::cout << "=== Поля класса AKRIEN ===" << std::endl;
for (int i = 0; i < fieldCount; i++) {
jobject field = jniEnv->GetObjectArrayElement(fieldsArray, i);
jclass fieldClass = jniEnv->GetObjectClass(field);
// Получаем имя поля
jmethodID getNameID = jniEnv->GetMethodID(fieldClass, "getName", "()Ljava/lang/String;");
jstring fieldName = (jstring)jniEnv->CallObjectMethod(field, getNameID);
const char* fieldNameStr = jniEnv->GetStringUTFChars(fieldName, nullptr);
// Получаем тип поля
jmethodID getTypeID = jniEnv->GetMethodID(fieldClass, "getType", "()Ljava/lang/Class;");
jobject fieldType = jniEnv->CallObjectMethod(field, getTypeID);
jclass fieldTypeClass = jniEnv->GetObjectClass(fieldType);
jmethodID getClassNameID = jniEnv->GetMethodID(fieldTypeClass, "getName", "()Ljava/lang/String;");
jstring fieldTypeName = (jstring)jniEnv->CallObjectMethod(fieldType, getClassNameID);
const char* fieldTypeNameStr = jniEnv->GetStringUTFChars(fieldTypeName, nullptr);
std::cout << "Поле: " << fieldNameStr << " : " << fieldTypeNameStr << std::endl;
jniEnv->ReleaseStringUTFChars(fieldName, fieldNameStr);
jniEnv->ReleaseStringUTFChars(fieldTypeName, fieldTypeNameStr);
}
}
и на джави 17
public class AKRIENDumper {
static {
System.loadLibrary("AKRIENDumper"); // Загружаем нативную библиотеку
}
// Нативный метод для дампа класса AKRIEN
public native void dumpAKRIENClass();
public static void main(String[] args) {
AKRIENDumper dumper = new AKRIENDumper();
dumper.dumpAKRIENClass();
}
}
#include <iostream>
#include <string>
// Функция для дампа класса AKRIEN
extern "C" JNIEXPORT void JNICALL Java_com_example_AKRIENDumper_dumpAKRIENClass(JNIEnv *env, jobject obj) {
jclass akrienClass = env->FindClass("com/example/AKRIEN");
if (akrienClass == nullptr) {
std::cerr << "Класс AKRIEN не найден!" << std::endl;
return;
}
// Получаем информацию о методах
jmethodID* methods = nullptr;
jint methodCount = 0;
JNIEnv* jniEnv = env;
// Получаем методы
jclass classClass = jniEnv->GetObjectClass(akrienClass);
jmethodID getMethodsID = jniEnv->GetMethodID(classClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
jobjectArray methodsArray = (jobjectArray)jniEnv->CallObjectMethod(akrienClass, getMethodsID);
methodCount = jniEnv->GetArrayLength(methodsArray);
std::cout << "=== Методы класса AKRIEN ===" << std::endl;
for (int i = 0; i < methodCount; i++) {
jobject method = jniEnv->GetObjectArrayElement(methodsArray, i);
jclass methodClass = jniEnv->GetObjectClass(method);
// Получаем имя метода
jmethodID getNameID = jniEnv->GetMethodID(methodClass, "getName", "()Ljava/lang/String;");
jstring methodName = (jstring)jniEnv->CallObjectMethod(method, getNameID);
const char* methodNameStr = jniEnv->GetStringUTFChars(methodName, nullptr);
// Получаем тип возвращаемого значения
jmethodID getReturnTypeID = jniEnv->GetMethodID(methodClass, "getReturnType", "()Ljava/lang/Class;");
jobject returnType = jniEnv->CallObjectMethod(method, getReturnTypeID);
jclass returnTypeClass = jniEnv->GetObjectClass(returnType);
jmethodID getClassNameID = jniEnv->GetMethodID(returnTypeClass, "getName", "()Ljava/lang/String;");
jstring returnTypeName = (jstring)jniEnv->CallObjectMethod(returnType, getClassNameID);
const char* returnTypeNameStr = jniEnv->GetStringUTFChars(returnTypeName, nullptr);
std::cout << "Метод: " << methodNameStr << " -> " << returnTypeNameStr << std::endl;
jniEnv->ReleaseStringUTFChars(methodName, methodNameStr);
jniEnv->ReleaseStringUTFChars(returnTypeName, returnTypeNameStr);
}
// Получаем поля
jmethodID getFieldsID = jniEnv->GetMethodID(classClass, "getDeclaredFields", "()[Ljava/lang/reflect/Field;");
jobjectArray fieldsArray = (jobjectArray)jniEnv->CallObjectMethod(akrienClass, getFieldsID);
jint fieldCount = jniEnv->GetArrayLength(fieldsArray);
std::cout << "=== Поля класса AKRIEN ===" << std::endl;
for (int i = 0; i < fieldCount; i++) {
jobject field = jniEnv->GetObjectArrayElement(fieldsArray, i);
jclass fieldClass = jniEnv->GetObjectClass(field);
// Получаем имя поля
jmethodID getNameID = jniEnv->GetMethodID(fieldClass, "getName", "()Ljava/lang/String;");
jstring fieldName = (jstring)jniEnv->CallObjectMethod(field, getNameID);
const char* fieldNameStr = jniEnv->GetStringUTFChars(fieldName, nullptr);
// Получаем тип поля
jmethodID getTypeID = jniEnv->GetMethodID(fieldClass, "getType", "()Ljava/lang/Class;");
jobject fieldType = jniEnv->CallObjectMethod(field, getTypeID);
jclass fieldTypeClass = jniEnv->GetObjectClass(fieldType);
jmethodID getClassNameID = jniEnv->GetMethodID(fieldTypeClass, "getName", "()Ljava/lang/String;");
jstring fieldTypeName = (jstring)jniEnv->CallObjectMethod(fieldType, getClassNameID);
const char* fieldTypeNameStr = jniEnv->GetStringUTFChars(fieldTypeName, nullptr);
std::cout << "Поле: " << fieldNameStr << " : " << fieldTypeNameStr << std::endl;
jniEnv->ReleaseStringUTFChars(fieldName, fieldNameStr);
jniEnv->ReleaseStringUTFChars(fieldTypeName, fieldTypeNameStr);
}
}
и на джави 17
public class AKRIENDumper {
static {
System.loadLibrary("AKRIENDumper"); // Загружаем нативную библиотеку
}
// Нативный метод для дампа класса AKRIEN
public native void dumpAKRIENClass();
public static void main(String[] args) {
AKRIENDumper dumper = new AKRIENDumper();
dumper.dumpAKRIENClass();
}
}