Ограничения Android NDK?

У меня есть вопрос об ограничениях того, что вы можете сделать в собственном коде на платформе Android.

В основном я разработал библиотеку в собственном C-коде, который использует UDP-сокеты для SIP / RTP и использует OpenAL для записи / воспроизведения звука – в основном, всего приложения. Идея состоит в том, чтобы как можно больше использовать собственный код C, а не код Java. Я хочу сделать это, потому что я собираюсь использовать его и на других платформах.

Мой вопрос тогда просто – возможно ли просто использовать Java для графического интерфейса, а затем всю обработку в собственном коде? Что произойдет, когда мой собственный код попытается создать сокет, связать его, записать аудио, воспроизвести его и т. Д. – так как он находится в собственном коде, мне нужно установить для него разрешения (например, приложение, получающее доступ к микрофону и еще много чего), или Он просто обходит этот материал с его собственного кода? Может ли собственный код делать практически все, что он хочет на Android, например, на ПК?

Извините, если его неясно; Просто скажите, и я постараюсь его улучшить

благодаря

Solutions Collecting From Web of "Ограничения Android NDK?"

Вы можете сделать практически все, что захотите, в собственном коде, но единственная поддерживаемая на уровне ОС вещь – OpenGL, OpenSL и некоторые хрустящие библиотеки (сжатие, математика и т. Д.).

Тем не менее, в любое время вы можете использовать JNI для вызова метода Java, чтобы вы могли использовать стандартный Android API для сетей (такие классы, как Socket и т. Д.). Очевидно, что, поскольку вызов проходит через API Java, применяются все обычные разрешения для Android (например, android.permission.INTERNET ).

EDIT: Как указано в комментариях, стандартные библиотеки, входящие в состав NDK, имеют поддержку сокетов.

Вам все еще нужно, чтобы ваше приложение имело разрешения. Например, ваши родные сокеты не будут работать без android.permission.INTERNET в манифесте.

 <manifest xlmns:android...> ... <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> 

Другой вариант – создать сокет на уровне Java и передать его. Ниже приведен пример взаимодействия с сокетом на родине, см. Метод org_..._OpenSSLSocketImpl_connect() :

http://www.netmite.com/android/mydroid/dalvik/libcore/x-net/src/main/native/org_apache_harmony_xnet_provider_jsse_OpenSSLSocketImpl.cpp

Собственный Android API – хорошая статья для NDK.

Можно ли просто использовать Java для графического интерфейса, а затем всю обработку в собственном коде?

Да. И вам необходимо установить соответствующие разрешения для вашего AndroidManifest.

Записывать аудио, воспроизводить его,

Вам необходимо использовать OpenSL ES API для записи и воспроизведения звука на родной стороне. Это означает, что ваше приложение должно быть для Android 2.3 или новее.

Или NVIDIA предоставляет платформу, которая позволяет нам разрабатывать с использованием C ++ для Android-событий, сенсоров, аудио и т. Д., Хотя для Android 2.2 или ранее.

Tegra Resources – примеры приложений и документации для Android SDK и NDK

Вы можете проверить csipsimple, который является примером использования библиотеки sip pip sip (которая написана на C) в приложении java android.

Я не смотрел, как это происходит сокеты, но он должен дать вам более полный пример того, что вы пытаетесь сделать.