Ограничения Android NDK? - PullRequest
15 голосов
/ 12 июля 2011

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

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

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

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 12 июля 2011

Вы можете делать практически все, что угодно, в собственном коде, но единственное, что действительно поддерживается на уровне ОС - это OpenGL, OpenSL и некоторые библиотеки обработки чисел (сжатие, математика и т. Д.).

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

РЕДАКТИРОВАТЬ: Как уточняется в комментариях, стандартные библиотеки, которые являются частью NDK, имеют поддержку сокетов.

3 голосов
/ 12 июля 2011

Native Android API - хорошая статья для NDK.

Возможно ли просто использовать Java для GUI, а затем всю обработку в нативном коде?

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

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

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

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

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

3 голосов
/ 12 июля 2011

Вам все еще нужно, чтобы ваше приложение имело разрешения. Например, ваши собственные сокеты не будут работать без 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

0 голосов
/ 12 июля 2011

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

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

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