Compatible Android POSIX?

Compatible Android POSIX? Je sais qu'il utilise le noyau Linux, mais je ne sais pas si cela signifie qu'il est compatible avec POSIX, car la norme POSIX traite davantage des fonctions utilisateur. Donc, est-ce compatible?

Par exemple, si j'utilise uniquement des fonctions ANSI et POSIX dans mon programme C, serait-il compiler et exécuter sur Android sans avoir besoin de modifications de code?

  • Affichage de gif dans Android
  • Comment arrêter un mobile Android pour la programmation?
  • Comment organiser le code source Android dans les dossiers
  • Comment désactiver l'envoi d'emoji dans Android EditText?
  • Eclipse doit être redémarré fréquemment pour que Logcat fonctionne correctement
  • Texte du lanceur d'application - Nom de l'application en deux lignes
  • L'envoi de tâches à un thread-pool donne RejectedExecutionException
  • Comment puis-je éviter de clignoter la mise à jour de la notification tout en changeant le bouton
  • Comment générer un code QR pour une application Android?
  • Mise en œuvre de MVP dans l'application Android
  • Les messages Logcat disparaissent après un court laps de temps
  • Modèle de design Google IO Rest, ContentProvider fini et coincé maintenant
  • 3 Solutions collect form web for “Compatible Android POSIX?”

    GNU libc (glibc) est trop grand et compliqué pour les téléphones mobiles, donc Android met en œuvre sa propre version spéciale de libc, qui est Bionic libc, qui ne supporte pas entièrement POSIX, l'une des fonctionnalités les plus manquantes de l'android Bionic libc est pthread_cancel() Alors, si vous ne l'utilisez pas, votre code va probablement bien.

    Et aussi comme @code monkey mentionné, vous pouvez regarder le code source bionique. Vous pouvez trouver des informations supplémentaires ici .

    Android n'est pas entièrement compatible POSIX. Tout d'abord, ce que je peux remarquer est la bibliothèque c par défaut. Comme vous le savez, cela s'appelle glibc. Mais Android possède sa propre bibliothèque c – bionic. Voici quelques notes.

    Certaines fonctions dans les en-têtes POSIX et System System de Bionic sont des stubs ou wrappers pour un comportement spécifique à l'Android, entraînant des comportements involontaires dans certains cas.

    Android utilise le noyau linux, de sorte que vous pouvez dire que c'est compatible POSIX. Mais en général, Android n'est pas conforme aux spécifications de Unix telles que POSIX non plus. Aussi, vous pouvez lire quelque chose comme ça

    Bionic n'inclut pas la gestion des exceptions C ++, peut-être car Google n'utilise pas d'exceptions C ++ et les exceptions Java sont disponibles une fois que la machine virtuelle Java a démarré

    Bionic n'inclut pas la bibliothèque de modèles standard, et les développeurs doivent l'inclure manuellement si elles en ont besoin

    Il existe une grande création personnalisée NDK – CrystaX NDK

    Principales caractéristiques du CrystaX NDK:

    Caractères larges. Le NDK de Google ne prend pas en charge les caractères larges correctement en C ou C ++. Avec le NDK CrystaX, vous obtenez un support de caractères large compatible avec tous les standards. Vous pouvez facilement connecter un code existant qui utilise de larges caractères / chaînes / flux ou rédiger un nouveau code.

    Les chaînes d'outils les plus récentes Le CrystaX NDK comprend les versions les plus récentes des compilateurs GCC et Clang ainsi que des écuries. Cela permet aux développeurs d'utiliser de nouvelles compétences linguistiques (telles que les nouvelles fonctionnalités C ++ 11). Tous les compilateurs sont construits avec des optimisations haute et basse qui permettent la génération du code le plus efficace pour le matériel cible.

    Prise en charge de C ++ 11 Étant donné que le NDK de CrystaX comprend les versions les plus récentes de GCC et Clang, il prend en charge de nombreuses fonctionnalités C ++ 11 listées sur le support C ++ 0x / C ++ 11 dans GCC et C ++ 98 et C ++ 11 Support à Clang. En outre, le CrystaX NDK offre des classes C ++ 11 entièrement fonctionnelles std :: thread, std :: mutex, std :: chrono etc. Ces classes ne sont pas disponibles dans Google NDK en raison du manque de fonctionnalités dans Android Bionic libc. Nous avons étudié ce problème et l'avons réparé, alors, dans le CrystaX NDK, vous pouvez simplement les utiliser et oublier si.

    Prise en charge Objective-C Les seules langues supportées par Google NDK sont C et C ++. Le NDK de CrystaX ajoute le support d'Objective-C en plus de C et C ++. Seule la langue centrale est supportée dès maintenant; Le travail sur les bibliothèques similaires à Cocoa est en cours. Pour commencer à utiliser Objective-C dans votre projet, il suffit d'ajouter des fichiers sources avec l'extension .m (Objective-C) ou .mm (Objective-C ++) et spécifiez-les dans LOCAL_SRC_FILES dans Android.mk.

    À continuer … Si vous ne voyez pas une fonctionnalité importante ici, n'hésitez pas à nous contacter et à le demander. Vous pouvez également utiliser notre suivi des problèmes / erreurs pour signaler les bogues ou les demandes de fonctionnalités. Et, bien sûr, les contributions sont les bienvenues!

    Vous pouvez trouver plus d'informations sur le site officiel de CrystaX NDK

    Je sais que cette réponse est un peu dépassée, mais cela complètera les réponses ci-dessus.

    Oui, Android n'est pas compatible POSIX, principalement en raison de ses restrictions libc (Bionic). Cependant, à l'aide de CrystaX NDK, vous risquez de ne pas ressentir cette différence si dur – simplement parce que l'utilisation du développement de CrystaX NDK pour Android devient beaucoup plus compatible avec POSIX. Nous avons mis en place de nombreuses parties de libc (buggy ou absent chez Bionic) de notre propre en libcrystax.so, core de CrystaX NDK, et l'avons fait sans modification du flux de développement typique. Nous allons l'améliorer encore, car libcrystax ne supporte pas encore le jeu POSIX complet , mais à partir de maintenant, il prend en charge de nombreuses choses telles que des caractères et des chaînes larges, un support complet pour les locaux (entrée et sortie spécifiques à la localisation), plein Bibliothèque de mathématiques comprenant des fonctions complexes et génériques génériques, backend entièrement fonctionnel pour la bibliothèque Standard C ++ (deux implémentations disponibles, à votre choix – GNU libstdc ++ ou LLVM libc ++) et des tonnes d'autres corrections et améliorations.

    Juste pour montrer comment CrystaX NDK facilite le développement natif pour Android – nous avons inclus Boost 1.57.0 dans CrystaX NDK 10.1.0, que nous avons construit à partir de ses sources sans aucune modification – simplement parce que dans CrystaX NDK Boost reste au-dessus de beaucoup Plus de base conforme à POSIX que dans NDK de Google.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.