Intereting Posts
IOException: «Запрос на получение аутентификации равен нулю» (Apache Harmony / Android) Использование listpreference и получение ключа работает, но не кнопка ok Ошибка libpng: Не отображается файл PNG Ошибка в Android Studio Travis CI застрял в запуске инструментов сборки на Android Ошибка: пакет android.hardware.camera2 не существует. OpenCV Как изменить источник ImageView в android Как решить проблему «com.google.android.gms.auth.api.signin.internal.SignInHubActivity» ActivityNotFoundException в интеграции google signin Плавающая кнопка действия Прокрутите странное поведение Как избежать дублирования имени контакта (данных) при загрузке контактной информации в listview? Можно ли запустить меню общего доступа на смартфонах (через HTML / JS)? Не удается разрешить символ при изменении версии библиотеки поддержки Могу ли я использовать мягкую клавиатуру без EditText? Как вставить View (с кнопками и т. Д.) Внутри EditText? Приложение несовместимо с планшетом Как изменить размер эмулятора AVD (в Eclipse)?

Ограничения 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.

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