home.social

#jni — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #jni, aggregated by home.social.

  1. Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива

    Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:

    habr.com/ru/articles/1017486/

    #Java #C++ #ООП #Dalvik #JNI #android

  2. Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива

    Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:

    habr.com/ru/articles/1017486/

    #Java #C++ #ООП #Dalvik #JNI #android

  3. Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива

    Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:

    habr.com/ru/articles/1017486/

    #Java #C++ #ООП #Dalvik #JNI #android

  4. Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива

    Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:

    habr.com/ru/articles/1017486/

    #Java #C++ #ООП #Dalvik #JNI #android

  5. Previously I shared a blog post comparing Java JNI and FFM examples, the follow up is compiling these back to native images using GraalVM lofthouse.dev/2026/02/20/java-

  6. Previously I shared a blog post comparing Java JNI and FFM examples, the follow up is compiling these back to native images using GraalVM lofthouse.dev/2026/02/20/java- #JNI #FFM #Native #Java #GraalVM

  7. Previously I shared a blog post comparing Java JNI and FFM examples, the follow up is compiling these back to native images using GraalVM lofthouse.dev/2026/02/20/java- #JNI #FFM #Native #Java #GraalVM

  8. “Is it worth to run #Java on #ARM?” If your stack depends on old #JNI libraries, the answer may be complicated. @ArturSkowronski outlines the main migration blockers & possible workarounds. Want the decision framework?

    Read here: javapro.io/2025/12/05/is-it-wo

    @awscloud #performance

  9. “Is it worth to run #Java on #ARM?” If your stack depends on old #JNI libraries, the answer may be complicated. @ArturSkowronski outlines the main migration blockers & possible workarounds. Want the decision framework?

    Read here: javapro.io/2025/12/05/is-it-wo

    @awscloud #performance

  10. Jextract : "jextract is a tool which mechanically generates Java bindings from native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API."

    github.com/openjdk/jextract

    #java #jni #C

  11. Jextract : "jextract is a tool which mechanically generates Java bindings from native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API."

    github.com/openjdk/jextract

    #java #jni #C

  12. Jextract : "jextract is a tool which mechanically generates Java bindings from native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API."

    github.com/openjdk/jextract

    #java #jni #C

  13. Jextract : "jextract is a tool which mechanically generates Java bindings from native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API."

    github.com/openjdk/jextract

    #java #jni #C

  14. Jextract : "jextract is a tool which mechanically generates Java bindings from native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API."

    github.com/openjdk/jextract

    #java #jni #C

  15. Getting GPS coordinates from Android through Go wasn't easy, but it's done. It's straightforward when you get the JNI weirdness, but it's a lot of boilerplate and hard to debug.

    I'll try to integrate directly it into Fyne with a nice API in the future.

    #fyne #golang #jni #android

  16. Getting GPS coordinates from Android through Go wasn't easy, but it's done. It's straightforward when you get the JNI weirdness, but it's a lot of boilerplate and hard to debug.

    I'll try to integrate directly it into Fyne with a nice API in the future.

    #fyne #golang #jni #android

  17. Getting GPS coordinates from Android through Go wasn't easy, but it's done. It's straightforward when you get the JNI weirdness, but it's a lot of boilerplate and hard to debug.

    I'll try to integrate directly it into Fyne with a nice API in the future.

  18. Getting GPS coordinates from Android through Go wasn't easy, but it's done. It's straightforward when you get the JNI weirdness, but it's a lot of boilerplate and hard to debug.

    I'll try to integrate directly it into Fyne with a nice API in the future.

    #fyne #golang #jni #android

  19. Getting GPS coordinates from Android through Go wasn't easy, but it's done. It's straightforward when you get the JNI weirdness, but it's a lot of boilerplate and hard to debug.

    I'll try to integrate directly it into Fyne with a nice API in the future.

    #fyne #golang #jni #android

  20. Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом

    Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.

    habr.com/ru/companies/yandex/a

    #яндекс #с++ #jni #java

  21. Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом

    Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.

    habr.com/ru/companies/yandex/a

    #яндекс #с++ #jni #java

  22. Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом

    Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.

    habr.com/ru/companies/yandex/a

    #яндекс #с++ #jni #java

  23. Погружение в JNI: проблемы и решения при взаимодействии между JVM и нативным кодом

    Привет! Меня зовут Геннадий Денисов, я руковожу одной из команд разработки мобильного Яндекс Браузера для Android. Недавно в рамках одного проекта мы интегрировали С++‑код в мобильное приложение Браузера. В этой статье я поделюсь основными нюансами работы с Java Native Interface (JNI), инструментами для упрощения разработки и подробностями нашего подхода.

    habr.com/ru/companies/yandex/a

    #яндекс #с++ #jni #java

  24. 🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦‍♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
    medium.com/@greptime/how-to-su #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated

  25. 🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦‍♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
    medium.com/@greptime/how-to-su #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated

  26. 🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦‍♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
    medium.com/@greptime/how-to-su #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated

  27. 🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦‍♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
    medium.com/@greptime/how-to-su #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated

  28. For most of my career I have stayed in the Java space and not strayed into native code, recently I have been experimenting with those two worlds coming together include with the new Foreign Function APIs.

    This is just a record of my experimentation so far but in case someone finds it useful I have published as a blog post lofthouse.dev/2025/03/29/begin

  29. For most of my career I have stayed in the Java space and not strayed into native code, recently I have been experimenting with those two worlds coming together include with the new Foreign Function APIs.

    This is just a record of my experimentation so far but in case someone finds it useful I have published as a blog post lofthouse.dev/2025/03/29/begin

    #Java #Native #JNI #ForeignFunction

  30. For most of my career I have stayed in the Java space and not strayed into native code, recently I have been experimenting with those two worlds coming together include with the new Foreign Function APIs.

    This is just a record of my experimentation so far but in case someone finds it useful I have published as a blog post lofthouse.dev/2025/03/29/begin

    #Java #Native #JNI #ForeignFunction

  31. #Android friends, how do you unit test your #JNI / #KNI code? Do you write extra KNI glue just so you can trigger internal native methods that call back out into #Kotlin?

    Do you restrict yourself to only integration tests and black-box tests and just *not* unit-test this stuff?

    All solutions we’ve tried/considered so far kinda feel bad.

    (I'm mostly dealing with C/C++ and Kotlin)

  32. #Android friends, how do you unit test your #JNI / #KNI code? Do you write extra KNI glue just so you can trigger internal native methods that call back out into #Kotlin?

    Do you restrict yourself to only integration tests and black-box tests and just *not* unit-test this stuff?

    All solutions we’ve tried/considered so far kinda feel bad.

    (I'm mostly dealing with C/C++ and Kotlin)

  33. #Android friends, how do you unit test your #JNI / #KNI code? Do you write extra KNI glue just so you can trigger internal native methods that call back out into #Kotlin?

    Do you restrict yourself to only integration tests and black-box tests and just *not* unit-test this stuff?

    All solutions we’ve tried/considered so far kinda feel bad.

    (I'm mostly dealing with C/C++ and Kotlin)

  34. #Android friends, how do you unit test your #JNI / #KNI code? Do you write extra KNI glue just so you can trigger internal native methods that call back out into #Kotlin?

    Do you restrict yourself to only integration tests and black-box tests and just *not* unit-test this stuff?

    All solutions we’ve tried/considered so far kinda feel bad.

    (I'm mostly dealing with C/C++ and Kotlin)

  35. #Android friends, how do you unit test your #JNI / #KNI code? Do you write extra KNI glue just so you can trigger internal native methods that call back out into #Kotlin?

    Do you restrict yourself to only integration tests and black-box tests and just *not* unit-test this stuff?

    All solutions we’ve tried/considered so far kinda feel bad.

    (I'm mostly dealing with C/C++ and Kotlin)

  36. [Перевод] Кофе и крабы. Вызов Rust-кода из Java

    Java — один из наиболее часто используемых языков программирования, который мы еще не обсуждали в нашем Rust Interop Guide . В этой статье мы рассмотрим три различных метода вызова кода Rust из Java : JNI , JNR-FFI и Project Panama . Мы покажем различия между этими методами и проведем базовый бенчмаркинг для сравнения их производительности. Эти методы работают не только для Java , но и для других языков JVM, таких как Kotlin . Здесь мы в основном сосредоточимся на Java , но примеры Kotlin доступны в ветке Kotlin нашего репозитория GitHub . Эта статья является частью нашего Rust Interop Guide .

    habr.com/ru/articles/884150/

    #rust #java #interop #ffi #project_panama #jni #jnr

  37. [Перевод] Кофе и крабы. Вызов Rust-кода из Java

    Java — один из наиболее часто используемых языков программирования, который мы еще не обсуждали в нашем Rust Interop Guide . В этой статье мы рассмотрим три различных метода вызова кода Rust из Java : JNI , JNR-FFI и Project Panama . Мы покажем различия между этими методами и проведем базовый бенчмаркинг для сравнения их производительности. Эти методы работают не только для Java , но и для других языков JVM, таких как Kotlin . Здесь мы в основном сосредоточимся на Java , но примеры Kotlin доступны в ветке Kotlin нашего репозитория GitHub . Эта статья является частью нашего Rust Interop Guide .

    habr.com/ru/articles/884150/

    #rust #java #interop #ffi #project_panama #jni #jnr

  38. [Перевод] Кофе и крабы. Вызов Rust-кода из Java

    Java — один из наиболее часто используемых языков программирования, который мы еще не обсуждали в нашем Rust Interop Guide . В этой статье мы рассмотрим три различных метода вызова кода Rust из Java : JNI , JNR-FFI и Project Panama . Мы покажем различия между этими методами и проведем базовый бенчмаркинг для сравнения их производительности. Эти методы работают не только для Java , но и для других языков JVM, таких как Kotlin . Здесь мы в основном сосредоточимся на Java , но примеры Kotlin доступны в ветке Kotlin нашего репозитория GitHub . Эта статья является частью нашего Rust Interop Guide .

    habr.com/ru/articles/884150/

    #rust #java #interop #ffi #project_panama #jni #jnr

  39. [Перевод] Кофе и крабы. Вызов Rust-кода из Java

    Java — один из наиболее часто используемых языков программирования, который мы еще не обсуждали в нашем Rust Interop Guide . В этой статье мы рассмотрим три различных метода вызова кода Rust из Java : JNI , JNR-FFI и Project Panama . Мы покажем различия между этими методами и проведем базовый бенчмаркинг для сравнения их производительности. Эти методы работают не только для Java , но и для других языков JVM, таких как Kotlin . Здесь мы в основном сосредоточимся на Java , но примеры Kotlin доступны в ветке Kotlin нашего репозитория GitHub . Эта статья является частью нашего Rust Interop Guide .

    habr.com/ru/articles/884150/

    #rust #java #interop #ffi #project_panama #jni #jnr

  40. It has been [0] days since I passed a Java ByteArray object into a C function instead of the GetArrayElements() pointer inside it. #jni

  41. It has been [0] days since I passed a Java ByteArray object into a C function instead of the GetArrayElements() pointer inside it. #jni

  42. It has been [0] days since I passed a Java ByteArray object into a C function instead of the GetArrayElements() pointer inside it. #jni

  43. It has been [0] days since I passed a Java ByteArray object into a C function instead of the GetArrayElements() pointer inside it. #jni

  44. It has been [0] days since I passed a Java ByteArray object into a C function instead of the GetArrayElements() pointer inside it. #jni

  45. [Перевод] Java становится надежнее: “Целостность по умолчанию” в действии

    Команда Spring АйО перевела статью про ужесточение контроля за динамической загрузкой агентов, ограничения доступа к опасным методам работы с памятью и JNI в новых версиях JDK.

    habr.com/ru/companies/spring_a

    #java #spring #java_platform #integrity_in_java #jni