Android NDK — использование существующей библиотеки c для приложения для Android

Можно ли делать системные вызовы ядра Android из приложения? Пример: система (cmd) находится внутри программы C, и я использую JNI для доступа к ней в своей активности Android.


person user2133074    schedule 04.03.2013    source источник


Ответы (1)


Ответ: Системные вызовы - да. Вызовы system() - вроде.

Это не одно и то же. системные вызовы предоставляются ядром, а Bionic предоставляет над ними тонкую оболочку, почти так же, как обычная LibC оборачивает их в vanilla linux.

system(), однако, не является системным вызовом, а функцией, предоставляемой LibC, фактически эквивалентной fork(), затем execl("/system/bin/sh", "... args") в дочернем процессе и ждать.

Беглый взгляд на исходники Android показывает, что Bionic не экспортирует system(). но вы можете реализовать это вручную. Однако более важным является вопрос, почему вы хотите это сделать? Технически, вы можете загрузить JNI (System.loadLibrary в Java), а затем заставить родной метод делать что угодно, но это сильно усложнит вашу жизнь, особенно учитывая, что ваше приложение находится в песочнице, и вы не можете полагаться на нормальное поведение команд оболочки (как большинство из них предоставляется набором инструментов на устройстве, если вообще).

person Technologeeks    schedule 03.04.2013