Android NDK работает под управлением собственных процессов - PullRequest
2 голосов
/ 21 сентября 2010

Я хочу запустить tcpdump на NDK с помощью Process.start () и хочу записать этот вывод в буфер. Может кто-нибудь показать мне, как я могу это сделать? Также процесс создан в том же Dalvik Vm, что и JNIпозвонить или это в другой ВМ?

1 Ответ

4 голосов
/ 23 сентября 2010

Запуск собственных процессов на самом деле не поддерживается ndk, но вы не будете первым, кто это сделает.

Также обратите внимание, что tcpdump может потребоваться запускать как root или setuid root, чтобы быть полезным. И у вас есть версия tcpdump, скомпилированная и скомпонованная соответствующим образом для Android?

Я думаю, что вы на самом деле хотите android.os.Exec.createSubprocess, который не является общедоступным, а не Process.start. Есть правильный способ сделать это, используя отражение, и неправильный способ сделать это, скопировав Exec.java (с объявлениями собственных методов) в ваш проект. Вы можете использовать канал, чтобы восстановить результаты, или вы можете запустить его через оболочку и перенаправить вывод в файл, который вы читаете из Java.

См. Источник эмулятора терминала Android с опцией локальной оболочки для примера того, как это сделать.

(На самом деле, я должен повторить это - правильный способ сделать это - дублировать нативную функциональность закрытых методов Exec в вашей собственной jni lib, чтобы вы были защищены от изменений в этой закрытой части платформа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...