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

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

https://habr.com/ru/articles/1017486/

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

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

Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около пяти лет под IOS, и сейчас переношу свои...

Хабр

🚀 Just released smali-lsp!

A Language Server for Smali with:
• Goto definition
• Cross-references
• Symbols & hover
• Works with any IDE (minimal setup)

Also includes an MCP server → plug into AI agents for faster APK analysis 🤖

🔗 https://github.com/Surendrajat/smali-lsp

#AndroidDev #ReverseEngineering #MalwareAnalysis #LSP #InfoSec #RE #security #dalvik

GitHub - Surendrajat/smali-lsp: Smali language LSP and MCP server

Smali language LSP and MCP server. Contribute to Surendrajat/smali-lsp development by creating an account on GitHub.

GitHub
Mountains in the hinterland of Dalvík (North Iceland)
(August 2019)
(Foto: © Rüdiger Benninghaus)
#Landschaften, #landscapes, #Berge, #mountains, #Dalvík, #Island, #Iceland

Hello Johan 👋
Really appreciate your work and Gluon efforts in keeping JavaFX alive and bringing it to mobile 🚀
GluonFX + GraalVM is truly impressive.

I have a technical question:
With modern GluonFX builds, Android apps seem to support only **arm64-v8a** ABI.

Previously, with JavaFXPorts (javafxmobile plugin), both **armeabi-v7a** and **arm64-v8a** were supported.

@johanvos #JavaFX #Gluon #JavaFXMobile #GluonFX #SubstrateVM #dalvik #AndroidDev #GraalVM

Break during a ride on Icelandic horses near Dalvík (North Iceland).
(August 2019)
(Foto: © Rüdiger Benninghaus)
#Landschaften, #landscapes, #Pferde, #horses, #Dalvík, #Island, #Iceland

Question to the #android and #java bubble:

my #android #app has a minSdkVersion of 14, with a targetSdk of 36.

Will setting source- and targetCompatibility to java version 11 (or above) make it fail to run on early #android versions like #kitkat (4.4.x)?

I wasn't able to find this out, since #android devices do not run a native #jre but #art or the predecessor #dalvik .

Do targetCompatibility and sourceCompatibility even matter at all in this case?

Icelandic horses in Dalvík (northern Iceland). The horse in the foreground had the patience to carry me for an hour.
(August 2019)
(Foto: © Rüdiger Benninghaus)
#Pferde, #horses, #animals, #Dalvík, #Island, #Iceland
Dalvík liegt am Westufer des Eyjafjörður und ist bis heute stark von der Fischerei geprägt. Die Entwicklung des Ortes begann im frühen 20. Jhd, als reiche Fischgründe Fischer aus der Region anzogen. Noch immer bildet die Fischindustrie – vom Fang bis zur Verarbeitung – das wirtschaftliche Rückgrat der Gemeinde. Neben klassischen Betrieben sind auch Zulieferfirmen die z.B. Kunststoffbehälter für die Fischwirtschaft herstellen, Teil des lokalen Wirtschaftskreislaufs.
30.06.2025, #Iceland #NorthIceland #Dalvik #fishingindustry [5]
Ribu at the portal of Múlagöng between Dalvík and Ólafsfjörður
https://www.instagram.com/p/DIHLkUWIJJD
#cyberribu #cybercrime #ribu #dalvík #Iceland #tröllaskagi #dalvíkurbyggd
ribu dein froind on Instagram: "Am ólafsfjarðarvegur in dalvikurbyggd habens hacker und cyberkriminelle wohl doppelt schwer. …vielleicht ist der empfang nicht optimal und seit ribu auf der tafelrückseite darauf hinweist, wissen die schlingel und glünggis, dass man auch im internet die privatsphäre anderer zu respektieren hat… …bei dieser aussicht und den besonderen isländischen bedingungen fällt es allerdings choge schwer, an regeln und vorgaben zu denken… 😃👍 @floheinstein"

34 likes, 1 comments - ribudeinfroind on April 6, 2025: "Am ólafsfjarðarvegur in dalvikurbyggd habens hacker und cyberkriminelle wohl doppelt schwer. …vielleicht ist der empfang nicht optimal und seit ribu auf der tafelrückseite darauf hinweist, wissen die schlingel und glünggis, dass man auch im internet die privatsphäre anderer zu respektieren hat… …bei dieser aussicht und den besonderen isländischen bedingungen fällt es allerdings choge schwer, an regeln und vorgaben zu denken… 😃👍 @floheinstein".

Instagram
A woman is honoured at Dalvík harbour in the north of Iceland on Great Fish Day 2007.
(August 2019)
(Foto: © Rüdiger Benninghaus)
#Häfen, #harbour, #Schiffe, #ships, #Landschaften, #landscapes, #Dalvík, #Island, #Iceland