Limitations du NDK Android?

J’ai une question sur les limites de ce que vous pouvez faire en code natif sur la plate-forme Android.

Fondamentalement, j’ai développé une bibliothèque en code C natif qui utilise des sockets UDP pour SIP / RTP et utilise OpenAL pour l’enregistrement / la lecture audio – essentiellement l’ensemble de l’application. L’idée est d’avoir autant que possible du code C natif plutôt que du code Java. Je veux le faire car je vais l’utiliser également sur d’autres plateformes.

Ma question est donc simplement la suivante: est-il possible d’utiliser simplement Java pour l’interface graphique puis tout traitement en code natif? Que se passera-t-il lorsque mon code natif essaiera de créer une prise, de la lier, d’enregistrer de l’audio, de la lire, etc.? contourner ce genre de choses depuis son code natif? Le code natif peut-il faire à peu près tout ce qu’il souhaite sur Android, comme sur les PC?

Désolé si ce n’est pas clair; dis juste et je vais essayer de l’améliorer

Merci

    Vous pouvez faire à peu près tout ce que vous voulez dans le code natif, mais le seul élément réellement pris en charge au niveau du système d’exploitation est OpenGL, OpenSL et certaines bibliothèques de calcul (compression, calcul, etc.).

    Cependant, à tout moment, vous êtes libre d’utiliser l’interface JNI pour appeler une méthode Java. Vous pouvez donc utiliser l’API Android standard pour la mise en réseau (classes telles que Socket , etc.). Évidemment, étant donné que l’appel passe par l’API Java, toutes les permissions Android normales s’appliquent (comme android.permission.INTERNET ).

    EDIT: Comme expliqué dans les commentaires, les bibliothèques standard faisant partie du NDK prennent en charge les sockets.

    Vous avez toujours besoin que votre application dispose d’permissions. Par exemple, vos sockets natifs ne fonctionneront pas sans android.permission.INTERNET dans le manifeste.

      ...   

    Une autre option consiste à créer le socket sur la couche Java et à le transmettre. Voici un exemple d’interaction avec le socket en pays natif, voir la méthode org_..._OpenSSLSocketImpl_connect() :

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

    L’API Android native est un bel article pour NDK.

    Est-il possible d’utiliser simplement Java pour l’interface graphique puis tout traitement en code natif?

    Oui. Et vous devez définir les permissions appropriées pour votre AndroidManifest.

    enregistrer de l’audio, le lire,

    Vous devez utiliser l’API OpenSL ES pour enregistrer et lire de l’audio du côté natif. Cela signifie que votre application doit être pour Android 2.3 ou version ultérieure.

    Ou bien, NVIDIA fournit un cadre qui nous permet de développer en utilisant C ++ pour les événements, capteurs, audio, etc. Android, même si pour Android 2.2 ou une version antérieure.

    Ressources Tegra – Exemples d’applications de documentation SDK et NDK Android

    Vous voudrez peut-être consulter csipsimple, qui est un exemple d’utilisation de la bibliothèque pjsip sip (écrite en C) dans une application java android.

    Je n’ai pas cherché à savoir comment la communication entre sockets était utilisée, mais cela devrait vous donner un exemple plus complet de ce que vous essayez de faire.