Какой самый эффективный способ передачи данных/пакетов между собственным кодом и кодом Java в Android

Я собираюсь написать приложение для Android для чтения необработанных пакетов из собственного кода с интерфейсом необработанных сокетов. Мой телефон рутирован, поэтому мой собственный код может получить доступ к собственному коду с помощью runtime.exec("su"). Но я не знаю, как эффективно передавать пакеты между нативным кодом и кодом Java. (В этом случае собственный код и код Java выполняются в разных процессах). Поскольку мое приложение должно максимально эффективно обрабатывать необработанные пакеты из собственного кода, мне нужен «быстрый туннель» между ними. Любые идеи или предложения?

P.S. Я устал от Android NDK, но в NDK собственный код и код Java выполняются в одном и том же процессе, поэтому собственный код не может иметь привилегию root для доступа к необработанному сокету.


person Andong Zhan    schedule 10.12.2013    source источник


Ответы (1)


Решение: создайте агент на собственном уровне, чтобы он мог общаться с вашей активностью Java через JNI. Затем подключите агент и ваш собственный сервис с помощью IPC (биндера).

Одна проблема: через JNI неудобно передавать сложную структуру данных. Итак, отступите назад, почему вы хотите передавать целые пакеты? Можете ли вы обрабатывать пакеты на собственном уровне и отправлять только результат (например, целые числа)?

person Da Ha Song    schedule 11.04.2014
comment
Использование Binder между пользовательскими компонентами Native возможно, но это может быть немного сложно. Интерфейс канала или сокета unix может быть концептуально проще; хотя, если кто-то действительно хочет оптимизировать общую память, поддерживается. - person Chris Stratton; 12.04.2014