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

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

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

Линия сюжета

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

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

Развёртывание сети на базе Meshtastic

Развёртывание сети на базе Meshtastic

Mesh‑сети в целом, и, в частности Meshtastic, уже давно не новая история. Почти все, кто называет себя радиолюбителем имеет одну‑две ноды в ящике своего рабочего стола. А с неда...

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Привет, меня зовут Янина. Днем я управляю продуктами и проектами. Вечером — сижу в Jitsi с ребятами из IT и обсуждаю, почему у кого-то не полетел A/B-тест, как считать retention...

Продвинутый RBAC: роли, статусы, теги без боли и страданий

Сегодня детально расскажу про сердце JMatrixPlatform - статусно-ролевой доступ к данным. Это основа платформы, доступная сразу "из коробки", которая реализует продвинутый RBAC с...

Вышла российская операционная система «Альт Мобильный» 11, независимая от Android

Вышла российская операционная система «Альт Мобильный» 11, независимая от Android

«Базальт СПО» объявила о выходе операционной системы для мобильных устройств «Альт Мобильный» на одиннадцатой платформе, предназначенной для использования предприятиями и органи...

Документальное сопровождение создания ИТ-продуктов в рамках выполнения ИТ-проектов

Документальное сопровождение создания ИТ-продуктов в рамках выполнения ИТ-проектов

В статье представлены результаты анализа национальных стандартов, закрепляющих требования к последовательности работ по созданию ИТ-продуктов, составу, видам, наименованию, комп...

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

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

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

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

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

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

Развёртывание сети на базе Meshtastic

Развёртывание сети на базе Meshtastic

Mesh‑сети в целом, и, в частности Meshtastic, уже давно не новая история. Почти все, кто называет себя радиолюбителем имеет одну‑две ноды в ящике своего рабочего стола. А с неда...

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Привет, меня зовут Янина. Днем я управляю продуктами и проектами. Вечером — сижу в Jitsi с ребятами из IT и обсуждаю, почему у кого-то не полетел A/B-тест, как считать retention...

Продвинутый RBAC: роли, статусы, теги без боли и страданий

Сегодня детально расскажу про сердце JMatrixPlatform - статусно-ролевой доступ к данным. Это основа платформы, доступная сразу "из коробки", которая реализует продвинутый RBAC с...

Вышла российская операционная система «Альт Мобильный» 11, независимая от Android

Вышла российская операционная система «Альт Мобильный» 11, независимая от Android

«Базальт СПО» объявила о выходе операционной системы для мобильных устройств «Альт Мобильный» на одиннадцатой платформе, предназначенной для использования предприятиями и органи...

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

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

Открыть страницу источника
Развёртывание сети на базе Meshtastic

Развёртывание сети на базе Meshtastic

Mesh‑сети в целом, и, в частности Meshtastic, уже давно не новая история. Почти все, кто называет себя радиолюбителем имеет одну‑две ноды в ящике своего рабочего стола. А с неда...

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Лучшие YouTube-каналы по Data и Product Analytics, которые прокачивают английский (и мышление)

Привет, меня зовут Янина. Днем я управляю продуктами и проектами. Вечером — сижу в Jitsi с ребятами из IT и обсуждаю, почему у кого-то не полетел A/B-тест, как считать retention...

Продвинутый RBAC: роли, статусы, теги без боли и страданий

Сегодня детально расскажу про сердце JMatrixPlatform - статусно-ролевой доступ к данным. Это основа платформы, доступная сразу "из коробки", которая реализует продвинутый RBAC с...

Документальное сопровождение создания ИТ-продуктов в рамках выполнения ИТ-проектов

Документальное сопровождение создания ИТ-продуктов в рамках выполнения ИТ-проектов

В статье представлены результаты анализа национальных стандартов, закрепляющих требования к последовательности работ по созданию ИТ-продуктов, составу, видам, наименованию, комп...