Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Смысл нативки?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
28 Ноя 2025
Сообщения
19
Реакции
0
Всем привет, дайте пожалуйста бригаду - что такое нативка, я вообще не понимаю, можете дать бригаду что это в протах и как она защищает
 
код твой из джава вызовов приводит к jni C++
т.е, был у тя метод
java hello:
Expand Collapse Copy
package ru.fruzz.test;

public class Test {
    
    public void print() {
        System.out.println("Hello, world!");
    }
}

а превратится в такой
java native hello:
Expand Collapse Copy
package ru.fruzz.test;

public class Test {

    public native void print(); // print в данном случае не будет иметь тела, реализация унесена в натив

}
native C++:
Expand Collapse Copy
JNIEXPORT void JNICALL Java_ru_fruzz_test_Test_print(JNIEnv* env, jobject obj) {
    jclass systemClass = env->FindClass("java/lang/System");
    jfieldID outField = env->GetStaticFieldID(systemClass, "out", "Ljava/io/PrintStream;");
    jobject outObj = env->GetStaticObjectField(systemClass, outField);
    jclass printStreamClass = env->GetObjectClass(outObj);
    jmethodID printlnMethod = env->GetMethodID(printStreamClass, "println", "(Ljava/lang/String;)V");
    jstring message = env->NewStringUTF("Hello, world!");
    env->CallVoidMethod(outObj, printlnMethod, message);
}
 
код твой из джава вызовов приводит к jni C++
т.е, был у тя метод
java hello:
Expand Collapse Copy
package ru.fruzz.test;

public class Test {
   
    public void print() {
        System.out.println("Hello, world!");
    }
}

а превратится в такой
java native hello:
Expand Collapse Copy
package ru.fruzz.test;

public class Test {

    public native void print(); // print в данном случае не будет иметь тела, реализация унесена в натив

}
native C++:
Expand Collapse Copy
JNIEXPORT void JNICALL Java_ru_fruzz_test_Test_print(JNIEnv* env, jobject obj) {
    jclass systemClass = env->FindClass("java/lang/System");
    jfieldID outField = env->GetStaticFieldID(systemClass, "out", "Ljava/io/PrintStream;");
    jobject outObj = env->GetStaticObjectField(systemClass, outField);
    jclass printStreamClass = env->GetObjectClass(outObj);
    jmethodID printlnMethod = env->GetMethodID(printStreamClass, "println", "(Ljava/lang/String;)V");
    jstring message = env->NewStringUTF("Hello, world!");
    env->CallVoidMethod(outObj, printlnMethod, message);
}
Сильно благодарен за подробный пример, буду пользоваться!)
 
Назад
Сверху Снизу