Работал ли с JNI

«Работал ли с JNI» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с JNI (Java Native Interface). Используется для взаимодействия Java/Kotlin с нативным кодом (C/C++). Основные шаги:

  1. Объявляем native-метод в Java/Kotlin:
external fun nativeMethod(): String
  1. Генерируем заголовочный файл через javac -h
  2. Реализуем нативный код (пример для C++):
#include <jni.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_NativeClass_nativeMethod(JNIEnv* env, jobject) {
    return env->NewStringUTF("Hello from JNI!");
}
  1. Подключаем в CMakeLists.txt и загружаем в Java через System.loadLibrary().

Важно учитывать:

  • Управление памятью (avoid memory leaks)
  • Исключения (CheckJNI, ExceptionCheck)
  • Потокобезопасность (JNIEnv per-thread)
  • Производительность (критичные участки кода)

Пример из практики: интеграция C++ библиотек для обработки изображений.