Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива
Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В&nbs...
Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное — не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы.Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно‑ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками — вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку.Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С‑функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема — не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение — хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:
Связанные теги
Компании и люди
Линия сюжета
Android
Последние материалы и связанный контекст по теме Android.
Habr
Последние материалы и связанный контекст по теме Habr.
Habr
Последние материалы и связанные ссылки по теме Habr.
iOS
Последние материалы и связанный контекст по теме iOS.
Java
Последние материалы и связанные ссылки по теме Java.
SSH
Последние материалы и связанные ссылки по теме SSH.
Продолжить следить за темой
Переходите к связанным материалам, страницам сущностей и активным линиям сюжета.
[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу
Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...
Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников
Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...
Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source
Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...
Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России
Интервью с Николаем Прянишниковым в шоу «ИГРОКИ»: про выживание бизнеса, войну мобильных операторов, тантрический секс и способ воспитания 7 детей.Легендарный бизнесмен Николай ...
Оптимизация запросов в Spring Data JDBC
Я думаю многие согласятся, что Spring Data JDBC — это ORM, который занимает конкретную нишу: он предоставляет более легковесный репозиторный слой доступа к данным поверх реляцио...
Почему я написал Ёбифай: свой планировщик для фоновых задач на Python
Но очень быстро оказывается, что настоящая сложность не в самих задачах, а в инфраструктуре вокруг них.Сначала хочется просто запускать код в фоне. Потом появляются ретраи, тайм...
Рекламный слот
Встроенный блок в статье
Зарезервированный партнерский слот для релевантных инструментов, сервисов и аккуратных редакционных интеграций.
Похожие статьи
Еще материалы, которые пересекаются по тегам, источнику или категории.
[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу
Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...
Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников
Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...
Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source
Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...
Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России
Интервью с Николаем Прянишниковым в шоу «ИГРОКИ»: про выживание бизнеса, войну мобильных операторов, тантрический секс и способ воспитания 7 детей.Легендарный бизнесмен Николай ...
Еще материалы от Habr
Свежие публикации и продолжение темы от той же редакции.
[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу
Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...
Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников
Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...
HTB Season 10 | Kobold WriteUp— MCP-инструменты как новый attack surface
Разбор Easy-машины из HTB Season 10. Точка входа - RCE через MCP Inspector (dev-тулза для AI-серверов), дальше LFI в контейнере, credential reuse и Docker privesc. Два пути до r...
Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source
Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...