Как стать автором
Обновить

Комментарии 15

Нужная вещь, надо себе вкрутить :)
Ссылку на gihub хочется…
Возможно, там некоторое недоработано и код может быть некрасивый, так что не обессудьте. Тыц
Впервые вижу, чтобы кто-то посетовал на некрасивый код и все равно ВЫЛОЖИЛ ссылку.
А разве для вызова метода из C++ он не должен отмечаться ещё и ключевым словом native?
native методы должны быть реализованы в динамической библиотеке, экспортирующей соответствующую c-функцию. Из нативного кода можно вызывать любые методы jvm.
native нужно отмечать методы, которые вызываются из Java и определяются в C++. Если не ошибаюсь, то
package com.mypackage;
class Test {
private static native void nativeMyMethod();
public void JavaMethod() { nativeMyMethod(); }
}

А в С++ определение будет
extern "C" void Java_com_mypackage_Test_nativeMyMethod() {...}

А код мой мне всегда не нравиться и всегда хочется переделать, правда не всегда знаю как.
Не обязательно C++, любой язык, компилятор которого способен собирать динамические библиотеки, экспортирующие си-функции.
Фортран можно, я на D реализовывал нативные методы еще.
Ясно, спасибо за пояснение.
Я использовал подобную идею, но предпочитаю задавать сигнатуру функций, а не полагаться на правильную передачу аргументов.
Использование выглядит примерно так:
static const jni::instance_method<jint(jint, jint)> add{"add", jni_env, instance};

const auto sum = add(1, 1);
assert(sum == 2);
Выглядит интересно. Благодарю, поразмышляю над вариантом.
Делал для себя несколько лет назад. С тех пор ушел от нативного кодинга на андроиде и запросил развитие. Уверен, что за несколько правок можно заставить работать.
github.com/Monnoroch/CppJni

Там есть буквально все: даже возможность маппинга С++ классов на джава-классы.
Да, я пока читал, всё думал, если есть AJIS, то и для C++ что–то должно быть
Ещё бы какую-нибудь документацию к этому делу…
К сожалению, я давным давно не занимаюсь проектом, и плохо подготовил его для open-source. Однако, там есть некое описание вот тут: github.com/Monnoroch/CppJni/blob/master/JniForwards.h.
И я вижу, там наплюсовали проект мне, кому-то, видимо, понравился, так что скажу, что буду очень рад пуллреквестам и все такое. В свое время мне очень облегчило жизнь решение сделать либу, а не ковыряться самому в jni.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории