News Grower

Независимое покрытие AI, стартапов и технологий.

Создаем 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. То есть, у нас получается приблизительно такой код:

Связанные теги

Компании и люди

Линия сюжета

Продолжить следить за темой

Переходите к связанным материалам, страницам сущностей и активным линиям сюжета.

[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...

Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России

Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России

Интервью с Николаем Прянишниковым в шоу «ИГРОКИ»: про выживание бизнеса, войну мобильных операторов, тантрический секс и способ воспитания 7 детей.Легендарный бизнесмен Николай ...

Оптимизация запросов в Spring Data JDBC

Оптимизация запросов в Spring Data JDBC

Я думаю многие согласятся, что Spring Data JDBC — это ORM, который занимает конкретную нишу: он предоставляет более легковесный репозиторный слой доступа к данным поверх реляцио...

Почему я написал Ёбифай: свой планировщик для фоновых задач на Python

Почему я написал Ёбифай: свой планировщик для фоновых задач на Python

Но очень быстро оказывается, что настоящая сложность не в самих задачах, а в инфраструктуре вокруг них.Сначала хочется просто запускать код в фоне. Потом появляются ретраи, тайм...

Рекламный слот

Встроенный блок в статье

Зарезервированный партнерский слот для релевантных инструментов, сервисов и аккуратных редакционных интеграций.

Партнерский слот

Похожие статьи

Еще материалы, которые пересекаются по тегам, источнику или категории.

[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...

Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России

Николай Прянишников: как я вырастил Beeline до 8 млрд, семью до 7 детей и удвоил Microsoft в России

Интервью с Николаем Прянишниковым в шоу «ИГРОКИ»: про выживание бизнеса, войну мобильных операторов, тантрический секс и способ воспитания 7 детей.Легендарный бизнесмен Николай ...

Еще материалы от Habr

Свежие публикации и продолжение темы от той же редакции.

Открыть страницу источника
[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

[Перевод] Ослабевает ли тёмная энергия? Новые данные подтверждают эту гипотезу

Прошлой весной группа из почти 1000 космологов объявила, что тёмная энергия — загадочный фактор, заставляющий Вселенную расширяться с постоянно растущей скоростью — возможно, ос...

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы тоже умеет галлюцинировать: как я делаю систему проверки научных источников

Список литературы долго казался мне самой скучной частью научной работы. Пока не выяснилось, что именно там может прятаться очень неприятная штука: ссылка, которая выглядит убед...

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробо...