Historique des révisions du NDK

Cette page fournit des informations sur les modifications apportées à toutes les versions stables du NDK qui ont été publiées. Pour télécharger la dernière version stable du NDK ou toute version bêta actuellement disponible, consultez la page Téléchargements de NDK.

Consultez le groupe Google android-ndk-announce pour obtenir des informations plus complètes et abonnez-vous pour recevoir des annonces de versions.

Android NDK r27 LTS (juillet 2024)

Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • KitKat (API 19 et 20) n'est plus compatible.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • Intégration des API Android 13.
  • Mise à jour de LLVM vers clang-r450784d suite au développement de LLVM 14.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • GNU Assembler (GAS) a été supprimé. Si vous avez compilé des projets en utilisant -fno-integrated-as, vous devez supprimer cette option. Pour obtenir des conseils sur la façon de rendre l'assemblage compatible avec LLVM, consultez le document Clang Migration Notes.
  • GDB a été supprimé. Utilisez LLDB à la place. Notez que ndk-gdb utilise LLDB par défaut et qu'Android Studio n'a toujours été compatible qu'avec ce débogueur.
  • Jelly Bean (API 16, 17 et 18) n'est plus compatible. L'OS minimal accepté par le NDK est KitKat (niveau d'API 19).
  • Les appareils non compatibles avec Neon ne sont plus acceptés. Comme de tels appareils sont très peu nombreux et très anciens, cela ne fait aucune différence pour la plupart des applications, sauf en ce qui concerne l'amélioration des performances.
  • La compilation avec RenderScript n'est plus disponible. RenderScript est obsolète depuis Android 12. Si vous n'avez pas fini de migrer vos applications depuis RenderScript, vous pouvez utiliser NDK r23 LTS.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • GNU binutils a été supprimé, à l'exception de GNU Assembler (GAS). GAS sera supprimé dans la prochaine version. Si vous compilez des projets en utilisant -fno-integrated-as, répertoriez les bugs qui vous empêchent de supprimer cette option.
  • GDB n'est plus compatible et sera supprimé de la prochaine version. Utilisez LLDB à la place. Notez que ndk-gdb utilise LLDB par défaut.
  • NDK r23 est la dernière version acceptant les appareils non compatibles avec Neon. À partir de NDK r24, les bibliothèques armeabi-v7a de sysroot intégreront Neon. Comme les appareils non compatibles avec Neon sont très peu nombreux et très anciens, cela ne fait aucune différence pour la plupart des applications, sauf en ce qui concerne l'amélioration des performances.
  • Jelly Bean (API 16, 17 et 18) n'est pas compatible avec la prochaine version du NDK. L'OS minimal accepté par NDK r24 est KitKat (niveau d'API 19).
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • GNU binutils est obsolète et sera supprimé dans une prochaine version du NDK. Notez que GNU Assembler (as) est également concerné. Si vous compilez des projets en utilisant -fno-integrated-as, répertoriez les bugs qui vous empêchent de supprimer cette option. Si vous utilisez directement as, utilisez clang à la place.
  • LLD est désormais l'éditeur de liens par défaut. ndk-build et notre fichier de chaîne d'outils CMake ont également migré vers llvm-ar et llvm-strip.
  • ndk-gdb utilise désormais lldb en tant que débogueur. gdb est obsolète et sera supprimé dans une prochaine version. Pour utiliser gdb malgré tout, utilisez l'option --no-lldb. Cependant, veuillez signaler un bug en expliquant pourquoi vous ne pouvez pas utiliser lldb.
  • La compatibilité avec std::filesystem est désormais assurée. Il existe deux problèmes connus :
    • Problème 1258 : il est possible que std::filesystem::perm_options::nofollow ne soit pas appliqué sur les anciens appareils.
    • Problème 1260 : std::filesystem::canonical indique à tort que l'opération a réussi si un chemin d'accès inexistant lui est transmis sur les anciens appareils.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • Windows 32 bits n'est plus compatible. La grande majorité des utilisateurs n'en seront pas affectés. Si vous devez encore créer des applications NDK à partir de versions 32 bits de Windows, continuez à utiliser NDK r20.

    Pour en savoir plus sur cette modification des outils pour les développeurs Android, consultez cet article de blog.

  • LLD est maintenant disponible à des fins de test. AOSP utilise désormais LLD par défaut et le NDK fera de même par la suite (à une date encore inconnue). Testez LLD dans votre application en transmettant -fuse-ld=lld lors de l'association. Notez que le problème 843 affecte les builds utilisant LLD avec binutils trip et objcopy plutôt que llvm-strip et llvm-objcopy.
  • Les anciens chemins d'installation des chaînes d'outils seront supprimés dans les prochaines versions. Ces chemins d'accès sont obsolètes depuis NDK r19 et occupent un espace considérable dans le NDK. Les chemins supprimés seront les suivants :
    • platforms
    • sources/cxx-stl
    • sysroot
    • toolchains (sauf toolchains/llvm)
    En général, cette modification ne concerne que les responsables de systèmes de compilation et les personnes qui utilisent des systèmes de compilation qui ne sont pas à jour. Les utilisateurs de ndk-build et de la chaîne d'outils CMake ne sont pas affectés, de même que les utilisateurs de make_standalone_toolchain.py, bien que ce script soit inutile depuis la version r19. Pour en savoir plus sur l'abandon de l'ancienne structure de chaînes d'outils, consultez le document Build System Maintainers Guide correspondant à la version du NDK que vous utilisez.
  • À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
  • Un app bundle macOS signé et notarié est désormais disponible en téléchargement sur notre wiki et sur notre site Web. Remarque : étant donné que seuls les app bundles peuvent utiliser des chemins RPATH et être notariés, le package NDK traditionnel pour macOS ne peut pas être notarié. Le SDK continuera à utiliser le package traditionnel, car l'app bundle nécessite des modifications de structure qui le rendraient incompatible avec Android Studio. Le NDK n'est pas mis en quarantaine lorsqu'il est téléchargé via SDK Manager. Il est donc actuellement autorisé par Gatekeeper. SDK Manager constitue actuellement le moyen le plus fiable d'obtenir le NDK pour macOS.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • LLD est maintenant disponible à des fins de test. AOSP va bientôt utiliser LLD par défaut et le NDK fera de même par la suite (à partir d'une date encore inconnue). Testez LLD dans votre application en transmettant -fuse-ld=lld lors de l'association.
  • À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
  • Des API Android Q ont été ajoutées.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • Les développeurs doivent commencer à tester leurs applications avec LLD. AOSP utilise désormais LLD par défaut et le NDK fera de même dans la prochaine version. BFD et Gold seront supprimés une fois que LLD aura suivi un cycle de publication sans rencontrer de problème majeur non résolu (probablement dans la version r21). Testez LLD dans votre application en transmettant -fuse-ld=lld lors de l'association. Remarque : LLD n'est pas compatible avec les symboles compressés sous Windows pour le moment (problème 888). Clang ne peut pas non plus générer de symboles compressés sous Windows, ce qui peut poser problème lorsque vous utilisez des artefacts créés sous Darwin ou Linux.
  • À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
  • Problème 780 : les chaînes d'outils autonomes ne sont plus nécessaires. Clang, binutils, sysroot et les autres composants de chaîne d'outils sont désormais tous installés dans $NDK/toolchains/llvm/prebuilt/<host-tag> et Clang les détecte automatiquement. Au lieu de créer une chaîne d'outils autonome pour l'API 26 ARM, appelez directement le compilateur à partir du NDK :
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    Pour la version r19, la chaîne d'outils est également installée à l'ancien chemin d'accès afin de permettre aux systèmes de compilation de s'adapter à la nouvelle structure. Les anciens chemins d'accès seront supprimés dans la version r20. Le script make_standalone_toolchain.py ne sera pas supprimé. Il est désormais inutile et générera un avertissement avec les informations ci-dessus, mais il restera en place afin de préserver les workflows existants. Si vous utilisez ndk-build, CMake ou une chaîne d'outils autonome, votre workflow ne devrait pas changer. Cette modification est significative pour les responsables de systèmes de compilation tiers, qui doivent désormais être en mesure de supprimer du code propre à Android. Pour en savoir plus, consultez le document Build System Maintainers Guide.
  • ndk-depends a été supprimé. Nous pensons que ReLinker constitue une meilleure solution pour les problèmes de chargement de bibliothèques natives sur les anciennes versions d'Android.
  • Problème 862 : les scripts de wrapper GCC qui effectuaient une redirection vers Clang ont été supprimés, car ils ne sont pas suffisamment fonctionnels pour constituer une alternative satisfaisante.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • GCC a été supprimé.
  • LLD est maintenant disponible à des fins de test. AOSP va bientôt utiliser LLD par défaut et le NDK fera de même par la suite (à partir d'une date encore inconnue). Testez LLD dans votre application en transmettant -fuse-ld=lld lors de l'association.
  • gnustl, gabi++ et stlport ont été supprimés.
  • La compatibilité avec ICS (android-14 et android-15) n'est plus assurée. Les applications qui utilisent des exécutables n'ont plus besoin de fournir à la fois un exécutable PIE et non-PIE.
  • À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • GCC n'est plus compatible. Il sera supprimé dans NDK r18.
  • libc++ est désormais la STL par défaut pour CMake et les chaînes d'outils autonomes. Si vous avez sélectionné manuellement une autre STL, nous vous encourageons vivement à passer à libc++. Notez que ndk-build n'est toujours associé à aucune STL par défaut. Pour en savoir plus, consultez cet article de blog.
  • gnustl et stlport sont désormais obsolètes et seront supprimés dans NDK r18.
  • La compatibilité avec ARMv5 (armeabi), MIPS et MIPS64 n'est plus assurée. Si vous tentez de créer l'une de ces ABI, vous obtenez une erreur.
  • La compatibilité avec ICS (android-14 et android-15) sera supprimée à partir de la version r18.
  • À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • Les en-têtes obsolètes ont été supprimés. Les en-têtes unifiés sont désormais simplement appelés "en-têtes". Pour obtenir des conseils de migration, consultez la page Unified Headers Migration Notes.
  • GCC n'est plus compatible. Il n'a pas été supprimé du NDK pour l'instant, mais il ne bénéficie plus de rétroportages. Il ne pourra être supprimé que lorsque libc++ sera devenue suffisamment stable pour être utilisée par défaut, car certaines parties de gnustl sont toujours incompatibles avec Clang. Il sera supprimé en même temps que les autres STL dans la version r18.
  • libc++ n'est plus en version bêta et est désormais la STL privilégiée du NDK. À partir de la version r17, libc++ est la STL par défaut pour CMake et les chaînes d'outils autonomes. Si vous avez sélectionné manuellement une autre STL, nous vous encourageons vivement à passer à libc++. Pour en savoir plus, consultez cet article de blog.
  • ARM5 (armeabi), MIPS et MIPS64 sont désormais obsolètes. Ces ABI ne sont plus compilées par défaut avec ndk-build, mais elles peuvent toujours être compilées si elles sont explicitement nommées et sont incluses par "all", "all32" et "all64". La compatibilité avec chacune de ces ABI a été supprimée dans la version r17. CMake et ndk-build génèrent un avertissement si vous ciblez l'une d'elles.
API

Des API natives pour Android 8.1 ont été ajoutées. Pour en savoir plus sur ces API, consultez API natives.

Pour en savoir plus sur les nouveautés et les modifications apportées à cette version, consultez ce journal des modifications.

Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • Les en-têtes unifiés sont activés par défaut. Pour savoir comment les utiliser, consultez la page Unified Headers.
  • Remarque : Les en-têtes obsolètes seront supprimés dans une prochaine version. Si vous rencontrez des problèmes avec ces en-têtes, veuillez signaler un bug.

    Pour obtenir des conseils de migration, consultez la page Unified Headers Migration Notes.

  • GCC n'est plus compatible. Il n'a pas été supprimé du NDK pour l'instant, mais ne bénéficie plus de rétroportages. Il ne pourra être supprimé que lorsque libc++ sera devenue suffisamment stable pour être utilisée par défaut, car certaines parties de gnustl sont toujours incompatibles avec Clang.
  • Android 2.3 (android-9) n'est plus compatible. Le niveau d'API cible minimal dans le NDK est désormais Android 4.0 (android-14). Si APP_PLATFORM est inférieure à android-14, android-14 est utilisé à la place.
  • Dans le NDK, CMake est désormais compatible avec l'exécution de code assembleur écrit en YASM pour l'exécution sur des architectures x86 et x86-64. Pour en savoir plus, consultez Compiler du code assembleur.
API

Des API natives pour Android 8.1 ont été ajoutées. Pour en savoir plus sur ces API, consultez API natives.

Pour en savoir plus sur les nouveautés et les modifications apportées à cette version, consultez ce journal des modifications.

Journal des modifications
Téléchargements
  • Les téléchargements correspondant à cette version sont disponibles sur cette page.
Annonces
  • En-têtes unifiés : cette version introduit des en-têtes de plate-forme qui sont synchronisés et constamment tenus à jour par rapport à la plate-forme Android. Les corrections de bugs concernant uniquement un en-tête s'appliquent désormais à tous les niveaux d'API. L'introduction d'en-têtes unifiés permet de corriger les incohérences dans les versions précédentes du NDK, par exemple :
    • Les en-têtes des versions M et N étaient en fait destinés à la version L.
    • Les déclarations de fonctions dans les en-têtes ne correspondaient pas à leurs niveaux de plate-forme. Les en-têtes déclaraient des fonctions inexistantes ou ne déclaraient pas les fonctions disponibles.
    • Plusieurs anciens niveaux d'API comportaient des constantes manquantes ou incorrectes correspondant à des niveaux d'API plus récents.

    Ces nouveaux en-têtes unifiés ne sont pas activés par défaut. Pour savoir comment les activer et les utiliser, consultez la page Unified Headers.

  • Abandon de GCC : cette version met fin à la prise en charge active de GCC. Il n'a pas été supprimé du NDK pour l'instant, mais il ne bénéficie plus de rétroportages. Étant donné que certaines parties de gnustl sont toujours incompatibles avec Clang, GCC ne sera complètement supprimé qu'une fois que libc++ sera devenue suffisamment stable pour être utilisée par défaut.

Pour en savoir plus sur les nouveautés et les modifications apportées à cette version, consultez ce journal des modifications.

Téléchargements
  • Les téléchargements correspondant à cette version sont archivés sur cette page.
Annonces
  • GCC n'est plus compatible. Il n'a pas été supprimé du NDK pour l'instant, mais il ne bénéficie plus de rétroportages. Il ne pourra être supprimé que lorsque libc++ sera devenue suffisamment stable pour être utilisée par défaut, car certaines parties de gnustl sont toujours incompatibles avec Clang. Après cela, il sera probablement supprimé.
  • simpleperf, un profileur de processeurs pour Android, a été ajouté.
r13b
NDK
  • NDK_TOOLCHAIN_VERSION est désormais défini par défaut sur Clang.
  • libc++ a été mise à jour vers la version r263688.
  • Nous avons nettoyé pratiquement tous les composants en amont. Cela devrait permettre de supprimer plusieurs bugs, mais nous devons encore nettoyer libandroid_support avant de le recommander par défaut.
  • make-standalone-toolchain.sh est désormais un simple wrapper pour la version Python de l'outil. Il existe quelques différences de comportement. Pour en savoir plus, consultez le message de commit.
  • Certaines bibliothèques correspondant à des ABI non compatibles ont été supprimées (mips64r2, mips32r6, mips32r2 et x32). Il en reste peut-être quelques-unes.
  • Les problèmes liés à crtbegin_static.o faisant qu'il manquait une fonction atexit au moment de l'association lors de la création d'un exécutable statique pour ARM android-21 ou version supérieure ont été résolus : consultez le problème 132.
  • Un fichier de chaîne d'outils CMake a été ajouté dans build/cmake/android.toolchain.cmake.
Problèmes connus
  • Cette section n'a pas vocation à dresser la liste exhaustive de tous les bugs en attente de résolution.
  • Les chaînes d'outils autonomes qui utilisent libc++ et GCC ne fonctionnent pas. Il semble s'agir d'un bug dans GCC. Pour en savoir plus, consultez le message de commit.
  • Les en-têtes et les bibliothèques Bionic pour Marshmallow et N ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Lollipop (sans que cela soit une régression par rapport à la version r11).
  • Les outils RenderScript sont absents (sans que cela soit une régression par rapport à la version r11) : consultez le problème 7.
Téléchargements
  • Les téléchargements correspondant à cette version sont archivés sur cette page.
Annonces
  • Par défaut, la commande ndk-build utilise Clang dans la version r13. Nous allons supprimer GCC dans une prochaine version.
  • Le script make-standalone-toolchain.sh sera supprimé dans la version r13. Assurez-vous que make_standalone_toolchain.py répond à vos besoins.
  • Signalez les problèmes sur GitHub.
r12b
  • Nous avons corrigé ndk-gdb.py (problème 118).
  • Nous avons mis à jour NdkCameraMetadataTags.h afin qu'il ne contienne plus de valeur d'énumération non valide.
  • Nous avons corrigé un bug dans ndk-build qui générait des avertissements erronés pour les bibliothèques statiques utilisant libc++. Pour en savoir plus sur cette modification, consultez les commentaires sur cette page.
  • Les en-têtes OpenSLES ont été mis à jour pour android-24.
NDK
  • Nous n'assurons plus la compatibilité avec l'ABI armeabi-v7a-hard. Pour en savoir plus, consultez cette explication.
  • Tous les sysroots correspondant à des niveaux de plate-forme antérieurs à Gingerbread ont été supprimés. Nous n'assurons plus leur compatibilité depuis la version 11, mais nous n'avions pas pris le temps de les supprimer.
  • La gestion des exceptions lors de l'utilisation de c++_shared sur ARM32 fonctionne désormais dans la plupart des cas. Le dérouleur est désormais associé à chaque objet associé plutôt que directement à libc++. Pour en savoir plus sur cette gestion des exceptions, consultez les problèmes connus.
  • Les options de compilation par défaut ont été réduites (problème 27).
  • Ajout d'une implémentation des chaînes d'outils autonomes pour Python : build/tools/make_standalone_toolchain.py.
    • Les utilisateurs Windows n'ont plus besoin de Cygwin pour utiliser cette fonctionnalité.
    • Nous allons supprimer le type bash dans la version r13. Nous vous invitons donc à tester dès maintenant la nouvelle fonctionnalité.
  • -fno-limit-debug-info a été activé par défaut pour les versions de débogage Clang. Cette modification doit améliorer le débogage avec LLDB.
  • --build-id est désormais activé par défaut.
    • L'ID de build s'affiche désormais dans les rapports sur les plantages natifs afin que vous puissiez facilement identifier la version de votre code qui était en cours d'exécution.
  • NDK_USE_CYGPATH ne devrait plus causer de problèmes avec libgcc (problème 195486 pour Android).
  • Les options -Wl, --warn-shared-textrel et -Wl,--fatal-warnings sont désormais activées par défaut. Si vous avez partagé des réadressages de code, votre application ne peut pas se charger sous Android 6.0 (niveau d'API 23) ou version ultérieure. Le réadressage de code n'a jamais été autorisé pour les applications 64 bits.
  • Les en-têtes précompilés devraient mieux fonctionner (problème 14 et problème 16).
  • Les bibliothèques STL ARM (autres que thumb) inaccessibles ont été supprimées.
  • La compatibilité avec Vulkan a été ajoutée à android-24.
  • L'API Choreographer a été ajoutée à android-24.
  • Des API libcamera2 ont été ajoutées pour les appareils avec un niveau de matériel INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ou supérieur. Pour en savoir plus, consultez la page CameraCharacteristics.
Clang
  • Mise à jour de Clang vers la version 3.8svn (r256229, build 2812033).
    • Les exécutables clang.exe et clang++.exe du package Windows 32 bits sont en réalité 64 bits. L'exécutable 32 bits est nommé clang_32.exe.
  • __thread devrait vraiment fonctionner cette fois.
GCC
  • Synchronisation avec ChromeOS GCC pour google/gcc-4_9 r227810.
  • Rétroportage du correctif de nettoyage de couverture à partir de ToT (r231296).
  • Correction de libatomic afin qu'elle n'utilise pas ifuncs (problème 31).
Binutils
  • Mise sous silence des messages d'information "Erratum 843419 found and fixed" (Erratum 843419 détecté et corrigé).
  • Introduction de l'option --long-plt afin de corriger une erreur interne de l'éditeur de liens qui se produit lors de l'association de binaires arm32 très volumineux.
  • Correction de bouchons d'exécution incorrects pour AArch64. Ceux-ci entraînaient un calcul incorrect des adresses de renvoi pour les objets partagés dynamiques (DSO, Dynamic Shared Object) très volumineux.
  • Introduction de l'option par défaut --no-apply-dynamic pour contourner un bug de l'éditeur de liens dynamique pour les versions d'Android plus anciennes.
  • NDK r11 KI pour dynamic_cast ne fonctionne pas avec Clang. Nous avons corrigé les problèmes liés à x86, à stlport_static et à l'optimisation.
GDB
  • Mise à jour vers GDB 7.11. Pour en savoir plus, consultez la page GDB News.
  • Correction de bugs pour ndk-gdb.py.
Problèmes connus
  • ASAN x86 ne fonctionne toujours pas. Pour en savoir plus, consultez la discussion sur cette liste de modifications.
  • Le déroulement d'exception avec c++_shared ne fonctionne toujours pas avec ARM sous Android 2.3 (niveau d'API 9) ou Android 4.0 (niveau d'API 14).
  • Les en-têtes et les bibliothèques Bionic pour Android 6.0 (niveau d'API 23) et Android 7.0 (niveau d'API 24) ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Android 5.0 (niveau d'API 21) (sans que cela soit une régression par rapport à la version r11).
  • Les outils RenderScript sont absents (sans que cela soit une régression par rapport à la version r11) (problème 7).
  • Ce journal des modifications n'a pas vocation à dresser la liste exhaustive de tous les bugs en attente de résolution.
Téléchargements
  • Les téléchargements correspondant à cette version sont archivés sur cette page.
Annonces
  • La commande ndk-build utilisera Clang par défaut dans une prochaine version. GCC sera supprimé dans une version ultérieure.
  • Le script make-standalone-toolchain.sh sera supprimé dans une prochaine version. Si vous utilisez ce script, veuillez prévoir une migration vers make_standalone_toolchain.py dès que possible.
NDK
  • Suppression de la compatibilité avec l'ABI armeabi-v7a-hard. Pour une explication, consultez la documentation.
  • Suppression de tous les sysroots pour les niveaux de plate-forme antérieurs à Android 2.3 (niveau d'API 9). Nous n'assurons plus leur compatibilité depuis NDK r11, mais nous n'avions pas pris le temps de les supprimer.
  • Mise à jour de la gestion des exceptions lors de l'utilisation de c++_shared sur ARM32 afin qu'elle fonctionne dans la plupart des cas (consultez Problèmes connus). Le dérouleur est désormais associé à chaque objet associé plutôt que directement à libc++.
  • Réduction des options de compilation par défaut (problème 27 du NDK). Vous pouvez consulter les détails de cette mise à jour dans la modification 207721.
  • Ajout d'une implémentation des chaînes d'outils autonomes pour Python dans build/tools/make_standalone_toolchain.py. Sous Windows, vous n'avez plus besoin de Cygwin pour utiliser cette fonctionnalité. Notez que le type bash sera supprimé dans une prochaine version. Veuillez donc tester dès maintenant la nouvelle fonctionnalité.
  • Configuration des versions de débogage Clang pour que l'option -fno-limit-debug-info soit activée par défaut. Cette modification améliore le débogage avec LLDB.
  • Activation de --build-id comme option par défaut. Cette option permet d'afficher un identifiant dans les rapports sur les plantages natifs afin que vous puissiez facilement identifier la version de votre code qui était en cours d'exécution.
  • Correction du problème lié à NDK_USE_CYGPATH afin qu'il ne provoque plus de problèmes avec libgcc (problème 195486).
  • Activation des options suivantes par défaut : -Wl,--warn-shared-textrel et -Wl,--fatal-warnings. Si vous avez partagé des réadressages de code, votre application ne se charge pas sous Android 6.0 (niveau d'API 23) ou version ultérieure. Notez que cette configuration n'a jamais été autorisée pour les applications 64 bits.
  • Correction de quelques problèmes pour améliorer le fonctionnement des en-têtes précompilés (problème 14 et problème 16 du NDK).
  • Les bibliothèques STL ARM (autres que thumb) inaccessibles ont été supprimées.
  • La compatibilité avec Vulkan a été ajoutée à android-24.
  • L'API Choreographer a été ajoutée à android-24.
  • Ajout des API libcamera2 pour les appareils compatibles avec le niveau de fonctionnalité INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ou supérieur. Pour en savoir plus, consultez la documentation de référence sur CameraCharacteristics.
Clang
  • Mise à jour de Clang vers la version 3.8svn (r256229, build 2812033). Les exécutables clang.exe et clang++.exe du package Windows 32 bits sont en réalité 64 bits. L'exécutable 32 bits est nommé clang_32.exe.
  • Correction de __thread afin qu'il fonctionne vraiment cette fois.
GCC
  • Synchronisation du compilateur avec ChromeOS GCC pour google/gcc-4_9 r227810.
  • Rétroportage du correctif de nettoyage de couverture à partir de ToT (r231296).
  • Correction de libatomic afin qu'il n'utilise pas ifuncs (problème 31 du NDK).
Binutils
  • Mise sous silence des messages d'information "Erratum 843419 found and fixed" (Erratum 843419 détecté et corrigé).
  • Introduction de l'option --long-plt afin de corriger une erreur interne de l'éditeur de liens lors de l'association de binaires arm32 très volumineux.
  • Correction de bouchons d'exécution incorrects pour AArch64. En raison de ce problème, les adresses de renvoi n'étaient pas calculées correctement pour les objets partagés dynamiques (DSO, Dynamic Shared Object) très volumineux.
  • Introduction de l'option par défaut --no-apply-dynamic pour contourner un bug de l'éditeur de liens dynamique pour les versions d'Android plus anciennes.
  • Correction d'un problème connu de NDK r11 faisant que dynamic_cast ne fonctionnait pas avec Clang, x86, stlport_static et l'optimisation.
GDB
  • Mise à jour vers la version 7.11 de GDB. Pour en savoir plus sur cette version, consultez GDB News.
  • Correction d'un certain nombre de bugs dans le script ndk-gdb.py.
Problèmes connus
  • Address Sanitizer (ASAN) x86 ne fonctionne pas à l'heure actuelle. Pour en savoir plus, consultez le problème 186276.
  • Le déroulement d'exception avec c++_shared ne fonctionne pas avec ARM sous Android 2.3 (niveau d'API 9) ou Android 4.0 (niveau d'API 14).
  • Les en-têtes et les bibliothèques Bionic pour Android 6.0 (niveau d'API 23) ou version ultérieure ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Android 5.0 (niveau d'API 21), ce qui correspond à NDK r11.
  • Les outils RenderScript sont absents, ce qui correspond à NDK r11 (problème 7 du NDK).
  • Dans le fichier d'en-tête NdkCameraMetadataTags.h, la valeur d'énumération de la balise de métadonnées de l'appareil photo ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP est indiquée par erreur et sera supprimée dans la prochaine version. Utilisez plutôt la valeur ACAMERA_STATISTICS_LENS_SHADING_MAP.
Modifications
  • Application de correctifs supplémentaires au script ndk-gdb.py.
  • Ajout d'un argument de nom de package facultatif à l'option --attach de la commande ndk-gdb (problème 13).
  • Correction des chemins d'accès non valides aux chaînes d'outils pour la plate-forme Windows 32 bits (problème 45).
  • Correction du chemin d'accès relatif pour la commande ndk-which (problème 29).
  • Correction de l'utilisation de cygpath pour le compilateur libgcc (problème 195486 d'Android).
NDK
  • Annonces importantes
    • Nous avons déplacé notre outil de suivi des bugs vers GitHub.
  • Modifications
    • Correction de ndk-gdb.py. Il avait complètement régressé dans la version r11.
    • Correction de ndk-gdb pour Mac.
    • Ajout de raccourcis de premier niveau pour les outils de ligne de commande :
      • ndk-depends
      • ndk-gdb
      • ndk-stack
      • ndk-which (commande qui ne figurait pas du tout dans les versions précédentes)
    • Correction des chaînes d'outils autonomes pour libc++, dans lesquelles __cxxabi_config.h était manquant.
    • Correction de la documentation d'aide pour --toolchain dans make-standalone-toolchain.sh.
Clang
  • Errata
    • Contrairement à ce que nous avons signalé dans les notes de la version r11, __thread ne fonctionne pas. En effet, la version de Clang que nous fournissons ne dispose pas de la correction de bug pour la compatibilité avec l'émulation TLS.
Clang
  • Annonces importantes
    • Nous vous recommandons vivement de passer à Clang.
      • Si vous rencontrez des problèmes affectant spécifiquement Clang dans le NDK, répertoriez les bugs sur cette page. Pour des problèmes plus généraux liés à Clang, répertoriez les bugs en suivant les instructions de cette page.
    • Clang a été mis à jour à vers la version 3.8svn (r243773, build 2481030).
      • Cette version est pratiquement identique à Clang en amont.
      • Le package NDK téléchargeable pour Windows 64 bits contient une version 32 bits de Clang.
  • Ajouts
    • Clang est maintenant compatible avec l'émulation TLS.
      • Le compilateur accepte désormais __thread en émulant ELF TLS avec des données spécifiques des threads pthread.
      • C++11 thread_local fonctionne dans certains cas, mais pas pour les données comportant des destructeurs non triviaux, car ils nécessitent une prise en charge par libc. Cette limite ne s'applique pas à l'exécution sous Android 6.0 (niveau d'API 23) ou version ultérieure.
      • L'émulation TLS ne fonctionne pas encore avec Aarch64 lorsque l'accès aux variables TLS s'effectue à partir d'une bibliothèque partagée.
GCC
  • Annonces importantes
    • Dans le NDK, GCC est désormais obsolète et remplacé par Clang.
      • Le NDK ne sera pas mis à jour vers la version 5.x et n'acceptera pas non plus de rétroportages non critiques.
      • La résolution des problèmes de compilation et des erreurs internes du compilateur dans la version 4.9 sera gérée au cas par cas.
  • Suppressions
    • Suppression de GCC 4.8. Toutes les cibles utilisent désormais GCC 4.9.
  • Autres modifications
    • Synchronisation de google/gcc-4_9 avec r224707. Auparavant, cette branche était synchronisée avec r214835.
NDK
  • Annonces importantes
    • Les exemples ne sont plus inclus dans le package NDK. Au lieu de cela, ils sont disponibles sur GitHub.
    • La documentation n'est plus incluse dans le package NDK. Au lieu de cela, elle est disponible sur le site Web des développeurs Android.
  • Ajouts
    • Ajout d'une API de traçage natif à android-23.
    • Ajout d'une API multiréseau native à android-23.
    • Activation de la fourniture de symboles avec gestion des versions par libc, m et dl à partir du niveau d'API 21.
    • Ajout d'une bibliothèque et d'en-têtes Vulkan au niveau d'API N.
  • Suppressions
    • Suppression de la compatibilité avec _WCHAR_IS_8BIT.
    • Suppression de sed.
    • Suppression de mclinker.
    • Suppression de Perl.
    • Suppression des symboles incompatibles avec les versions de plate-forme de libc, m, et dl dans toutes les versions de ces bibliothèques dans le NDK.
    • Suppression partielle de la compatibilité avec mips64r2. Le reste sera supprimé par la suite.
  • Autres modifications
    • Modification des chaînes d'outils autonomes ARM pour qu'elles utilisent par défaut arm7.
      • Vous pouvez rétablir l'ancien comportement en définissant l'option -target sur armv5te-linux-androideabi.
    • Modification du système de compilation afin qu'il utilise -isystem pour les inclusions de plates-formes.
      • Les avertissements dus à Bionic n'interrompent plus la compilation des applications.
    • Correction d'un bug qui se produisait lorsqu'un binaire générait des exceptions via gabi++ (problème 179410).
    • Remplacement de l'espace de noms intégré de libc++ par std::__ndk1 pour éviter les problèmes d'ODR avec la bibliothèque libc++ de plate-forme.
    • Toutes les bibliothèques libc++ sont désormais compilées avec libc++abi.
    • Remplacement de la valeur par défaut de APP_PLATFORM par Gingerbread.
      • La compatibilité avec Froyo et les versions antérieures devrait être abandonnée dans une prochaine version.
  • Mise à jour du struct gabi++ _Unwind_Exception pour les environnements 64 bits.
  • Ajout des fonctionnalités suivantes à cpufeatures :
    • Détection de SSE4.1 et SSE4.2
    • Détection des fonctionnalités du processeur sur x86_64
  • Mise à jour de libc++abi vers r231075 en amont.
  • Mise à jour de byteswap.h, endian.h, sys/procfs.h, sys/ucontext.h, sys/user.h et uchar.h à partir de ToT Bionic.
  • Synchronisation de sys/cdefs.h pour tous les niveaux d'API.
  • Correction de fegetenv and fesetenv pour arm.
  • Correction de la taille/l'alignement du pointeur de fin de crtend_* pour mips64 et x86_64.
Binutils
  • Ajouts
    • Ajout d'une nouvelle option : --pic-veneer.
  • Suppressions
    • Le package Windows 32 bits ne contient plus ld.gold. Au lieu de cela, vous pouvez obtenir ld.gold à partir du package Windows 64 bits.
  • Modifications
    • Unification de la source binutils entre Android et ChromiumOS. Pour en savoir plus sur cette modification, consultez les commentaires sur cette page.
    • Amélioration de la fiabilité de Gold pour aarch64. Utilisez -fuse-ld=gold au moment de l'association afin d'utiliser Gold au lieu de bfd. Le comportement par défaut sera probablement modifié en conséquence dans la prochaine version.
    • Amélioration du délai d'association des binaires volumineux pour le backend Gold ARM (jusqu'à 50 % de réduction du délai d'association pour le navigateur Chrome débogable).
GDB
  • Suppressions
    • Suppression de ndk-gdb au profit de ndk-gdb.py.
  • Modifications
    • Mise à jour de gdb vers la version 7.10.
    • Amélioration des performances.
    • Amélioration des messages d'erreur.
    • Correction des chemins d'accès relatifs aux projets.
    • Modification pour que Ctrl-C n'arrête plus gdbserver en arrière-plan.
    • Amélioration de la compatibilité avec Windows.
YASM
  • Modifications
    • Mise à jour de YASM vers la version 1.3.0.
Problèmes connus
  • ASAN x86 ne fonctionne pas à l'heure actuelle. Pour en savoir plus, consultez la discussion sur cette page.
  • La combinaison de Clang, x86, stlport_static et de niveaux d'optimisation supérieurs à -O0 entraîne des échecs de test avec dynamic_cast. Pour en savoir plus, consultez les commentaires sur cette page.
  • La gestion des exceptions échoue souvent avec c++_shared sur ARM32. La cause principale est une incompatibilité entre le dérouleur LLVM utilisé par libc++abi pour ARM32 et libgcc. Ce comportement n'est pas une régression par rapport à la version r10e.
Téléchargements
  • Les téléchargements correspondant à cette version sont archivés sur cette page.
Modifications importantes
  • Intégration de la solution de contournement pour l'erratum 843419 de Cortex-A53 dans l'éditeur de liens aarch64-linux-android-4.9. Pour en savoir plus sur cette solution de contournement, consultez la page Workaround for cortex-a53 erratum 843419.
  • Ajout de Clang 3.6. NDK_TOOLCHAIN_VERSION=clang sélectionne désormais cette version de Clang par défaut.
  • Suppression de Clang 3.4.
  • Suppression de GCC 4.6.
  • Intégration de la compatibilité avec le multithreading dans ld.gold pour toutes les architectures. L'association peut désormais s'effectuer avec ou sans prise en charge du multithreading. Par défaut, elle se fait sans celle-ci.
    • Pour intégrer le multithreading lors de la compilation, utilisez l'option --threads.
    • Pour compiler sans multithreading, utilisez l'option --no-threads.
  • Mise à niveau de GDB/gdbserver vers la version 7.7 pour toutes les architectures.
  • Suppression du package NDK pour Darwin 32 bits.
Correction de bugs importants
  • Correction d'un plantage en cas de boucles OpenMP en dehors du thread principal.
  • Correction d'une erreur interne du compilateur (ICE, internal compiler error) GCC 4.9 qui se produisait lorsque l'utilisateur déclarait #pragma GCC optimize ("O0"), mais qu'un niveau d'optimisation différent était spécifié sur la ligne de commande. pragma est prioritaire.
  • Correction d'une erreur qui provoquait un plantage avec le message d'erreur suivant :
    in add_stores, at var-tracking.c:6000
    
  • Mise en œuvre d'une solution de contournement pour un problème dans Clang 3.5 où la vectorisation automatique LLVM génère llvm.cttz.v2i64(), une instruction sans équivalent dans l'ensemble d'instructions ARM.
Autres corrections de bugs
  • Correction des bibliothèques et des en-têtes suivants :
    • Correction de PROPERTY_* dans media/NdkMediaDrm.h
    • Correction de sys/ucontext.h pour mips64
    • Abandon de la vérification de la version Clang pour __builtin_isnan et __builtin_isinf
    • Ajout de android-21/arch-mips/usr/include/asm/reg.h et de android-21/arch-mips64/usr/include/asm/reg.h
  • Correction d'un avertissement erroné concernant les limites de tableau généré par GCC 4.9 pour x86, et réactivation de l'avertissement concernant les limites de tableau généré par GCC 4.9 pour ARM. L'avertissement pour ARM avait précédemment été désactivé de manière inconditionnelle.
  • Correction de Clang 3.5 pour mips et mips64 afin de créer une section .gcc_except_table accessible en écriture, ce qui correspond au comportement de GCC. Cette modification vous permet d'éviter l'avertissement suivant de l'éditeur de liens :
    .../ld: warning: creating a DT_TEXTREL in a shared object
    
  • Rétroportage d'un correctif pour les problèmes liés à compiler-rt qui causaient des plantages lorsque Clang effectuait une compilation pour mips64. Pour en savoir plus, consultez le problème 20098 de LLVM.
  • Correction des plantages de Clang 3.5 liés aux commentaires non-ASCII (problème 81440).
  • Correction de stlport collate::compare afin qu'il renvoie -1 et 1. Auparavant, il renvoyait des nombres signés arbitraires.
  • Correction de ndk-gdb pour les ABI 64 bits (problème 118300).
  • Correction du plantage de l'exemple HelloComputeNDK pour RenderScript sous Android 4.4 (niveau d'API Android 19). Pour en savoir plus, consultez cette page.
  • Correction de libc++ __wrap_iter pour GCC. Pour en savoir plus, consultez le problème 22355 de LLVM.
  • Correction de la compatibilité de .asm avec l'ABI x86_64.
  • Mise en place d'une solution de contournement pour le problème lié à stlport dans GCC 4.8 (problème 127773).
  • Suppression du séparateur de répertoire de fin \\ du chemin d'accès au projet sous Windows (problème 160584).
  • Correction d'une erreur no rule to make target lors de la compilation d'un seul fichier .c en exécutant la commande ndk-build.cmd à partir de gradle (problème 66937).
  • Ajout des bibliothèques libatomic.a et libgomp.a qui manquaient dans les chaînes d'outils hôte suivantes :
    • aarch64-linux-android-4.9
    • mips64el-linux-android-4.9
    • mipsel-linux-android-4.9
    • x86_64-4.9
Autres modifications
  • Ajout de ld.gold pour aarch64. L'éditeur de liens par défaut reste ld.bfd. Pour activer explicitement ld.gold, ajoutez -fuse-ld=gold à la variable LOCAL_LDFLAGS ou APP_LDFLAGS.
  • Création des chaînes d'outils MIPS et MIPS64 avec binutils-2.25, qui offre une compatibilité améliorée avec R6.
  • Définition de -fstandalone-debug (informations de débogage complètes) comme option par défaut pour Clang.
  • Remplacement de -fstack-protector par -fstack-protector-strong pour les chaînes d'outils ARM, AArch64, X86 et X86_64 pour GCC 4.9, Clang 3.5 et Clang 3.6.
  • Ajout du commutateur de ligne de commande --package à ndk-gdb pour permettre au système de compilation de remplacer le nom du package (problème 56189).
  • Abandon de -mno-ldc1-stc1 pour MIPS. Il est possible que cette option ne fonctionne pas avec les nouvelles options -fpxx et -mno-odd-spreg, ni avec l'ABI FPXX.
  • Ajout de la détection de MIPS MSA et R6 à cpu-features.
Modifications importantes
  • Utilisation de GCC 4.8 par défaut pour toutes les ABI 32 bits. Abandon de GCC 4.6, qui sera supprimé dans la prochaine version. Pour rétablir le comportement précédent, ajoutez NDK_TOOLCHAIN_VERSION=4.6 à ndk-build ou ajoutez --toolchain=arm-linux-androideabi-4.6 lorsque vous exécutez make-standalone-toolchain.sh sur la ligne de commande. GCC 4.9 reste la version par défaut pour les ABI 64 bits.
  • Modification de toutes les chaînes d'outils x86[_64] pour qu'elles n'ajoutent plus -mstackrealign par défaut. La chaîne d'outils NDK suppose un alignement de pile de 16 octets. Les options et les outils utilisés par défaut appliquent cette règle. Un utilisateur qui écrit du code assembleur doit veiller à conserver l'alignement de la pile et à s'assurer que les autres compilateurs respectent également cette règle (bug 38496 de GCC).
  • Ajout de la fonctionnalité Address Sanitizer à la compatibilité de Clang 3.5 avec les ABI ARM et x86. Pour en savoir plus sur cette modification, consultez le projet Address Sanitizer.
  • Introduction, à partir du niveau d'API 21, de l'obligation d'utiliser -fPIE -pie lors de la compilation. Dans les niveaux d'API 16 et supérieurs, ndk-build utilise PIE lors de la compilation. Cette modification a plusieurs conséquences, qui sont décrites dans le problème 888 de la Preview développeur. Ces conséquences ne concernent pas les bibliothèques partagées.
Correction de bugs importants
  • Autres corrections liées aux errata A53 835769 dans l'éditeur de liens aarch64-linux-android-4.9. Dans ce cadre, GCC transmet une nouvelle option, --fix-cortex-a53-835769, lorsque -mfix-cortex-a53-835769 (activé par défaut) est spécifié. Pour en savoir plus, consultez ce message binutils et ce message binutils.
  • Documentation du correctif d'un blocage de libc++ sscanf/vsscanf au niveau d'API 21. Le correctif lui-même avait été appliqué à la version r10c (problème 77988).
  • Correction d'un plantage d'AutoFDO (-fauto-profile) qui se produisait avec GCC 4.9 lorsque -Os était spécifié (problème 77571).
Autres corrections de bugs
  • Correction des bibliothèques et des en-têtes suivants :
    • Ajout de posix_memalign au niveau d'API 16. Ajout d'un prototype dans stdlib.h aux niveaux d'API 16 à 19 (problème 77861).
    • Correction de stdatomic.h afin qu'il n'inclue <atomic> que pour C++11.
    • Modification des en-têtes suivants pour une utilisation autonome : sys/user.h et gl2ext.h, dlext.h, fts.h et sgidefs.h pour le niveau d'API 21.
    • Modification de sys/user.h pour renommer mxcsr_mask en le remplaçant par mxcr_mask et pour modifier le type de données de u_ar0
    • en remplaçant unsigned long par le struct user_regs_struct*.
    • Modification du type de valeur renvoyé par sysconf() : int remplacé par long.
  • Correction de la gestion de thumb pour LOCAL_ARM_MODE par ndk-build : dans la version r10d, ndk-build ajoute LOCAL_LDFLAGS+=-mthumb par défaut, sauf si l'une des conditions suivantes s'applique :
    • Vous avez défini LOCAL_ARM_MODE sur arm.
    • Vous créez une version de débogage (avec des paramètres tels que APP_OPTIM=debug et AndroidManifest.xml contenant android:debuggable="true"), pour laquelle le mode ARM est défini par défaut afin de conserver la compatibilité avec les chaînes d'outils antérieures (problème 74040).
  • Correction de LOCAL_SRC_FILES dans ndk-build de façon à utiliser des chemins d'accès absolus Windows (problème 74333).
  • Suppression du code propre à bash de ndk-gdb (problème 73338).
  • Suppression du code propre à bash de make-standalone-toolchain.sh (problème 74145).
  • Révision de la documentation concernant un correctif pour les dépendances transitives de System.loadLibrary() (problème 41790).
  • Correction d'un problème qui empêchait l'extraction des packages 64 bits sous Ubuntu 14.04 et OS X 10.10 (Yosemite) (problème 78148).
  • Correction d'un problème lié à LOCAL_PCH pour améliorer la compatibilité avec Clang (problème 77575).
  • Clarification du message d'avertissement "requires executable stack" (pile exécutable requise) de ld.gold (problème 79115).
Modifications importantes
  • Modification de la structure de téléchargement :
    • Chaque package contient désormais les en-têtes, les bibliothèques et les outils 32 et 64 bits pour la plate-forme concernée.
    • Vous n'avez plus besoin de télécharger séparément les bibliothèques STL contenant les informations de débogage.
  • Remplacement de tous les éléments nommés Android-L par la désignation de la version officielle : android-21.
  • Mise à jour de GCC 4.9 en rebasculant sur la branche google du dépôt GCC. Les principales différences par rapport à la version en amont de GCC 4.9 sont les suivantes :
    • L'option -O2 active désormais la vectorisation, sans pelage de boucle, mais avec un déroulage plus agressif.
    • Des améliorations ont été apportées à FDO et à LIPO.
    • Pour en savoir plus, consultez Correction de bugs importants ci-dessous.

  • Ajout de la compatibilité avec Clang 3.5 pour tous les hôtes : NDK_TOOLCHAIN_VERSION=clang sélectionne désormais Clang 3.5. Gardez à l'esprit les points suivants :
    • ARM et x86 utilisent par défaut l'assembleur intégré. Si cela pose problème, utilisez -fno-integrated-as comme solution de contournement.
    • Clang 3.5 génère des avertissements supplémentaires pour les options inutilisées, telles que l'option -finline-functions compatible avec GCC.
    • Lors de la migration à partir de projets utilisant GCC, vous pouvez utiliser -Wno-invalid-command-line-argument et -Wno-unused-command-line-argument pour ignorer les options inutilisées jusqu'à ce que vous puissiez décider quoi en faire.

  • Ajout de la possibilité d'activer le mode débogage ART lors du débogage sur un appareil Android 5.0 utilisant ART comme machine virtuelle, en spécifiant l'option art-on. Pour en savoir plus, consultez prebuilt/common/gdb/common.setup dans le répertoire contenant le NDK.
  • Suppression de la compatibilité avec Clang 3.3.
  • Abandon de GCC 4.6, qui sera éventuellement supprimé des versions futures.
  • Mise à jour de mclinker vers la version 2.8, compatible avec le pliage de code identique (ICF, Identical Code Folding). Spécifiez ICF à l'aide de l'option --icf.
  • Compatibilité étendue avec arm_neon.h dans x86 et x86_64 pour atteindre une couverture d'environ 93 % des fonctionnalités intrinsèques de NEON. Pour en savoir plus sur la compatibilité avec NEON :
    • Accédez au document "NDK Programmer's Guide" (docs/Programmers_Guide/html/), puis consultez Architectures and CPUs > Neon.
    • Examinez l'exemple hello-neon mis à jour dans samples/.
    • Consultez le guide d'Intel sur le portage d'ARM NEON vers Intel SSE.
  • Documentation de la compatibilité de _FORTIFY_SOURCE avec headers/libs/android-21, qui est apparue dans la version r10 (lorsque android-21 s'appelait encore Android-L), mais pour laquelle il n'existait aucune documentation.
Correction de bugs importants
Autres corrections de bugs
  • Correction des bibliothèques et en-têtes suivants pour android-21 :
    • Ajout de codes de touche TV : android/keycodes.h.
    • Ajout de constantes et de six nouvelles fonctions de capteur dans android/sensor.h : ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount, ASensor_getFifoReservedEventCount, ASensor_getStringType, ASensor_getReportingMode et ASensor_isWakeUpSensor.
    • Correction de stdatomic.h pour améliorer la compatibilité avec GCC 4.6 et permettre l'utilisation de l'en-tête <atomic>.
    • Ajout de sys/ucontext.h et sys/user.h à tous les niveaux d'API. L'en-tête signal.h inclut désormais <sys/ucontext.h>. Vous pouvez supprimer toute définition existante de struct ucontext.
    • Ajout de posix_memalign aux niveaux d'API 17, 18 et 19.
    • Ajout des fonctions suivantes à toutes les architectures : android_set_abort_message, posix_fadvise, posix_fadvise64 et pthread_gettid_np.
    • Ajout des autorisations requises à l'exemple native-media/AndroidManifest.xml (problème 106640).
    • Ajout de clock_nanosleep et clock_settime au niveau d'API 21 (problème 77372).
    • Suppression des symboles suivants de toutes les architectures : get_malloc_leak_info, free_malloc_leak_info, __srget, __swbuf, __srefill, __swsetup, __sdidinit, __sflags, __sfp, __sinit, __smakebuf, __sflush, __sread, __swrite, __sseek, __sclose, _fwalk, __sglue, __get_thread, __wait4, __futex_wake, __open, __get_tls, __getdents64 et dlmalloc.
    • Suppression des fonctions suivantes des architectures 64 bits : basename_r, dirname_r, __isthreaded et _flush_cache (mips64).
    • Suppression de la fonction suivante des architectures 32 bits : __signalfd4.
    • Remplacement du type du troisième argument size_t par int dans les fonctions suivantes : strtoll_l, strtoull_l, wcstoll_l et wcstoull_l.
    • Restauration des fonctions suivantes dans l'architecture 64 bits : arc4random, arc4random_buf et arc4random_uniform.
    • Remise en place de cxa_* et des opérateurs new et delete dans libstdc++.so. Cette modification rétablit le comportement de la version r9d. Les versions précédentes de la r10 contenaient des fichiers d'espace réservé.
  • Rétablissement de la compatibilité avec MXU dans GCC 4.8 et 4.9 pour mips. Elle avait disparu dans les versions r10 et r10b, car ces versions de GCC avaient été compilées avec binutils-2.24, qui n'était pas compatible avec MXU, mais qui l'est maintenant.
  • Correction de --toolchain= dans make-standalone-toolchain.sh pour qu'il accepte et traite désormais correctement l'utilisation d'un suffixe spécifiant une version de Clang.
  • Correction des fonctions libc++/armeabi de strtod().
  • Correction de la documentation du NDK dans docs/.
Autres modifications
  • Amélioration de cpu-features pour détecter la compatibilité d'ARMv8 avec les ensembles d'instructions suivants : AES, CRC32, SHA2, SHA1 et PMULL/PMULL2 64 bits (problème 106360).
  • Modification de ndk-build afin qu'il utilise *-gcc-ar, disponible dans GCC 4.8, GCC 4.9 et Clang. Clang le spécifie au lieu de *-ar. Ce paramètre améliore la compatibilité avec LTO.
  • Suppression des en-têtes include-fixed/linux/a.out.h et include-fixed/linux/compiler.h du compilateur GCC (problème 73728).
  • Correction d'un problème lié à -flto avec GCC 4.8 sous Mac OS X. Le message d'erreur était le suivant :
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • Correction d'une faute de frappe dans build-binary.mk. (problème 76992).
Problèmes connus importants
  • La spécification de -Os (-fauto-profile) dans GCC 4.9 peut entraîner un plantage (problème 77571).
Remarques importantes
  • En raison de la limite de taille de 512 Mo applicable aux packages téléchargeables, les éléments 32 bits suivants ne figurent pas dans les packages de téléchargement du NDK 32 bits. Au lieu de cela, ils se trouvent dans ceux des versions 64 bits :
    • En-têtes Android-L
    • GCC 4.9
  • À l'heure actuelle, la seule compatibilité avec Renderscript assurée par le NDK est la suivante : Renderscript 32 bits avec Android 4.4 (niveau d'API 19). Vous ne pouvez pas créer HelloComputeNDK (le seul exemple Renderscript) avec une autre combinaison de Renderscript (32 ou 64 bits) et d'une version Android.
  • Pour compiler native-codec, vous devez utiliser un package NDK 64 bits, car il contient tous les en-têtes Android-L.
Correction de bugs importants
  • Correction de gdb 7.6 dans GCC 4.8/4.9 (problèmes 74112 et 74371).
  • Correction de GCC 4.8/4.9 pour x86 afin qu'il n'active plus -msse4.2 et -mpopcnt par défaut (problème 73843).
Autres corrections de bugs
  • Suppression de stdio.h des répertoires include-fixed/ de toutes les versions de GCC (problème 73728).
  • Suppression des fichiers d'en-tête en double des packages Windows dans les répertoires platforms/android-L/arch-*/usr/include/linux/netfilter*/ (problème 73704).
  • Correction d'un problème qui empêchait Clang de compiler HelloComputeNDK.
  • Correction de la fonction atexit (problème 66595).
  • Plusieurs corrections ont été apportées aux documents dans docs/ et sources/third_party/googletest/README.NDK (problème 74069).
  • Correction des en-têtes Android-L :
    1. Ajout des fonctions suivantes à ctype.h et wchar.h : dn_expand(), grantpt(), inet_nsap_addr(), inet_nsap_ntoa(), insque(), nsdispatch(), posix_openpt(), __pthread_cleanup_pop(), __pthread_cleanup_push(), remque(), setfsgid(), setfsuid(), splice(), tee() et twalk() (problème 73719) ainsi que 42 fonctions *_l().
    2. Changement de nom : cmsg_nxthdr devient __cmsg_nxthdr.
    3. Suppression de __libc_malloc_dispatch.
    4. Remplacement du prototype ptrace() par long ptrace(int, ...);.
    5. Suppression de sha1.h.
    6. Extension de android_dlextinfo dans android/dlext.h.
    7. Annotation de __NDK_FPABI__ pour les fonctions recevant ou renvoyant des valeurs de type float ou double dans stdlib.h, time.h, wchar.h et complex.h.
Autres modifications
  • Mise à jour de mipsel-linux-android-4.9 et mips64el-linux-android-4.9, mise en œuvre d'une nouvelle structure de répertoire multilib et compatibilité avec gdb-7.7.
  • Amélioration de cpu-features pour détecter davantage de fonctionnalités arm64 (liste des modifications 100339).
Modifications importantes
  • Ajout de trois ABI, toutes en 64 bits : arm64-v8a, x86_64 et mips64.
  • Remarques :
    • GCC 4.9 est le compilateur par défaut pour les ABI 64 bits. La version de Clang est actuellement la 3.4. Il est possible que NDK_TOOLCHAIN_VERSION=clang ne fonctionne pas pour arm64-v8a et mips64.
    • Android-L est le premier niveau compatible avec l'environnement 64 bits. Notez que ce niveau d'API est temporaire et qu'il n'est destiné qu'à l'aperçu de L. Un numéro de niveau d'API réel le remplacera à la publication de la version L.
    • Cette version inclut désormais les paramètres all32 et all64 pour APP_ABI.
      • APP_ABI=all32 est équivalent à APP_ABI=armeabi,armeabi-v7a,x86,mips.
      • APP_ABI=all64 est équivalent à APP_ABI=arm64-v8a,x86_64,mips64.
      • APP_ABI=all sélectionne toutes les ABI.
    • La nouvelle bibliothèque GNU libstdc++ dans Android-L contient l'intégralité de <tr1/cmath>. Avant de définir votre propre fonction mathématique, vérifiez dans _GLIBCXX_USE_C99_MATH_TR1 si une fonction portant ce nom existe déjà afin d'éviter les erreurs de définitions multiples dans l'éditeur de liens.
    • La bibliothèque cpu-features a été mise à jour pour le noyau ARMv8. Il est possible que la bibliothèque cpu-features existante ne détecte pas la présence de NEON sur la plate-forme ARMv8. Recompilez votre code avec la nouvelle version.
  • Ajout d'un répertoire d'API platforms/android-L/ contenant les éléments suivants :
    • En-têtes Bionic mis à jour. Ils n'avaient pas changé entre les niveaux d'API Android 3 (Cupcake) et 19 (KitKat). Cette nouvelle version, pour le niveau L, va être synchronisée avec AOSP.
    • Nouvelles API multimédias et exemple de codec natif.
    • En-tête Android.h mis à jour pour SLES/OpenSLES et assurant la compatibilité avec le format audio à virgule flottante à simple précision dans un lecteur audio.
    • Extensions GLES 3.1 et AEP pour libGLESv3.so..
    • En-têtes GLES2 et GLES3 mis à jour vers les dernières versions officielles de Khronos.
  • Ajout des compilateurs GCC 4.9 aux ABI 32/64 bits. Comme indiqué précédemment, GCC 4.9 est le compilateur par défaut (uniquement) pour les ABI 64 bits. Pour les ABI 32 bits, vous devez activer GCC 4.9 de manière explicite, car GCC 4.6 est toujours le compilateur par défaut.
    • Pour ndk-build, activez la compilation 32 bits avec GCC 4.9 en ajoutant NDK_TOOLCHAIN_VERSION=4.9 à Application.mk ou en l'exportant en tant que variable d'environnement à partir de la ligne de commande.
    • Pour une chaîne d'outils autonome, utilisez l'option --toolchain= dans le script make-standalone-toolchain.sh. Exemple : --toolchain=arm-linux-androideabi-4.9.
  • Mise à niveau de GDB vers la version 7.6 dans GCC 4.8/4.9 et x86*. Étant donné que GDB en est encore à la version GDB-7.3.x dans GCC 4.6 (compilateur par défaut pour ARM et MIPS), vous devez définir NDK_TOOLCHAIN_VERSION=4.8 ou 4.9 pour permettre à ndk-gdb de sélectionner GDB 7.6.
  • Ajout de l'option de compilation -mssse3 pour assurer la compatibilité avec SSSE3, en en faisant l'option par défaut pour l'ABI x86 (mise à niveau à partir de SSE3). L'image publiée par Google ne contient pas d'instructions SSSE3.
  • Mise à jour de GCC 4.8 vers la version 4.8.3.
  • Amélioration de la compatibilité avec ARM libc++ EH grâce au passage de gabi++ à libc++abi. Pour en savoir plus, consultez la section "Compatibilité C++" de la documentation. Gardez à l'esprit les points suivants :
    • Tous les tests, à l'exception des paramètres régionaux, réussissent désormais avec Clang 3.4 et GCC 4.8. Pour en savoir plus, consultez la section "Compatibilité C++" de la documentation.
    • Les bibliothèques libc++ pour X86 et MIPS libc++ utilisent toujours gabi++.
    • GCC 4.7 et les versions ultérieures peuvent désormais utiliser <atomic>.
    • Vous devez ajouter -fno-strict-aliasing si vous utilisez <list>, car __list_imp::_end_ enfreint les règles TBAA (problème 61571).
    • Depuis GCC 4.6, LIBCXX_FORCE_REBUILD:=true ne recompile plus libc++. Pour la recompiler, vous devez utiliser un autre compilateur. Notez que Clang 3.3 n'a pas été testé.
  • mclinker en est maintenant à la version 2.7 et est compatible avec aarch64 Linux.
  • Ajout de la compatibilité avec les en-têtes précompilés spécifiés par LOCAL_PCH (problème 25412).
Correction de bugs importants
  • Correction de libc++ pour qu'elle compile maintenant std::feof, etc. (problème 66668).
  • Correction d'un appel de bibliothèque atomique Clang 3.3/3.4 qui provoquait des plantages dans certains tests libc++ pour l'ABI armeabi.
  • Correction des plantages de Clang 3.4 lors de la lecture d'en-têtes précompilés (problème 66657).
  • Correction de l'assertion -O3 de Clang 3.3/3.4 dans :
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (problème 57381).
  • Correction du plantage de Clang 3.3/3.4 suivant :
  • Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018 (problème 66950).
Autres corrections de bugs
  • Corrections d'en-têtes :
    • Correction de ssize_t 32 bits pour le définir sur int au lieu de long int.
    • Correction de WCHAR_MIN et de WCHAR_MAX afin qu'ils adoptent les signes appropriés en fonction de l'architecture sur laquelle ils s'exécutent :
      • X86/MIPS : avec signe.
      • ARM : sans signe.
      • Pour forcer X86/MIPS à ne pas ajouter de signe par défaut, utilisez -D__WCHAR_UNSIGNED__.
      • Pour obliger wchar_t à avoir 16 bits, utilisez -fshort-wchar.
    • Suppression des symboles inexistants du fichier libc.so 32 bits et ajout de pread64, pwrite64 et ftruncate64 pour le niveau d'API Android 12 ou supérieur (problème 69319). Pour en savoir plus, consultez le message de commit associé à la liste de modifications d'AOSP 94137.
  • Correction d'un avertissement de GCC concernant la redéfinition de putchar. Le message d'avertissement est le suivant :
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (liste de modifications 91185).
  • Correction de make-standalone-toolchain.sh --stl=libc++ pour qu'il :
    • copie cxxabi.h (problème 68001) ;
    • s'exécute dans des répertoires autres que le répertoire d'installation du NDK (problèmes 67690 et 68647).
  • Correction de GCC/Windows de façon à ne placer des arguments entre guillemets que si cela est nécessaire pour générer des processus dans des programmes externes. Cette modification réduit le risque de dépasser la limite de longueur de 32 000.
  • Correction d'un problème qui empêchait d'ajuster la variable d'environnement APP_PLATFORM.
  • Correction de l'intégration de IsSystemLibrary() dans crazy_linker afin qu'il utilise strrchr() au lieu de strchr() pour rechercher le véritable nom de base du chemin d'accès à la bibliothèque.
  • Correction de l'impossibilité de compiler native-audio en mode débogage.
  • Correction de l'impossibilité d'afficher des nombres à virgule flottante extrêmes avec gdb (problème 69203).
  • Correction de l'impossibilité de compiler avec -Wl,-shared (par opposition à -shared, qui ne posait aucun problème de compilation) dans Clang 3.4. Le problème venait du fait que Clang ajoutait -pie pour les cibles Android si ni -shared, ni -static n'existait. Ce comportement, qui était incorrect, obligeait l'éditeur de liens à signaler que -shared et -pie ne pouvaient pas coexister.
Autres modifications
  • Ajout de arm_neon.h à la chaîne d'outils x86, qui permet désormais d'émuler environ 47 % de Neon. Les types 64 bits ne sont pas compatibles à l'heure actuelle. Pour en savoir plus, consultez la section sur la compatibilité avec les fonctionnalités intrinsèques d'ARM Neon dans la documentation x86.
  • Portage de l'optimisation d'ARM/GOT_PREL (présente dans GCC 4.6 compilé à partir de la branche Google de GCC) vers ARM GCC 4.8/4.9. Cette optimisation réduit parfois le nombre d'instructions lors de l'accès aux variables globales. À titre d'exemple, consultez le script build.sh dans $NDK/tests/build/b14811006-GOT_PREL-optimization/.
  • Ajout de la version ARM pour les STL gabi++, stlport et libc++, qui disposent désormais du mode ARM et du mode Thumb.
  • Il est maintenant possible d'appeler le script make-standalone-toolchain.sh avec --toolchain=x86_64-linux-android-4.9, qui équivaut à --toolchain=x86_64-4.9.
Modifications importantes
  • Ajout de la compatibilité avec le compilateur Clang 3.4. L'option NDK_TOOLCHAIN_VERSION=clang sélectionne désormais Clang 3.4. GCC 4.6 reste le compilateur par défaut.
  • Ajout de APP_ABI=armeabi-v7a-hard, avec l'option multilib supplémentaire -mfloat-abi=hard. Ces options sont destinées à être utilisées avec ARM GCC 4.6/4.8 et Clang 3.3/3.4 (qui utilisent l'assembleur, l'éditeur de liens et les bibliothèques 4.8). Lorsque vous utilisez ces options, notez les modifications suivantes :
    • Lors de l'exécution du script ndk-build, ajoutez les options suivantes pour la cible armeabi-v7a :
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      La bibliothèque créée est copiée dans libs/armeabi-v7a. Pour que make se comporte comme prévu, vous ne pouvez pas spécifier à la fois armeabi-v7a et armeabi-v7a-hard en tant que cibles (c'est-à-dire sur la ligne APP_ABI=). Si vous le faites, l'une d'entre elles sera ignorée. Notez que APP_ABI=all est toujours équivalent à armeabi armeabi-v7a x86 mips.
    • Le script make-standalone-toolchain.sh copie des bibliothèques supplémentaires dans les répertoires /hard. Ajoutez les CFLAGS et LFLAGS ci-dessus à votre fichier makefile pour permettre l'association de GCC ou Clang aux bibliothèques situées dans /hard.
  • Ajout de l'assembleur yasm, ainsi que des options LOCAL_ASMFLAGS et EXPORT_ASMFLAGS pour les cibles x86. Le script ndk-build utilise prebuilts/*/bin/yasm* pour créer des fichiers LOCAL_SRC_FILES avec l'extension .asm.
  • Mise à jour de MClinker vers la version 2.6.0, ce qui ajoute la compatibilité avec -gc-sections.
  • Ajout de la compatibilité expérimentale avec libc++ (r201101 en amont). Utilisez cette nouvelle fonctionnalité en procédant comme suit :
    • Ajoutez APP_STL := c++_static ou APP_STL := c++_shared dans Application.mk. Vous pouvez effectuer une recompilation à partir de la source via LIBCXX_FORCE_REBUILD := true.
    • Exécutez make-standalone-toolchain.sh --stl=libc++ pour créer une chaîne d'outils autonome avec des en-têtes/une bibliothèque libc++.
    Pour en savoir plus, consultez CPLUSPLUS-SUPPORT.html (problème 36496).
Correction de bugs importants
  • Correction de la génération d'une erreur non interceptée par un gestionnaire d'exceptions inattendues pour GCC 4.6/4.8 ARM EABI (problème GCC 59392).
  • Correction de GCC 4.8 afin qu'il résolve désormais correctement la spécialisation partielle d'un modèle avec un argument de modèle dépendant sans type (problème GCC 59052).
  • Ajout de modules au package Python prédéfini (problème 59902) :
    • Mac OS X : zlib, bz2, _curses, _curses_panel, _hashlib et _ssl
    • Linux : zlib, nis, crypt, _curses et _curses_panel
  • Correction de gdbserver event_getmsg_helper x86 et MIPS.
  • Correction de nombreux problèmes liés à la chaîne d'outils NDK RenderScript, y compris des problèmes de compatibilité avec les anciens appareils et de réflexion C++.

Autres corrections de bugs
  • Corrections d'en-têtes :
    • Correction d'un #include <sys/types.h> manquant dans android/asset_manager.h pour le niveau d'API Android 13 et supérieur (problème 64988).
    • Correction d'un #include manquant dans android/rect_manager.h pour le niveau d'API Android 14 et supérieur.
    • Ajout de JNICALL à JNI_OnLoad et à JNI_OnUnload dans jni.h. Notez que JNICALL est défini comme __NDK_FPABI__. Pour en savoir plus, consultez sys/cdefs.h.
    • Mise à jour des en-têtes suivants afin qu'il soit possible de les inclure sans avoir à ajouter manuellement leurs dépendances (problème 64679) :
    • android/tts.h
      EGL
      /eglext.h
      fts
      .h
      GLES
      /glext.h
      GLES2
      /gl2ext.h
      OMXAL
      /OpenMAXSL_Android.h
      SLES
      /OpenSLES_Android.h
      sys
      /prctl.h
      sys
      /utime.h
    • Ajout de sys/cachectl.h pour toutes les architectures. Les développeurs MIPS peuvent désormais inclure cet en-tête au lieu d'écrire #ifdef __mips__.
    • Correction de platforms/android-18/include/android/input.h via l'ajout de __NDK_FPABI__ aux fonctions qui acceptent ou renvoient des valeurs float ou doubles.
    • Correction de MIPS struct stat, qui était défini de manière incorrecte sur son équivalent 64 bits pour le niveau d'API Android 12 et supérieur. Ce paramètre incorrect correspondait à une régression introduite dans la version r9c.
    • Définition de __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE et __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE pour le niveau d'API Android 9 ou inférieur.
    • Ajout de scalbln, scalblnf et scalblnl à libm.so x86 pour le niveau d'API 18 et supérieur.
    • Correction d'une faute de frappe dans sources/android/support/include/iconv.h (problème 63806).
  • Correction de gabi++ std::unexpected() pour appeler std::terminate() afin qu'un gestionnaire std::terminate() défini par l'utilisateur puisse éventuellement s'exécuter.
  • Correction de gabi++ pour intercepter std::nullptr.
  • Correction des exemples Teapot et MoreTeapots :
    • Résolution d'un problème lié aux puces électroniques Tegra 2 et 3 grâce à la modification des variables spéculaires de façon à utiliser une précision moyenne. Les valeurs de puissance spéculaire peuvent désormais être inférieures à 1,0.
    • Modification des exemples de sorte que le fait d'appuyer sur le bouton de volume restaure le mode immersif et invalide SYSTEM_UI_FLAG_IMMERSIVE_STICKY. La rotation de l'écran ne déclenche pas onSystemUiVisibilityChange et ne restaure donc pas le mode immersif.
  • Correction du script ndk-build permettant d'ajouter -rpath-link=$SYSROOT/usr/lib et -rpath-link=$TARGET_OUT afin d'utiliser ld.bfd pour associer des exécutables (problème 64266).
  • Suppression de -Bsymbolic de tous les builds STL.
  • Correction de ndk-gdb-py.cmd via la définition de SHELL comme variable d'environnement au lieu de le transmettre à python.exe, qui ignore le paramètre (problème 63054).
  • Correction du script make-standalone-toolchain.sh afin que l'option --stl=stlport copie les en-têtes gabi++ au lieu de les relier par lien symbolique. Les interfaces système cmd.exe et MinGW ne comprennent pas les liens symboliques créés par cygwin.
Autres modifications
  • Application d'autorisations d'exécution à tous les scripts *cmd précédemment destinés à être utilisés uniquement dans l'interface système cmd.exe, au cas où les développeurs préfèrent utiliser ndk-build.cmd dans cygwin plutôt que le script ndk-build recommandé.
  • Amélioration de la vitesse du script make-standalone-toolchain.sh en le déplaçant au lieu de le copier si le répertoire de destination spécifié n'existe pas.

Cette version vise uniquement à corriger des bugs.

Correction de bugs importants
  • Correction d'un problème dans GCC 4.8 ARM faisant que le pointeur de la pile était restauré trop tôt. Ce problème empêchait le pointeur de bloc d'accéder de manière fiable à une variable du bloc de pile (problème GCC 58854).
  • Correction d'un problème dans GCC 4.8 libstdc++ faisant qu'un bug dans std::nth_element entraînait la génération de code produisant une erreur de segmentation (problème 62910).
  • Correction de l'erreur interne du compilateur GCC 4.8 suivante dans cc1/cc1plus avec -fuse-ld=mcld :
    cc1: internal compiler error: in common_handle_option, at
    opts.c:1774
  • Correction de la compatibilité de -mhard-float avec les fonctions mathématiques __builtin. Pour en savoir plus sur les corrections de -mhard-float avec STL, veuillez suivre le problème 61784.
Autres corrections de bugs
  • Corrections d'en-têtes :
    • Remplacement du prototype poll par poll(struct pollfd *, nfds_t, int); dans poll.h.
    • Ajout de utimensat à libc.so pour les niveaux d'API Android 12 et 19. Ces bibliothèques sont désormais incluses pour tous les niveaux d'API Android compris entre 12 et 19.
    • Introduction de futimens dans libc.so pour le niveau d'API Android 19.
    • Ajout des fonctions manquantes clock_settime() et clock_nanosleep() à time.h pour le niveau d'API Android 8 ou supérieur.
    • Ajout de CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, et CLOCK_BOOTTIME_ALARM dans time.h.
    • Suppression de CLOCK_REALTIME_HR et CLOCK_MONOTONIC_HR., qui sont obsolètes.
  • Exemples Teapot, MoreTeapots et source/android/ndk_helper :
    • Modification des exemples afin qu'ils utilisent désormais une ABI hard-float pour armeabi-v7a
    • Mise à jour afin qu'ils utilisent le mode immersif au niveau d'API Android 19 ou supérieur
    • Correction d'un problème de Check_ReleaseStringUTFChars dans /system/lib/libdvm.so qui provoquait des plantages sur les appareils x86
  • Correction des échecs de ndk-build qui se produisent dans cygwin lorsque le package NDK est référencé via un lien symbolique.
  • Correction des échecs de ndk-build.cmd qui se produisent dans Windows cmd.exe lorsque LOCAL_SRC_FILES contient des chemins d'accès absolus (problème 69992).
  • Correction du script ndk-stack pour qu'il se poursuive même lorsqu'il ne peut pas analyser un bloc en raison d'une routine, d'un nom de fichier ou d'un numéro de ligne introuvables. Dans tous les cas, il affiche ??.
  • Correction de la pile ndk-stack pour les cibles windows-x64_64 afin qu'elle ne fasse plus correspondre par erreur une ligne de bloc à une ligne de la section stack: ne contenant pas pc ,eip ni ip. Par exemple :
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • Correction de gabi++ de façon à :
    • ne pas utiliser malloc() pour allouer des objets thread-local C++ ;
    • éviter les interblocages dans gabi++ dans les cas où libc.debug.malloc n'est pas nul dans les builds userdebug/eng de plate-forme Android.
Autres modifications
  • Ajout de LOCAL_EXPORT_LDFLAGS.
  • Introduction du paramètre NDK_PROJECT_PATH=null, à utiliser dans un système de compilation intégré où les options sont transmises de manière explicite à ndk-build. Avec ce paramètre, ndk-build n'essaie pas de rechercher NDK_PROJECT_PATH.. Ce paramètre empêche également les variables d'obtenir des paramètres par défaut à partir de NDK_PROJECT_PATH. Par conséquent, les variables suivantes doivent désormais être spécifiées de manière explicite (avec leurs valeurs par défaut, le cas échéant) : NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (facultatif, 0 par défaut) et autres variables APP_* figurant dans Application.mk.
  • APP_ABI peut désormais être énuméré dans une liste d'éléments séparés par une virgule. Par exemple :
    APP_ABI := "armeabi,armeabi-v7a"
  • Ajout de la possibilité de recompiler toute la STL avec des informations de débogage dans un package distinct facultatif, nommé android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, à l'aide de l'option -g. Cette option permet au script ndk-stack de fournir un meilleur vidage de pile pour toute la STL. Cette modification ne devrait pas affecter le code ni la taille du fichier simplifié final.
  • Amélioration des exemples hello-jni de façon à indiquer APP_ABI lors de la compilation.
  • Utilisation de l'outil ar en mode déterministe (option -D) pour créer des bibliothèques statiques (problème 60705).
Modifications importantes
  • Mise à jour de include/android/*h et de math.h pour tous les niveaux d'API Android jusqu'à 18, y compris l'ajout des niveaux 13, 15, 16 et 17. Pour en savoir plus sur les API ajoutées, consultez les messages de commit des modifications 68012 et 68014 (problèmes 47150, 58528 et 38423).
  • Ajout de la compatibilité avec le niveau d'API Android 19, y compris la liaison Renderscript.
  • Ajout de la compatibilité avec -mhard-float dans l'ABI armeabi-v7a existante. Pour en savoir plus et connaître les restrictions actuelles concernant Clang, consultez tests/device/hard-float/jni/Android.mk.
  • Migration de la version 4.8 vers la version 4.8.2 de GNU Compiler Collection (GCC) et ajout de la compatibilité avec les couleurs de diagnostic. Pour activer les couleurs de diagnostic, définissez -fdiagnostics-color=auto, -fdiagnostics-color=always, ou exportez GCC_COLORS comme indiqué ci-dessous :
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    Pour en savoir plus, consultez le document GCC Language Independent Options.
  • Ajout de deux exemples pour illustrer les fonctionnalités d'OpenGL ES 3.0 : Teapot et MoreTeapots. Ces exemples s'exécutent sur des appareils équipés d'Android 4.1 (niveau d'API 16) ou version ultérieure.
  • Abandon de la compatibilité avec GCC 4.7 et Clang 3.2, qui seront supprimés dans la prochaine version.
Correction de bugs importants
  • Correction du problème entraînant l'échec de la génération de tableaux de saut relatifs 16 bits par ARM GCC 4.6 thumb2 (problème GCC).
  • Correction de l'erreur interne du compilateur (ICE, internal compiler error) GCC 4.8 sur g++.dg/cpp0x/lambda/lambda-defarg3.C (modification 62770, problème GCC).
  • Correction du problème d'échec du lancement des exécutables *-gdb.exe Windows 32 bits (problème 58975).
  • Correction de l'erreur interne du compilateur GCC 4.8 lors de la création d'une bibliothèque de puces. Le message d'erreur est le suivant :
    internal compiler error: verify_flow_info failed
    (problème 58916, problème GCC)
  • Modification du build GDB/ARM de façon à ignorer les données ARM.exidx pour le déroulement dans le code de prologue. Ajout d'une commande (set arm exidx-unwinding) pour contrôler le déroulement de pile basé sur exidx (problème 55826).
  • Correction du problème du compilateur Clang 3.3 MIPS entraînant une réutilisation incorrecte des registres HI et LO.
  • Correction de l'erreur interne du compilateur MIPS 4.7 dans dbx_reg_number. Le message d'erreur est le suivant :
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (correctif GCC)
Autres corrections de bugs
  • Corrections d'en-têtes
    • Correction de WCHAR_MIN et WCHAR_MAX pour ARM de sorte qu'ils n'aient pas de signe, conformément aux spécifications (les versions X86/MIPS ont un signe). Définissez _WCHAR_IS_ALWAYS_SIGNED pour rétablir l'ancien comportement (problème 57749).
    • Correction de include/netinet/tcp.h pour qu'il contienne l'énumération d'états TCP_INFO (problème 38881).
    • Correction de la macro de cdefs_elh.h _C_LABEL_STRING de façon à ne plus générer d'avertissements dans la chaîne d'outils GCC 4.8 en mode c++11 (problème 58135 et problème 58652).
    • Suppression des fonctions inexistantes imaxabs et imaxdiv de l'en-tête inttypes.h.
    • Correction du problème lié aux valeurs renvoyées par pthread_exit() et à pthread_self() (problème 60686).
    • Ajout de la fonction mkdtemp() manquante, qui existe déjà dans l'en-tête bionic stdlib.h.
  • Correction du problème de création de samples/gles3jni avec Clang au niveau d'API Android 11.
  • Correction de MCLinker de façon à autoriser plusieurs occurrences des options suivantes : -gc-sections et --eh-frame-hdr.
  • Correction de MCLinker de façon à accepter l'option --no-warn-mismatch.
  • Modification de l'option cpu-features de façon à ne pas supposer que tous les appareils VFPv4 sont compatibles avec IDIV. Désormais, cette option permet d'ajouter IDIV uniquement aux appareils figurant sur la liste d'autorisation, y compris le Nexus 4 (problème 57637).
  • Correction du problème de journalisation incorrecte d'erreurs par android_native_app_glue.c lors d'opérations de préenvoi d'événements.
  • Correction de toutes les opérations sur gabi++ terminate et unexpected_handler pour qu'elles soient thread-safe.
  • Correction de plusieurs problèmes liés à l'option Clang -integrated-as afin qu'elle puisse réussir les tests pour ssax-instructions et fenv.
  • Correction du compilateur GCC 4.6/4.7/4.8 de façon à transmettre l'option --eh-frame-hdr de l'éditeur de liens, même pour les exécutables statiques. Pour en savoir plus, consultez le correctif GCC.
  • Correction d'une apostrophe superflue dans CPU-ARCH-ABIS.html. Pour en savoir plus, consultez NDK-DEPENDS.html (problème 60142).
  • Correction des guillemets superflus dans la sortie de la commande ndk-build sous Windows (problème 60649).
  • Correction de Clang 3.3 de façon à compiler les opérations atomiques intégrées d'ARM comme __atomic_fetch_add, __atomic_fetch_sub et __atomic_fetch_or.
  • Correction de l'erreur interne du compilateur Clang 3.3 en cas de vfprintf personnalisé (problème Clang).
Autres modifications
  • Activation d'OpenMP pour tous les builds GCC. Pour utiliser cette fonctionnalité, ajoutez les options suivantes à vos paramètres de compilation :
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    Pour obtenir des exemples de code, consultez tests/device/test-openmp
  • Réduction considérable de la taille de ld.mcld (1,5 Mo au lieu de 3,5 Mo pour ld.bfd et de 7,5 Mo pour ld.gold), pour un gain de vitesse d'environ 20 %.
  • Ajout de LOCAL_CONLYFLAGS et APP_CONLYFLAGS pour spécifier des options applicables uniquement à C, mais pas à C++. Les LOCAL_CFLAGS et APP_CFLAGS existants sont également utilisés pour la compilation C++ (afin d'éviter d'avoir à spécifier deux fois la plupart des options), si bien que des options comme -std=gnu99 peuvent échouer avec un avertissement dans les builds g++ et avec une erreur dans les builds clang++.
  • Ajout de fonctions d'assistance de tableau gabi++.
  • Modification des builds GCC de sorte que tous les fichiers libgcc.a soient compilés avec -funwind-tables pour permettre à la pile d'être déroulée au-delà de points précédemment bloqués, tels que __aeabi_idiv0.
  • Ajout de la compatibilité avec Ingenic MXU dans MIPS GCC 4.6/4.7/4.8 avec la nouvelle option -mmxu.
  • Extension de -mldc1-sdc1 dans MIPS GCC 4.6/4.7/4.8 pour contrôler également ldxc1/sdxc1.
  • Ajout de crazy linker. Pour en savoir plus, consultez sources/android/crazy_linker/README.TXT.
  • Correction de bitmap-plasma pour qu'il dessine en plein écran plutôt que dans une zone de 200 x 200 pixels.
  • Réduction de 25 % de la taille des chaînes d'outils Linux et Darwin via la création de liens symboliques vers des fichiers identiques.
Modifications importantes
  • Ajout de la compatibilité avec Android 4.3 (niveau d'API 18). Pour en savoir plus, consultez STABLE-APIS.html et les nouveaux exemples de code dans samples/gles3jni/README.
  • Ajout d'en-têtes et de bibliothèques pour OpenGL ES 3.0, qui est compatible avec Android 4.3 (niveau d'API 18) ou version ultérieure.
  • Ajout de GNU Compiler Collection (GCC) 4.8 au NDK. Étant donné que GCC 4.6 est toujours la version par défaut, vous devez activer cette option de manière explicite :
    • Pour les builds ndk-build, exportez NDK_TOOLCHAIN_VERSION=4.8 ou ajoutez-le dans Application.mk.
    • Pour les builds autonomes, utilisez l'option --toolchain= dans make-standalone-toolchain.sh. Exemple :
      --toolchain=arm-linux-androideabi-4.8

    Remarque : L'option -Wunused-local-typedefs est activée par -Wall. Veillez à ajouter __attribute__((unused)) si vous utilisez des assertions au moment de la compilation, comme sources/cxx-stl/stlport/stlport/stl/config/features.h, ligne 311. Pour en savoir plus, consultez la modification 55460.

    Remarque : Dans GCC 4.7 ou version ultérieure, les compilateurs ARM génèrent par défaut un code d'accès non aligné pour les cibles de compilation ARMv6 ou version ultérieure. Vous devrez peut-être ajouter l'option de compilation -mno-unaligned-access lors de la compilation pour des noyaux qui ne sont pas compatibles avec cette fonctionnalité.

  • Ajout de la compatibilité avec Clang 3.3. L'option de compilation NDK_TOOLCHAIN_VERSION=clang sélectionne désormais Clang 3.3 par défaut.

    Remarque : GCC 4.4.3 et Clang 3.1 sont tous deux obsolètes et seront supprimés de la prochaine version du NDK.

  • Mise à jour de GNU Project Debugger (GDB) pour prendre en charge Python 2.7.5.
  • Ajout de MCLinker pour prendre en charge les hôtes Windows. Étant donné que ld.gold est utilisé par défaut lorsqu'il est disponible, vous devez ajouter -fuse-ld=mcld dans LOCAL_LDFLAGS ou APP_LDFLAGS pour activer MCLinker.
  • Ajout de l'outil ndk-depends, qui affiche les dépendances de la bibliothèque ELF. Pour en savoir plus, consultez NDK-DEPENDS.html (problème 53486).
Correction de bugs importants
  • Correction d'un problème potentiel de gestion des événements dans android_native_app_glue (problème 41755).
  • Correction du build ARM/GCC-4.7 de façon à générer un alignement suffisant des instructions de chargement et de stockage NEON VST et VLD (problème GCC 57271).
  • Correction d'une erreur interne du compilateur (ICE, internal compiler error) GCC 4.4.3/4.6/4.7 concernant une valeur d'index négative constante sur un littéral de chaîne (problème 54623).
  • Correction de l'erreur de segmentation de GCC 4.7 pour l'initialisation constante avec une adresse d'objet (problème 56508).
  • Correction de l'erreur de segmentation de GCC 4.6 ARM pour les valeurs -O lors de l'utilisation de Boost 1.52.0 (problème 42891).
  • Correction de libc.so et de libc.a pour permettre l'utilisation de la fonction wait4() (problème 19854).
  • Mise à jour des fichiers x86 libc.so et libc.a pour inclure la fonction clone().
  • Correction d'un bug dans LOCAL_SHORT_COMMANDS en raison duquel le fichier linker.list était vide ou inutilisé.
  • Correction du build GCC MIPS sous Mac OS afin d'utiliser les directives CFI, sans lesquelles ld.mcld --eh-frame-hdr échoue fréquemment.
  • Correction de l'erreur interne du compilateur Clang 3.2 X86/MIPS dans llvm/lib/VMCore/Value.cpp (modification 59021).
  • Correction du plantage de l'assembleur Windows 64 bits GCC 4.7 (erreur : out of memory allocating 4294967280 bytes).
  • Mise à jour du script ndk-gdb de sorte que les actions --start ou --launch attendent désormais le serveur de débogage GNU afin qu'il puisse atteindre plus précisément les points d'arrêt définis au début du chemin d'exécution (tels que ceux figurant dans le code JNI) (problème 41278).

    Remarque : Cette fonctionnalité nécessite jdb et génère un avertissement concernant les points d'arrêt en attente. Spécifiez l'option --nowait pour rétablir le comportement précédent.

  • Correction du plantage de GDB lorsque la liste des bibliothèques est vide.
  • Correction du plantage de GDB lors de l'utilisation d'une commande stepi après une instruction Thumb bx pc ou blx pc (problème 56962 et problème 36149).
  • Correction de MIPS gdbserver pour qu'il recherche DT_MIPS_RLD_MAP au lieu de DT_DEBUG (problème 56586).
  • Correction d'une dépendance circulaire dans le script ndk-build, par exemple : si A->B et B->B, B était supprimé du build (problème 56690).
Autres corrections de bugs
  • Correction du script ndk-build pour vous permettre de spécifier une version de Clang comme option de ligne de commande (par exemple, NDK_TOOLCHAIN_VERSION=clang3.2). Auparavant, il n'était possible de spécifier la version qu'en tant que variable d'environnement.
  • Correction de la taille gabi++ de _Unwind_Exception afin qu'elle soit désormais de 24 pour les cibles de compilation MIPS lors de l'utilisation du compilateur Clang (modification 54141).
  • Correction du script ndk-build afin que les bibliothèques compilées soient effectivement supprimées des projets qui incluent des bibliothèques statiques prédéfinies lors de l'utilisation de la commande ndk-build clean (modification 54461 et modification 54480).
  • Modification de l'option NDK_ANALYZE=1 de façon à réduire son niveau de verbosité.
  • Correction de gnu-libstdc++/Android.mk de façon à inclure un chemin backward/ pour les builds utilisant la rétrocompatibilité (problème 53404).
  • Correction d'un problème faisant que stlport new renvoyait parfois des valeurs aléatoires.
  • Correction de ndk-gdb de façon à respecter l'ordre de CPU_ABIS et non de APP_ABIS (problème 54033).
  • Correction d'un problème qui faisait que le build NDK 64 bits sous MacOSX sélectionnait un chemin d'accès incorrect pour le compilateur (problème 53769).
  • Correction des scripts de compilation de façon à détecter Windows Vista 64 bits (problème 54485).
  • Correction de l'erreur x86 ntonl/swap32 : invalid 'asm': operand number out of range (problème 54465 et modification 57242).
  • Correction de ld.gold pour fusionner les littéraux de chaîne.
  • Correction de ld.gold pour gérer l'alignement des grands symboles.
  • Mise à jour de ld.gold pour activer l'option --sort-section=name.
  • Correction de GCC 4.4.3/4.6/4.7 pour supprimer l'option -export-dynamic pour les programmes associés de manière statique. GCC n'ajoute plus de section .interp pour ces programmes.
  • Correction d'une erreur de compilation de GCC 4.4.3 stlport concernant le typedef incohérent de _Unwind_Control_Block (problème 54426).
  • Correction des scripts awk pour gérer les fichiers AndroidManifest.xml créés sous Windows pouvant contenir des caractères de fin \r et provoquer des erreurs de compilation (problème 42548).
  • Correction de make-standalone-toolchain.sh de façon à vérifier le répertoire prebuilts/ afin de détecter si l'hôte est 32 bits ou 64 bits.
  • Correction de l'option -integrated-as de Clang 3.2.
  • Correction des données de gestionnaire pr1 et pr2 du modèle compact Clang 3.2 ARM EHABI.
  • Ajout de l'option Clang -mllvm -arm-enable-ehabi pour corriger l'erreur de Clang suivante :
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • Correction de l'échec de la compilation lorsque aucun élément uses-sdk ne figure dans le fichier manifeste de l'application (problème 57015).
Autres modifications
  • Corrections d'en-têtes
    • Modification des en-têtes pour que __set_errno soit une fonction intégrée, étant donné que __set_errno dans errno.h est obsolète et que libc.so ne l'exporte plus.
    • Modification de elf.h pour inclure stdint.h (problème 55443).
    • Correction de sys/un.h pour qu'il soit inclus indépendamment des autres en-têtes (problème 53646).
    • Correction de toute la famille d'API MotionEvent_getHistorical pour qu'elle accepte const AInputEvent* motion_event (problème 55873).
    • Correction de malloc_usable_size pour qu'il accepte const void* (problème 55725).
    • Correction de stdint.h pour une meilleure compatibilité avec C99 (modification 46821).
    • Modification de wchar.h de façon à ne pas redéfinir WCHAR_MAX ni WCHAR_MIN.
    • Correction de la déclaration de <inttypes.h> pour les macros PRI et SCN liées au pointeur (problème 57218).
    • Modification de l'en-tête sys/cdefs.h afin que __WCHAR_TYPE__ soit 32 bits pour les niveaux d'API inférieurs à 9, ce qui signifie que wchat_t est 32 bits pour tous les niveaux d'API. Pour rétablir le comportement précédent, définissez la variable booléenne _WCHAR_IS_8BIT (problème 57267).
  • Amélioration de la mise en forme de NDK docs/ et corrections de documentation diverses.
  • Ajout de la prise en charge d'une technique de création d'archives fines lors de la compilation de bibliothèques statiques (problème 40303).
  • Mise à jour du script make-standalone-toolchain.sh pour prendre en charge la bibliothèque stlport en plus de gnustl, lorsque vous spécifiez l'option --stl=stlport. Pour en savoir plus, consultez STANDALONE-TOOLCHAIN.html.
  • Mise à jour du script make-standalone-toolchain.sh afin que l'option --llvm-version= crée les scripts $TOOLCHAIN_PREFIX-clang et $TOOLCHAIN_PREFIX-clang++ en plus de clang et clang++, de façon à éviter d'utiliser les définitions clang et clang++ de l'hôte par erreur.
  • Ajout de deux options pour réactiver deux optimisations dans Clang en amont qui sont désactivées dans le NDK pour une meilleure compatibilité avec le code compilé par GCC :
    • Ajout d'une option -fcxx-missing-return-semantics pour réactiver la sémantique de retour manquante dans Clang 3.2 ou version ultérieure. Normalement, tous les chemins doivent se terminer par une instruction return pour une fonction renvoyant une valeur. Si ce n'est pas le cas, Clang insère une instruction non définie (ou une interruption en mode débogage) dans le chemin sans instruction return. Si vous êtes sûr que votre code est correct, utilisez cette option pour permettre à l'optimiseur de profiter du comportement non défini. En cas de doute, n'utilisez pas cette option. Il est possible que l'appelant reçoive toujours une valeur incorrecte aléatoire, mais l'optimiseur ne l'exploitera pas et votre code sera plus difficile à déboguer.
    • Ajout d'une option -fglobal-ctor-const-promotion pour réactiver la promotion des variables globales avec constructeur statique en tant que constantes. Avec cette option, le processus d'optimisation des variables globales de LLVM tente d'évaluer celles ayant des constructeurs statiques et de les promouvoir en tant que constantes globales. Bien que cette optimisation soit correcte, elle peut entraîner une incompatibilité avec le code compilé par GCC. Par exemple, le code peut exécuter const_cast pour caster la constante en valeur modifiable et la modifier. Dans GCC, la variable est en lecture/écriture et le code est exécuté par accident. Dans Clang, la variable "const" est dans la mémoire en lecture seule et peut entraîner le plantage de votre application.
  • Ajout de -mldc1-sdc1 aux compilateurs MIPS GCC et Clang. Par défaut, les compilateurs alignent correctement les objets de 8 octets et génèrent les instructions ldc1 et sdc1 pour les déplacer. Si votre application utilise un outil d'allocation personnalisé qui ne s'aligne pas toujours sur la limite de 8 octets d'un nouvel objet comme le fait l'outil d'allocation par défaut, il est possible qu'elle plante en raison d'opérations ldc1 et sdc1 sur la mémoire non alignée. Dans ce cas, utilisez l'option -mno-ldc1-sdc1 pour résoudre le problème.
  • Rétrogradation de la gravité d'un événement d'"avertissement" à "info" si APP_PLATFORM_LEVEL est supérieur à APP_MIN_PLATFORM_LEVEL. APP_PLATFORM_LEVEL peut être inférieur à APP_PLATFORM dans jni/Application.mk, car le NDK ne comporte pas d'en-têtes pour tous les niveaux. Dans ce cas, le niveau réel est décalé vers le bas. APP_MIN_PLATFORM_LEVEL est spécifié par android:minSdkVersion dans le fichier manifeste de votre application (problème 39752).
  • Ajout des méthodes android_getCpuIdArm() et android_setCpuArm() à cpu-features.c. Cet ajout facilite la récupération des informations sur l'ID du processeur ARM (problème 53689).
  • Modification de ndk-build afin d'utiliser l'outil as/ld de GCC 4.7 pour la compilation Clang.

    Remarque : Dans GCC 4.7, monotonic_clock et is_monotonic ont été respectivement renommés steady_clock et is_steady.

  • Ajout des avertissements suivants au script ndk-build :
    • Ajout d'avertissements si des LOCAL_LDLIBS/LDFLAGS sont utilisés dans des modules de bibliothèque statique
    • Ajout d'un avertissement si une configuration ne comporte aucun module à compiler
    • Ajout d'un avertissement pour les bibliothèques non système utilisées dans les LOCAL_LDLIBS/LDFLAGS d'une bibliothèque partagée ou de modules exécutables
  • Mise à jour des scripts de compilation pour que, si APP_MODULES n'est pas défini et si seules des bibliothèques statiques sont listées dans Android.mk, le script force leur compilation (problème 53502).
  • Mise à jour de ndk-build de façon à accepter les chemins d'accès absolus dans LOCAL_SRC_FILES.
  • Suppression des exécutables *-gdbtui, qui sont des doublons des exécutables *-gdb avec l'option -tui activée.
  • Mise à jour des scripts de compilation pour vous avertir lorsque l'interface du compilateur Edison Design Group (EDG) réactive _STLP_HAS_INCLUDE_NEXT (problème 53646).
  • Ajout de la variable d'environnement NDK_LIBS_OUT pour permettre le remplacement du chemin d'accès libraries/gdbserver en ignorant la valeur par défaut $PROJECT/libs. Pour en savoir plus, consultez OVERVIEW.html.
  • Modification du script ndk-build par défaut afin de compiler le code avec la protection de chaîne de format -Wformat -Werror=format-security. Vous pouvez définir LOCAL_DISABLE_FORMAT_STRING_CHECKS=true pour la désactiver. Pour en savoir plus, consultez ANDROID-MK.html.
  • Ajout de la compatibilité avec l'impression élégante de STL dans ndk-gdb-py. Pour en savoir plus, consultez NDK-GDB.html.
  • Ajout de tests basés sur les frameworks googletest.
  • Ajout d'une notification au script de compilation de la chaîne d'outils afin de vous avertir si l'interface système actuelle n'est pas bash.
Modifications importantes
  • Ajout de l'ensemble de chaînes d'outils hôte 64 bits (suffixe du nom de package *-x86_64.*). Pour en savoir plus, consultez CHANGES.HTML et NDK-BUILD.html.
  • Ajout du compilateur Clang 3.2. GCC 4.6 reste le compilateur par défaut. Pour en savoir plus sur l'utilisation du compilateur Clang, consultez CHANGES.HTML.
  • Ajout d'un analyseur de code statique pour les hôtes Linux/MacOSX. Pour en savoir plus sur l'utilisation de l'analyseur, consultez CHANGES.HTML.
  • Ajout de MCLinker pour les hôtes Linux/MacOSX en tant que fonctionnalité expérimentale. ld.gold est l'éditeur de liens par défaut lorsqu'il est disponible. Vous devez donc activer explicitement MCLinker. Pour en savoir plus, consultez CHANGES.HTML.
  • Mise à jour de ndk-build afin d'utiliser le tri topologique pour les dépendances de module, ce qui signifie que la compilation trie automatiquement l'ordre des bibliothèques spécifiées dans LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES et LOCAL_SHARED_LIBRARIES. Pour en savoir plus, consultez CHANGES.HTML (problème 39378).
Correction de bugs importants
  • Correction du script de compilation de façon à compiler toutes les chaînes d'outils dans -O2. Les chaînes d'outils des versions précédentes étaient incorrectement compilées sans optimisation.
  • Correction d'un script de compilation qui compile Clang/llvm de manière inconditionnelle pour MacOSX en 64 bits.
  • Correction de l'erreur interne du compilateur GCC 4.6/4.7 : gen_thumb_movhi_clobber at config/arm/arm.md:5832 (problème 52732).
  • Correction du problème de compilation qui empêchait GCC/ARM 4.6/4.7 d'associer le code à l'aide de fonctions atomiques 64 bits intégrées (problème 41297).
  • Correction des erreurs d'utilisation incohérente de DIV dans l'éditeur de liens de GCC 4.7 (problème lié au logiciel source).
  • Correction de l'erreur interne du compilateur GCC 4.7 : build_data_member_initialization, at cp/semantics.c:5790.
  • Correction de l'erreur interne du compilateur GCC 4.7 : redirect_eh_edge_1, at tree-eh.c:2214 (problème 52909).
  • Correction d'une erreur de segmentation dans GCC 4.7 (problème GCC).
  • Correction de la résolution de l'horloge <chrono> et activation de steady_clock (problème 39680).
  • Correction de la chaîne d'outils afin d'activer _GLIBCXX_HAS_GTHREADS pour GCC 4.7 libstdc++ (problème 41770 et problème 41859).
  • Résolution du problème entraînant l'échec de l'association du code X86 MXX/SSE en raison de l'absence de posix_memalign (modification 51872).
  • Correction de l'erreur de segmentation de GCC4.7/X86 dans i386.c, fonction distance_non_agu_define_in_bb() (modification 50383).
  • Correction de GCC4.7/X86 pour rétablir le comportement antérieur de cmov (problème GCC).
  • Correction du traitement de la valeur NULL renvoyée par setlocale() dans libstdc++/GCC4.7 (problème 46718).
  • Correction d'une référence d'exécution non définie de ld.gold à __exidx_start et à __exidx_start_end (modification 52134).
  • Correction de l'erreur interne du compilateur Clang 3.1 lors de l'utilisation de la bibliothèque Eigen (problème 41246).
  • Correction de l'erreur interne du compilateur Clang 3.1 lors de l'inclusion de <chrono> en mode C++11 (problème 39600).
  • Correction de l'erreur interne du compilateur Clang 3.1 lors de la génération du code d'objet pour un appel de méthode vers une rvalue uniforme initialisée (problème 41387).
  • Correction du réalignement de la pile Clang 3.1/X86 (modification 52154).
  • Correction du problème lié à GNU Debugger (GDB) SIGILL lors du débogage sous Android 4.1.2 (problème 40941).
  • Correction du problème empêchant GDB de définir des points d'arrêt source:line lorsque les symboles contiennent des chemins d'accès longs et indirects aux fichiers (problème 42448).
  • Correction de read_program_header dans GDB pour les exécutables MIPS PIE (modification 49592).
  • Correction de l'erreur de segmentation de STLport dans uncaught_exception() (modification 50236).
  • Correction de l'erreur de bus de STLport dans la gestion des exceptions en raison d'un accès non aligné de DW_EH_PE_udata2, DW_EH_PE_udata4 et DW_EH_PE_udata8.
  • Correction du problème de récursion infinie de Gabi++ avec l'opérateur nothrow new[] (problème 52833).
  • Correction du décalage incorrect de Gabi++ avec le pointeur du gestionnaire d'exceptions (modification 53446).
  • Suppression de l'objet redondant de libération en cas d'exception de Gabi++ (modification 53447).
Autres corrections de bugs
  • Correction des en-têtes du NDK :
    • Suppression des définitions redondantes de size_t, ssize_t et ptrdiff_t.
    • Correction de l'en-tête fenv.h pour MIPS et ARM.
    • Correction de stddef.h pour ne pas redéfinir offsetof, car il existe déjà dans la chaîne d'outils.
    • Correction de elf.h afin qu'il contienne Elf32_auxv_t et Elf64_auxv_t (problème 38441).
    • Correction des définitions C++ #ifdef dans le fichier d'en-tête OpenSLES_AndroidConfiguration.h (problème 53163).
  • Correction de STLport afin qu'il annule l'opération en cas d'erreur de mémoire insuffisante au lieu se fermer de manière silencieuse.
  • Correction des en-têtes système et Gabi++ de façon à permettre la compilation avec un niveau d'API 8 ou inférieur.
  • Correction de cpufeatures de façon à ne pas analyser /proc/self/auxv (problème 43055).
  • Correction de ld.gold de façon à ne pas dépendre de la bibliothèque libstdc++ hôte et, sur les plates-formes Windows, à ne pas dépendre de la bibliothèque libgcc_sjlj_1.dll.
  • Correction de Clang 3.1 qui générait une liste de registres incohérente dans .vsave et provoquait l'échec de l'assembleur (modification 49930).
  • Correction de Clang 3.1 pour pouvoir compiler libgabi++ et réussir les tests test-stlport pour les cibles de compilation MIPS (modification 51961).
  • Correction de Clang 3.1 afin d'activer les exceptions par défaut pour C++ uniquement, et non pour C.
  • Correction de plusieurs problèmes dans Clang 3.1 afin de réussir la plupart des tests d'exception GNU.
  • Correction des scripts clang et clang++ dans le compilateur NDK autonome de façon à détecter -cc1 et à ne pas spécifier -target lorsqu'il est effectivement présent.
  • Correction de ndk-build pour observer NDK_APP_OUT défini dans Application.mk.
  • Correction de libc.so et lib.a X86, qui ne disposaient pas des fonctions sigsetjmp et siglongjmp déjà déclarées dans setjmp.h (problème 19851).
  • Correction de libstdc++ dans GCC 4.4.3/4.6/4.7 afin qu'elle fonctionne avec Clang dans C++ 11 (problème Clang).
  • Correction du chemin d'accès à cygwin dans l'argument transmis à HOST_AWK.
  • Correction de l'avertissement du script ndk-build sous Windows lors de l'exécution à partir du répertoire JNI du projet (problème 40192).
  • Correction du problème faisant que le script ndk-build ne se compilait pas si le fichier makefile se terminait par un espace blanc dans la définition de LOCAL_PATH (problème 42841).
Autres modifications
  • Ajout de la compatibilité avec les threads dans la chaîne d'outils GCC/MIPS.
  • Mise à jour des assistants de gestion des exceptions GCC __cxa_begin_cleanup et __cxa_type_match pour qu'ils aient une visibilité par défaut au lieu de la visibilité masquée précédente dans GNU libstdc++. Pour en savoir plus, consultez CHANGES.HTML.
  • Mise à jour des scripts de compilation pour que les bibliothèques statiques Gabi++ et STLport soient désormais créées avec une visibilité masquée, à l'exception des assistants de gestion des exceptions.
  • Mise à jour du build pour que STLport soit compilé pour ARM en mode Thumb.
  • Ajout de la compatibilité avec std::set_new_handler dans Gabi++ (problème 52805).
  • Activation de l'appel système FUTEX dans GNU libstdc++.
  • Mise à jour de ndk-build afin qu'il ne copie plus la bibliothèque statique prédéfinie dans le répertoire obj/local/<abi>/ d'un projet (problème 40302).
  • Suppression de __ARM_ARCH_5*__ dans le script ARM toolchains/*/setup.mk (problème 21132).
  • Création de bibliothèques GNU libstdc++ Thumb supplémentaires pour ARM.
  • Activation des instructions madd/msub/nmadd/nmsub/recip/rsqrt MIPS en virgule flottante avec un FPU 32 bits.
  • Activation de l'optimiseur de boucle Graphite dans GCC 4.6 et 4.7 pour permettre d'autres optimisations : -fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all et -ftree-loop-linear (informations).
  • Activation de polly pour Clang 3.1 sur les hôtes Linux et Max OS X 32 bits à des fins d'analyse et d'optimisation de l'accès à la mémoire (informations).
  • Activation de -flto dans GCC 4.7 et 4.6, Clang 3.2 et Clang 3.1 sous Linux (Clang LTO via LLVMgold.so). Les cibles de compilation MIPS ne sont pas compatibles, car ld.gold n'est pas disponible.
  • Activation de --plugin et de --plugin-opt pour ld.gold dans GCC 4.6/4.7.
  • Activation de --text-reorder pour ld.gold dans GCC 4.7.
  • Configuration de GNU libstdc++ avec _GLIBCXX_USE_C99_MATH, qui annule la définition du script isinf dans l'en-tête bionique. Pour en savoir plus, consultez CHANGES.html.
  • Ajout de APP_LDFLAGS aux scripts de compilation. Pour en savoir plus, consultez ANDROID-MK.html.
  • Mise à jour des scripts de compilation pour permettre à NDK_LOG=0 de désactiver NDK_LOG.
  • Mise à jour des scripts de compilation pour permettre à NDK_HOST_32BIT=0 de désactiver la chaîne d'outils de l'environnement de développement hôte 32 bits.
  • Modification des options GCC/X86 par défaut -march= et -mtune= : remplacement de pentiumpro et generic par i686 et atom.
  • Amélioration des scripts de compilation de la chaîne d'outils :
    • Correction d'une condition de concurrence dans build-gcc.sh pour le type de compilation mingw, qui empêchait un grand nombre de processus de compilation parallèles.
    • Mise à jour de build-gabi++.sh et de build-stlport.sh afin qu'ils puissent désormais s'exécuter à partir du package NDK (problème 52835).
    • Correction de run-tests.sh dans l'ensemble d'utilitaires MSys.
    • Amélioration de la chaîne d'outils hôte 64 bits et de la compatibilité avec la compilation croisée canadienne.
    • Mise à jour du script build-mingw64-toolchain.sh vers une version plus récente.
    • Ajout d'une option permettant de créer libgnustl_static.a et stlport_static.a sans visibilité masquée.
Modifications importantes
  • Ajout du compilateur GNU Compiler Collection (GCC) 4.7 au NDK. GCC 4.6 étant toujours le compilateur par défaut, vous devez activer la nouvelle version de manière explicite, comme suit :
    • Pour ndk-build, exportez la variable NDK_TOOLCHAIN_VERSION=4.7 ou ajoutez-la à Application.mk.
    • Pour les builds autonomes, ajoutez l'option --toolchain= à make-standalone-toolchain.sh, par exemple :
      --toolchain=arm-linux-androideabi-4.7

    Remarque : Cette fonctionnalité est expérimentale. Veuillez l'essayer et signaler tout problème.

  • Ajout de la prise en charge des exceptions stlport via gabi++. Notez que la nouvelle version de gabi++ dépend de dlopen et du code associé. Cela signifie que :
    • Vous ne pouvez plus créer d'exécutable statique à l'aide de l'option -static ni inclure libstlport_static.a à l'aide de APP_STL := stlport_static. (Vous pouvez toujours utiliser l'option -static avec une chaîne d'outils autonome.) La compilation d'un exécutable dynamique à l'aide deinclude $(BUILD_EXECUTABLE) fonctionne toujours, car le compilateur ajoute automatiquement l'option -ldl.
    • Si votre projet effectue une association à l'aide de -nostdlib et de {-Wl,--no-undefined}, vous devez inclure manuellement l'option -ldl.
    Pour en savoir plus, consultez CPLUSPLUS-SUPPORT.html.

    Remarque : Cette fonctionnalité est expérimentale et fonctionne mieux avec les compilateurs GCC 4.6/4.7 qu'avec GCC 4.4.3 ou Clang 3.1. Veuillez l'essayer et signaler tout problème.

  • Ajout d'une option -mstack-protector-guard= pour x86 afin de choisir entre un chemin d'accès global par défaut compatible avec l'ancienne bibliothèque Android C (Bionic) et un nouveau chemin tls (%gs:20) pour -fstack-protector, -fstack-protector-all et -fstack-protector-strong lors de l'utilisation du compilateur GCC 4.6 ou version ultérieure.

    Remarque : Le paramètre -mstack-protector-guard lui-même n'active aucune option -fstack-protector*.

  • Ajout de la fonction android_setCpu() à sources/android/cpufeatures/cpu-features.c afin qu'elle soit utilisée lorsque la détection automatique via /proc est impossible sous Android 4.1 ou version ultérieure (problème Chromium 164154).
Correction de bugs importants
  • Correction de la recompilation inutile des fichiers d'objets lors de l'utilisation du script ndk-build (problème 39810).
  • Correction d'un échec de l'éditeur de liens avec la version NDK 8c pour Mac OS X 10.6.x, qui générait l'erreur suivante :
    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib
    Ce problème était causé par la compilation sous Mac OS X 10.7, qui générait des binaires incompatibles avec Mac OS 10.6.x et le NDK.
  • Suppression des options -x c++ du script de compilation autonome Clang++ (problème 39089).
  • Résolution des problèmes liés à l'utilisation de l'option NDK_TOOLCHAIN_VERSION=clang3.1 dans Cygwin (problème 39585).
  • Correction du script make-standalone-toolchain.sh pour permettre la génération d'une chaîne d'outils autonome à l'aide des environnements Cygwin ou MinGW. La chaîne d'outils obtenue peut être utilisée dans les environnements Cygwin, MingGW ou CMD.exe (problème 39915 et problème 39585).
  • Ajout de l'option SL_IID_ANDROIDBUFFERQUEUESOURCE manquante dans les builds android-14 pour ARM et X86 (problème 40625).
  • Correction de la détection de processeur x86 pour la fonctionnalité ANDROID_CPU_X86_FEATURE_MOVBE (problème 39317).
  • Correction d'un problème qui empêchait la bibliothèque de modèles standards (STL, Standard Template Library) d'utiliser des sources C++ n'ayant pas l'extension de fichier .cpp.
  • Correction de l'erreur interne du compilateur GCC 4.6 ARM at reload1.c:1061 (problème 20862).
  • Correction de l'erreur interne du compilateur GCC 4.4.3 ARM at emit-rtl.c:1954 (problème 22336).
  • Correction de l'erreur interne du compilateur GCC 4.4.3 at postreload.c:396 (problème 22345).
  • Correction du problème d'omission des fonctions lambda dans GCC 4.6/4.7 (problème 35933).
Autres corrections de bugs
  • Corrections apportées aux fichiers d'en-tête du NDK :
    • Correction de __WINT_TYPE__ et de wint_t pour qu'ils correspondent au même type.
    • Correction d'une faute de frappe dans android/bitmap.h (problème 15134).
    • Correction d'une faute de frappe dans errno.h.
    • Ajout de la vérification de la présence de __STDC_VERSION__ dans sys/cdefs.h (problème 14627).
    • Réorganisation des en-têtes dans byteswap.h et dirent.h.
    • Correction de limits.h pour inclure page.h, qui fournit des paramètres PAGE_SIZE (problème 39983).
    • Correction du type renvoyé par glGetAttribLocation() et glGetUniformLocation() : remplacement de int par GLint.
    • Correction de la constante __BYTE_ORDER pour les builds x86 (problème 39824).
  • Correction du script ndk-build de façon à ne pas écraser -Os par -O2 pour les builds ARM.
  • Correction des scripts de compilation pour permettre l'écrasement des paramètres HOST_AWK, HOST_SED et HOST_MAKE.
  • Correction du problème affectant ld.gold dans les builds fsck_msdos associant des objets créés par le compilateur Intel C/C++ (ICC).
  • Correction de la compatibilité avec ARM EHABI dans Clang de façon à respecter les spécifications.
  • Correction de GNU Debugger (GDB) afin de réduire le temps passé à parcourir le mappage des liens de la cible pendant les événements solib (problème 38402).
  • Correction du problème de fichier libgcc.a manquant lors de l'association de bibliothèques partagées.
Autres modifications
  • Rétroportage des fonctions atomiques intégrées 64 bits pour ARM vers GCC 4.6.
  • Ajout d'une documentation sur la latence de sortie audio, ainsi que d'autres documents et corrections.
  • Correction des versions de débogage avec Clang, de sorte que les fonctions non nulles génèrent désormais un signal SIGILL pour les chemins sans instruction return.
  • Mise à jour de make-standalone-toolchain.sh de façon à accepter le suffixe -clang3.1, qui équivaut à ajouter --llvm-version=3.1 à la chaîne d'outils GCC 4.6.
  • Remplacement de l'URL du rapport de bug GCC et Clang par : https://source.android.com/source/report-bug s.html.
  • Ajout de la compatibilité avec ARM ELF à llvm-objdump.
  • Suppression de l'avertissement treating c input as c++ (traitement de l'entrée de code C comme du code C++) pour les builds Clang.
  • Mise à jour du build de sorte que seule la version 32 bits de libiberty.a soit compilée et placée dans lib32/.
Modifications importantes
  • Ajout du compilateur Clang 3.1 au NDK. GNU Compiler Collection (GCC) 4.6 reste le compilateur par défaut. Vous devez donc activer l'option de compilation Clang de manière explicite, comme suit :
    • Pour ndk-build, exportez NDK_TOOLCHAIN_VERSION=clang3.1 ou ajoutez ce paramètre de variable d'environnement à Application.mk.
    • Pour les builds autonomes, ajoutez --llvm-version=3.1 à make-standalone-toolchain.sh et remplacez CC et CXX par <tool-path>/bin/clang et <tool-path>/bin/clang++ dans votre fichier makefile. Pour en savoir plus, consultez STANDALONE-TOOLCHAIN.html.

    Remarque : Cette fonctionnalité est expérimentale. Veuillez l'essayer et signaler tout problème.

  • Ajout de l'éditeur de liens Gold ld.gold pour la chaîne d'outils Windows. Il est également activé par défaut pour ARM et X86 sur tous les hôtes. Vous pouvez l'ignorer afin d'utiliser l'éditeur de liens ld.bfd en ajoutant LOCAL_LDFLAGS += -fuse-ld=bfd à Android.mk ou en transmettant -fuse-ld=bfd à la ligne de commande g++/clang++ qui effectue l'association.
  • Ajout de vérifications des espaces dans le chemin du NDK dans les scripts ndk-build[.cmd] et ndk-gdb, afin d'éviter les erreurs de compilation difficiles à diagnostiquer.
  • Modification du traitement des niveaux d'API :
    • Modification de la logique de compilation pour que les projets spécifiant android-10 à android-13 dans APP_PLATFORM, project.properties ou default.properties soient associés à android-9 au lieu de android-14.
    • Mise à jour du build afin que les exécutables utilisant android-16 (Jelly Bean) ou version ultérieure soient compilés avec l'option -fPIE pour les exécutables indépendants de la position (PIE, position-independent executables). Une nouvelle option APP_PIE vous permet de contrôler ce comportement. Pour en savoir plus, consultez APPLICATION-MK.html.

      Remarque : Tous les niveaux d'API supérieurs à 14 sont toujours associés à platforms/android-14, et aucun nouveau platforms/android-N n'a été ajouté.

    • Modification de ndk-build pour générer des avertissements si le niveau d'API ajusté est supérieur à android:minSdkVersion dans le fichier AndroidManifest.xml du projet.
  • Mise à jour de la bibliothèque d'aide cpu-features pour inclure davantage de fonctionnalités spécifiques à ARM. Pour en savoir plus, consultez sources/android/cpufeatures/cpu-features.h.
  • Modification du type long double sur la plate-forme X86, qui est désormais de 8 octets. Ce type de données a désormais la même taille que le type double, mais il est toujours traité comme un type distinct.
  • Mise à jour du build pour APP_ABI=armeabi-v7a :
    • Modification de ce type de compilation afin de transmettre le paramètre -march=armv7-a à l'éditeur de liens. Cette modification garantit que les bibliothèques spécifiques de la version 7 et crt*.o sont correctement associés.
    • Ajout de -mfpu=vfpv3-d16 à ndk-build au lieu de l'option -mfpu=vfp utilisée dans les versions précédentes.
Correction de bugs importants
  • Correction d'un problème qui provoquait l'inaccessibilité de la chaîne d'outils autonome pour certains utilisateurs lors de l'exécution de make-standalone-toolchain.sh avec des droits racine (problème 35279).
    • Tous les fichiers et exécutables du package de version du NDK sont configurés pour disposer d'autorisations de lecture et d'exécution.
    • La propriété/le groupe de libstdc++.a sont désormais conservés lors de la copie.
  • Suppression du \r redondant dans le fichier Windows prédéfini echo.exe. Ce \r redondant provoquait l'échec de gdb.setup dans GNU Debugger (GDB), car il était intégré à tort dans le chemin d'accès (problème 36054).
  • Correction des builds parallèles Windows qui échouaient parfois en raison de problèmes de synchronisation dans la mise en œuvre de host-mkdir (problème 25875).
  • Correction de GCC 4.4.3 GNU libstdc++ de façon à ne pas fusionner les noms typeinfo par défaut. Pour en savoir plus, consultez toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo (problème 22165).
  • Correction du problème lié au contexte null dans GCC 4.6 cp/mangle.c::write_unscoped_name, qui pouvait planter lorsque le contexte était null et déréférencé dans TREE_CODE.
  • Correction des plantages de GCC 4.4.3 liés aux définitions de type propres à ARM NEON pour les floats (problème 34613).
  • Correction de l'implémentation _IteWrapper::operator*() interne de STLport, qui renvoyait un emplacement de pile non actualisé contenant la valeur déréférencée et provoquait des plantages de l'environnement d'exécution (problème 38630).
  • Corrections propres à ARM :
    • Correction d'ARM GCC 4.4.3/4.6 g++ pour qu'il ne génère plus l'avertissement mangling of <va_list> was changed in GCC 4.4 (la décoration de nom de <va_list> a été modifiée dans GCC 4.4). La solution de contournement consistant à utiliser le commutateur -Wno-psabi pour éviter cet avertissement n'est plus nécessaire.
    • Correction d'un problème se produisant lorsqu'un projet comportant les suffixes .arm ou .neon dans LOCAL_SRC_FILES utilisait également APP_STL. Avec APP_STL, le script ndk-build recherche les fichiers C++ dans LOCAL_SRC_FILES avant d'ajouter les chemins STL header/lib à la compilation. ndk-build a été modifié de façon à exclure les suffixes .arm et .neon avant la recherche. Sinon, les éléments de LOCAL_SRC_FILES tels que myfile.cpp.arm.neon ne seraient pas compilés en code C++.
    • Correction de binutils-2.21/ld.bfd pour permettre l'association d'objets provenant d'anciens binutils sans tag_FP_arch, qui produisait des messages d'erreur d'échec de l'assertion dans GNU Binutils (problème 35209).
    • Suppression de l'avertissement Unknown EABI object attribute 44 (Attribut d'objet EABI 44 inconnu) lorsque binutils-2.19/ld associe un objet prédéfini avec le plus récent binutils-2.21.
    • Correction d'un problème lié à la compilation GNU stdc++ avec à la fois -mthumb et -march=armv7-a via la modification de make-standalone-toolchain.sh de façon à insérer headers/libs dans le sous-répertoire armv7-a/thumb (problème 35616).
    • Correction de l'erreur unresolvable R_ARM_THM_CALL relocation (réadressage de R_ARM_THM_CALL impossible à résoudre) (problème 35342).
    • Correction de l'erreur interne du compilateur "at reload1.c:3633", due au fait que le backend ARM attendait un type d'opérande incorrect en cas d'extension de signe depuis char (problème GCC 50099).
    • Correction de l'erreur interne du compilateur en cas de valeur de décalage négative (problème GCC).
  • Correction de -fstack-protector pour X86, qui est également l'option par défaut pour la cible ABI ndk-build x86.
  • Corrections propres à MIPS :
    • Correction du boutisme de STLport via la définition de _STLP_LITTLE_ENDIAN sur 1 lors de la compilation de MIPS libstlport_*.
    • Correction du problème lié à GCC __builtin_unreachable lors de la compilation de LLVM (problème GCC 54369).
    • Rétroportage de la correction du processus de compilation cc1 utilisant 100 % du processeur (problème GCC 50380).
  • Corrections propres à GNU Debugger :
    • Désactivation de la compatibilité avec Python dans gdb-7.x lors de la compilation. Si elle n'était pas désactivée, la fonction de configuration gdb-7.x pourrait récupérer n'importe quelle version Python disponible sur l'hôte et compiler gdb avec une dépendance étroite à une version spécifique de Python (problème 36120).
    • Correction de ndk-gdb lorsque APP_ABI contient all et ne correspond à aucune architecture connue (Problème 35392).
    • Correction de la compatibilité avec les noms de chemin d'accès Windows, en conservant le caractère : s'il semble faire partie d'un chemin d'accès Windows commençant par une lettre de lecteur (problème GDB 12843).
    • Correction de l'ajout de la compatibilité avec les points d'arrêt matériels pour ARM dans gdbserver (problème GDB).
    • Ajout d'un correctif permettant de ne lire que les solibs actuelles si l'éditeur de liens est cohérent. Cette modification accélère la gestion des événements solib (problème 37677).
    • Ajout d'un correctif afin d'effectuer plusieurs tentatives de détection de points d'arrêt solib. GDB relance désormais enable_break() à chaque appel de svr4_current_sos(), jusqu'à ce que l'opération réussisse (modification 43563).
    • Correction d'un problème qui empêchait gdb de s'arrêter aux points d'arrêt placés dans les bibliothèques dlopen-ed (problème 34856).
    • Correction de SIGILL dans l'éditeur de liens dynamique lors de l'appel de dlopen() sur un système où les symboles ont été supprimés de /system/bin/linker et où rtld_db_dlactivity() est implémenté en mode Thumb, en raison de la non-préservation du LSB de sym_addr (problème 37147).
Autres corrections de bugs
  • Correction des en-têtes du NDK :
    • Correction du code arch-mips/include/asm/* qui avait été supprimé par erreur du noyau d'origine (modification 43335).
    • Remplacement des données du membre struct __unused par __linux_unused dans linux/sysctl.h et linux/icmp.h pour éviter les conflits avec #define __unused dans sys/cdefs.h.
    • Correction de fenv.h pour les fonctions C imbriquées avec __BEGIN_DECLS et __END_DECLS.
    • Suppression des fonctions non mises en œuvre dans malloc.h.
    • Correction de la définition stdint.h de uint64_t pour les compilateurs ANSI (problème 1952).
    • Correction des macros de préprocesseur dans <arch>/include/machine/*.
    • Remplacement de link.h pour MIPS par une nouvelle version compatible avec toutes les plates-formes.
    • Suppression de linux-unistd.h.
    • Déplacement des macros propres à GLibc LONG_LONG_MIN, LONG_LONG_MAX et ULONG_LONG_MAX de <pthread.h> vers <limits.h>.
  • Correction d'un dépassement de tampon dans ndk-stack-parser.
  • Correction de _STLP_USE_EXCEPTIONS, s'il n'est pas défini, de façon à omettre toutes les déclarations et utilisations de __Named_exception. La compilation et l'utilisation des paramètres __Named_exception n'ont lieu que lorsque STLport est autorisé à utiliser des exceptions.
  • Correction du problème lié à la création de packages NDK uniquement Linux sans la création de code Windows. Pour effectuer ce type de compilation, utilisez les paramètres suivants :
    ./build/tools/make-release.sh --force --systems=linux-x86
  • Correction de libc.so pour qu'il n'exporte pas atexit() ni __do_handler. Ces symboles sont exportés pour les builds ARM par la version système de la bibliothèque C afin d'assurer la compatibilité avec les anciennes bibliothèques natives. Le code généré à l'aide du NDK ne doit jamais y faire référence directement. Chaque bibliothèque partagée ou exécutable doit intégrer sa propre version de ces symboles, fournie par crtbegin_*.o.

    Si votre projet est associé à l'aide des options -nostdlib -Wl,--no-undefined, vous devez fournir votre propre __dso_handle, car crtbegin_so.o n'est pas associé dans ce cas. Le contenu de __dso_handle n'a pas d'importance, comme illustré dans l'exemple de code suivant :

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • Correction du décodeur de symboles pour ARM utilisé dans objdump pour les entrées plt afin de générer un code function@plt plus lisible.
  • Suppression des symboles suivants (introduits dans GCC 4.6 libgcc.a) de la bibliothèque libc.so de la plate-forme X86 : __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1 et __aeabi_unwind_cpp_pr2.
  • Suppression des .ctors, .dtors et .eh_frame non utilisés dans MIPS crt*_so.S.
  • Mise à jour de ndk-gdb afin qu'il n'utilise que la dernière ligne de sortie de ndk-build DUMP_XXXX. Cette modification garantit que si Application.mk ou Android.mk génère une sortie avec la syntaxe $(info ...), elle n'est pas injectée dans le résultat de DUMP_XXXX (en savoir plus).
Autres modifications
  • Suppression des en-têtes arch-x86 et arch-mips de platforms/android-[3,4,5,8]. Ces en-têtes étaient incomplets, car les ABI X86 et MIPS ne sont compatibles qu'à partir du niveau d'API 9.
  • Simplification du chemin include c++ dans les packages autonomes, comme illustré ci-dessous (problème 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
  • Correction de ndk-build pour reconnaître davantage d'extensions de fichiers C++ par défaut : .cc .cp .cxx .cpp .CPP .c++ .C. Vous pouvez toujours utiliser LOCAL_CPP_EXTENSION pour écraser ces paramètres d'extension.
  • Correction d'un problème dans samples/san-angeles qui générait un écran noir ou un cadre figé quand il était relancé.
  • Remplacement des API obsolètes dans les exemples de NDK (problème 20017) :
    • hello-gl2 : android-5 remplacée par android-7
    • native-activity : android-9 remplacée par android-10
    • native-audio : android-9 remplacée par android-10
    • native-plasma : android-9 remplacée par android-10
  • Ajout de nouveaux éléments de branding pour les exécutables Android, avec un schéma plus simple dans la section .note.android.ident (définie dans crtbegin_static/dynamic.o) afin que les outils de débogage puissent agir en conséquence. Le membre et les valeurs de structure sont définis comme suit :
    static const struct {
      int32_t namesz
    ;  /* = 8,  sizeof ("Android") */
      int32_t descsz
    ;  /* = 1 * sizeof(int32_t) */
      int32_t type
    ;    /* = 1, ABI_NOTETYPE */
     
    char name[sizeof "Android"];  /* = "Android" */
      int32_t android_api
    ; /* = 3, 4, 5, 8, 9, 14 */
    }

    Les options de branding précédentes dans la section .note.ABI-tag sont désormais obsolètes.

  • Ajout d'un script run-tests-all.sh qui appelle run-tests.sh et standalone/run.sh avec différentes conditions. Le script run-tests.sh s'exécute sans l'option --abi. Il a été amélioré de façon à compiler la plupart des tests pour toutes les ABI compatibles et à s'exécuter sur tous les appareils associés.

Les principales fonctionnalités de cette version sont une nouvelle chaîne d'outils GNU Compiler Collection (GCC) 4.6, ainsi que GNU Debugger (GDB) 7.3.x, qui ajoute la prise en charge du débogage de l'image système Android 4.1 (niveau d'API 16).

Correction de bugs importants
  • Correction des problèmes liés à LOCAL_SHORT_COMMANDS dans les environnements Mac OS et Windows Cygwin pour les bibliothèques statiques. Les fichiers de liste sont générés plus rapidement et ne sont pas regénérés, ce qui permet d'éviter les recompilations de projets répétitives.
  • Correction de plusieurs problèmes dans ndk-gdb :
    • Mise à jour de l'outil pour transmettre les options -e, -d et -s à adb de manière plus cohérente.
    • Mise à jour de l'outil afin qu'il accepte les noms de série d'appareils contenant des espaces.
    • Mise à jour de l'outil permettant de récupérer les informations /system/bin/link, afin que gdb sur l'hôte puisse définir un point d'arrêt dans __dl_rtld_db_dlactivity et tenir compte de l'activité de l'éditeur de liens (par exemple, analyser de nouveau les symboles solib lorsque dlopen() est appelé).
  • Correction de ndk-build clean sous Windows, qui ne parvenait pas à supprimer ./libs/*/lib*.so.
  • Correction de ndk-build.cmd pour renvoyer une valeur ERRORLEVEL non nulle en cas d'échec de make.
  • Correction de libc.so pour arrêter l'exportation incorrecte des symboles __exidx_start et __exidx_end.
  • Correction de SEGV lors du déroulement de la pile au-delà de __libc_init pour ARM et MIPS.
Modifications importantes
  • Ajout de la chaîne d'outils GCC 4.6 (binutils 2.21 avec gold et GDB 7.3.x) pour qu'elle coexiste avec la chaîne d'outils GCC 4.4.3 d'origine (binutils 2.19 et GDB 6.6).
    • GCC 4.6 est désormais la chaîne d'outils par défaut. Pour sélectionner la chaîne d'outils d'origine, vous pouvez définir NDK_TOOLCHAIN_VERSION=4.4.3 dans Application.mk.
    • La compatibilité avec l'éditeur de liens gold n'est disponible que pour les architectures ARM et x86 sur les hôtes Linux et Mac OS. Cette compatibilité est désactivée par défaut. Pour l'activer, ajoutez LOCAL_LDLIBS += -fuse-ld=gold dans Android.mk.
    • Les programmes compilés avec -fPIE nécessitent le nouveau GDB pour le débogage, y compris les binaires dans les images système Android 4.1 (niveau d'API 16).
    • L'outil binutils 2.21 ld contient les correctifs rétroportés à partir de la version 2.22 :
      • Correction de ld --gc-sections, qui conservait à tort des références zombies aux bibliothèques externes (en savoir plus).
      • Correction de la commande ARM strip pour conserver les membres p_align et p_flags d'origine dans la section GNU_RELRO, s'ils sont valides. Sans ce correctif, les programmes créés avec -fPIE ne peuvent pas être débogués (en savoir plus).
    • Désactivation de l'optimisation de sincos() pour assurer la compatibilité avec les anciennes plates-formes.
  • Mise à jour des options de compilation pour activer le bit Never eXecute (NX) et les protections relro/bind_now par défaut :
    • Ajout de --noexecstack à l'assembleur et de -z noexecstack à l'éditeur de liens qui fournit une protection NX contre les attaques par dépassement de tampon en activant le bit NX sur la pile et sur le tas de mémoire.
    • Ajout de -z relro et de -z now à l'éditeur de liens pour renforcer les sections de données internes après l'association et ainsi éviter les failles de sécurité dues à une corruption de la mémoire (en savoir plus : 1, 2).
    • Vous pouvez désactiver ces fonctionnalités à l'aide des options suivantes :
      1. Désactivez la protection NX en définissant l'option --execstack pour l'assembleur et -z execstack pour l'éditeur de liens.
      2. Désactivez le renforcement des données internes en définissant les options -z norelro et -z lazy pour l'éditeur de liens.
      3. Désactivez ces protections dans le fichier NDK jni/Android.mk en définissant les options suivantes :
        LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
        DISABLE_RELRO=true             # disable "-z relro" and "-z now"
        

      Pour en savoir plus, consultez docs/ANDROID-MK.html.

  • Ajout d'éléments de branding pour les exécutables Android avec la section .note.ABI-tag (dans crtbegin_static/dynamic.o) afin que les outils de débogage puissent agir en conséquence. Le membre et les valeurs de structure sont définis comme suit :
    static const struct {
      int32_t namesz
    ;  /* = 4,  sizeof ("GNU") */
      int32_t descsz
    ;  /* = 6 * sizeof(int32_t) */
      int32_t type
    ;    /* = 1 */
     
    char  name[sizeof "GNU"];  /* = "GNU" */
      int32_t os
    ;      /* = 0 */
      int32_t major
    ;   /* = 2 */
      int32_t minor
    ;   /* = 6 */
      int32_t teeny
    ;   /* = 15 */
      int32_t os_variant
    ;  /* = 1 */
      int32_t android_api
    ; /* = 3, 4, 5, 8, 9, 14 */
    }
Autres corrections de bugs
  • Correction du problème de troncation du réadressage de mips-linux-gnu pour l'ajuster à R_MIPS_TLS_LDM (en savoir plus).
  • Correction des erreurs de segmentation de l'outil ld lors de l'utilisation de --gc-sections (en savoir plus).
  • Correction du problème de comptage de GOT_PAGE pour MIPS (en savoir plus).
  • Correction du lien de suivi du symbole d'avertissement pour mips_elf_count_got_symbols.
  • Correction du lien de suivi du symbole d'avertissement pour mips_elf_allocate_lazy_stub.
  • Déplacement de MIPS .dynamic vers le segment de données afin qu'il soit accessible en écriture.
  • Remplacement des valeurs codées en dur pour les symboles par des tailles de segment correctes pour MIPS.
  • Suppression de l'option -mno-shared des options par défaut de la chaîne d'outils MIPS. L'option par défaut pour la chaîne d'outils Android est -fPIC (ou -fpic si compatible). Si vous ne spécifiez pas -mshared, -fpic, -fPIC, -fpie ou -fPIE de manière explicite, le compilateur MIPS ajoute -mno-shared, qui désactive le code indépendant de la position (PIC, position-independent code). Le compilateur a été corrigé de façon à ne pas ajouter -mno-shared dans ce cas.
  • Correction des noms de package incorrects dans les exemples hello-jni et two-libs afin que le projet tests sous-jacent puisse être compilé.
Autres modifications
  • Modification de l'emplacement des binaires :
    • Déplacement de gdbserver de toolchain/<arch-os-ver>/prebuilt/gdbserver vers prebuilt/android-<arch>/gdbserver/gdbserver.
    • Changement de nom du préfixe de la chaîne d'outils x86 : i686-android-linux- devient i686-linux-android-.
    • Déplacement de sources/cxx-stl/gnu-libstdc++/include et de lib vers sources/cxx-stl/gnu-libstdc++/4.6 en cas de compilation avec GCC 4.6, ou vers sources/cxx-stl/gnu-libstdc++/4.4.3 en cas de compilation avec GCC 4.4.3.
    • Déplacement de libbfd.a et de libintl.a de lib/ vers lib32/.
  • Ajout et amélioration de divers scripts dans la chaîne d'outils de recompilation et de test NDK :
    • Ajout de build-mingw64-toolchain.sh pour générer une nouvelle chaîne d'outils hébergée par Linux qui génère les exécutables Win32 et Win64.
    • Amélioration de la vitesse de download-toolchain-sources.sh grâce à l'utilisation de la commande clone, la commande checkout n'étant utilisée que pour les répertoires nécessaires à la création des binaires de la chaîne d'outils NDK.
    • Ajout des scripts build-host-gcc.sh et build-host-gdb.sh.
    • Ajout de tests/check-release.sh pour vérifier le contenu d'un répertoire d'installation NDK donné ou d'un package NDK existant.
    • Réécriture des tests autonomes tests/standalone/run.sh.
  • Suppression de l'en-tête if_dl.h de toutes les plates-formes et architectures. Les éléments AF_LINK et sockaddr_dl qu'il décrit sont propres à BSD (autrement dit, ils n'existent pas sous Linux).

Cette version du NDK est compatible avec l'ABI MIPS et comprend quelques autres correctifs.

Nouvelles fonctionnalités
  • Ajout de la compatibilité avec l'ABI MIPS, qui vous permet de générer du code machine qui s'exécute sur les appareils Android MIPS compatibles. Les principales fonctionnalités destinées à MIPS comprennent des chaînes d'outils, des en-têtes système, des bibliothèques et un débogage spécifiques. Pour en savoir plus sur la compatibilité avec MIPS, consultez le fichier docs/CPU-MIPS.html dans le package NDK.

    Par défaut, le code est généré pour les appareils ARM. Pour créer des builds compatibles avec les plates-formes MIPS, vous pouvez ajouter mips à la définition de APP_ABI dans votre fichier Application.mk. Par exemple, la ligne suivante indique à ndk-build de compiler votre code pour trois ABI distinctes :

    APP_ABI := armeabi armeabi-v7a mips

    À moins d'utiliser des sources d'assemblage propres à l'architecture, telles que du code assembleur ARM, vous n'avez normalement pas besoin de modifier vos fichiers Android.mk pour compiler du code machine MIPS.

  • Vous pouvez créer une chaîne d'outils MIPS autonome à l'aide de l'option --arch=mips lorsque vous appelez make-standalone-toolchain.sh. Pour en savoir plus, consultez docs/STANDALONE-TOOLCHAIN.html.

Remarque : Pour que vos applications ne soient accessibles aux utilisateurs que si leurs appareils sont capables de les exécuter, Google Play les filtre en fonction des informations de leur ensemble d'instructions. Aucune action n'est requise de votre part pour activer le filtrage. De plus, le système Android vérifie lui aussi votre application au moment de l'installation, qui ne se poursuit que si l'application fournit une bibliothèque compilée pour l'architecture du processeur de l'appareil.

Correction de bugs importants
  • Correction d'une faute de frappe dans l'implémentation GAbi++ faisant que le résultat de dynamic_cast<D>(b) castant l'objet de classe de base b vers la classe dérivée D était ajusté de manière incorrecte dans la direction opposée à celle de la classe de base (problème 28721).
  • Correction d'un problème qui empêchait make-standalone-toolchain.sh de copier libsupc++.*.
Autres corrections de bugs
  • Correction de ndk-build.cmd pour garantir le bon fonctionnement de ndk-build.cmd même si l'utilisateur a redéfini la variable d'environnement SHELL, qui peut être modifiée lors de l'installation de divers outils de développement dans les environnements Windows.

Cette version du NDK comprend un correctif important pour les appareils Tegra2, ainsi que quelques autres correctifs et améliorations.

Correction de bugs importants
  • Correction des binaires GNU STL armeabi-v7a pour qu'ils ne plantent pas sur les appareils non-NEON. Les fichiers fournis avec NDK r7b n'étaient pas correctement configurés, ce qui entraînait des plantages sur les appareils Tegra2 et d'autres lors de l'utilisation de certaines fonctions à virgule flottante (par exemple, cosf, sinf, expf).
Modifications importantes
  • Ajout de la compatibilité avec les répertoires de sortie personnalisés via la variable d'environnement NDK_OUT. Lorsqu'elle est définie, cette variable sert à stocker tous les fichiers intermédiaires générés, au lieu de $PROJECT_PATH/obj. Elle est également reconnue par ndk-gdb.
  • Ajout de la possibilité de créer des modules avec des centaines, voire des milliers de fichiers sources en définissant LOCAL_SHORT_COMMANDS sur true dans votre fichier Android.mk.

    Cette modification oblige le système de compilation NDK à placer la plupart des options de l'éditeur de liens ou du programme d'archivage dans des fichiers de liste afin de contourner les limites de longueur de la ligne de commande. Pour en savoir plus, consultez docs/ANDROID-MK.html.

Autres corrections de bugs
  • Correction de la mise en œuvre de android_getCpuCount() dans la bibliothèque d'aide cpufeatures. Sur certains appareils, où les cœurs sont activés de manière dynamique par le système, la mise en œuvre précédente indiquait le nombre total de cœurs actifs lors du premier appel de la fonction, plutôt que le nombre total de cœurs physiquement disponibles.

Cette version du NDK comprend des correctifs pour les builds Windows natifs, Cygwin et de nombreuses autres améliorations.

Correction de bugs importants
  • Mise à jour de sys/atomics.h pour éviter les problèmes d'exactitude sur certains appareils ARM multicœurs. Recréez vos sources non modifiées avec cette version du NDK. Ce problème devrait avoir complètement disparu. Pour en savoir plus, consultez docs/ANDROID-ATOMICS.html.
  • Rétablissement de binutils 2.19 pour corriger les problèmes de débogage qui se produisaient dans NDK r7 (qui était passé à binutils 2.20.1).
  • Correction de ndk-build sous Linux 32 bits. Suite à une erreur de packaging, une version 64 bits de l'exécutable awk avait été placée sous prebuilt/linux-x86/bin dans NDK r7.
  • Correction du build Windows natif (ndk-build.cmd). Les autres modes de compilation ne sont pas concernés. Les corrections apportées sont les suivantes :
    • Suppression d'un bug de boucle infinie/débordement de pile qui se produisait lors d'une tentative d'appel de ndk-build.cmd à partir d'un répertoire qui ne figurait pas à la racine du chemin d'accès au projet (mais, par exemple, dans l'un de ses sous-répertoires).
    • Correction du problème faisant que les fichiers de dépendances générés automatiquement étaient ignorés. Cela signifie que la mise à jour d'un en-tête ne déclenchait pas la recompilation des sources qui l'incluaient.
    • Correction d'un problème faisant que les caractères spéciaux autres que les espaces et les guillemets dans les fichiers ou les chemins d'accès n'étaient pas correctement traités.
  • Correction de la chaîne d'outils autonome de façon à générer les binaires appropriés lors de l'utilisation de -lstdc++ (association à l'environnement d'exécution GNU libstdc++ C++). Utilisez -lgnustl_shared pour créer une association avec la version de la bibliothèque partagée, ou -lstdc++ pour la version statique.

    Pour en savoir plus sur ce correctif, consultez docs/STANDALONE-TOOLCHAIN.html.

  • Correction de gnustl_shared sur Cygwin. L'éditeur de liens signalait que libsupc++.a était introuvable, alors que le fichier se trouvait au bon emplacement.
  • Correction du lien Cygwin C++ lorsque vous n'utilisez aucun environnement d'exécution C++ spécifique via APP_STL.
Autres modifications
  • Lorsque votre application utilise l'environnement d'exécution GNU libstdc++, le compilateur n'active plus de force les exceptions ni RTTI. Cette modification permet de réduire la taille du code.

    Si vous avez besoin de ces fonctionnalités, vous devez effectuer l'une des opérations suivantes :

    • Activez les exceptions et/ou RTTI de manière explicite dans vos modules ou dans Application.mk (recommandé).
    • Définissez APP_GNUSTL_FORCE_CPP_FEATURES sur 'exceptions', 'rtti' ou les deux dans votre fichier Application.mk. Pour en savoir plus, consultez docs/APPLICATION-MK.html.
  • ndk-gdb fonctionne désormais correctement lorsque votre application dispose de services privés qui s'exécutent dans des processus indépendants. Il débogue le processus principal de l'application au lieu du premier processus listé par ps, qui est généralement un processus de service.
  • Correction d'un bug peu fréquent où NDK r7 ne respectait pas la valeur LOCAL_ARM_MODE et compilait toujours certains fichiers sources (mais pas tous) en instructions 32 bits.
  • STLport : actualisation des sources pour qu'elles correspondent à la version de la plate-forme Android. Cette mise à jour corrige quelques bugs mineurs :
    • Correction de l'instanciation d'un type incomplet
    • Correction d'une faute de frappe mineure : "==" au lieu de "="
    • Utilisation de memmove au lieu de memcpy dans string::assign
    • Amélioration de la gestion de IsNANorINF, IsINF, IsNegNAN, etc.

    Pour en savoir plus, consultez le journal de commit.

  • STLport : suppression de cinq initialiseurs statiques inutiles de la bibliothèque.
  • Les bibliothèques GNU libstdc++ pour armeabi-v7a étaient compilées par erreur pour armeabi. Cette modification n'avait aucun impact sur l'exactitude, mais l'utilisation de la bonne ABI devrait améliorer légèrement les performances.
  • La bibliothèque d'aide cpu-features a été mise à jour pour indiquer trois fonctionnalités de processeur x86 facultatives (SSSE3, MOVBE et POPCNT). Pour en savoir plus, consultez docs/CPU-FEATURES.html.
  • docs/NDK-BUILD.html a été mis à jour afin d'indiquer NDK_APPLICATION_MK au lieu de NDK_APP_APPLICATION_MK pour la sélection d'un fichier Application.mk personnalisé.
  • Cygwin : ndk-build ne crée plus de fichier "NUL" vide dans le répertoire actuel lorsqu'il est appelé.
  • Cygwin : amélioration de la détection automatique des dépendances. Dans la version précédente, elle ne fonctionnait pas correctement dans les cas suivants :
    • lorsque le préfixe du lecteur Cygwin n'était pas /cygdrive ;
    • lors de l'utilisation de montages sans lecteur, par exemple lorsque Cygwin convertissait /home en \\server\subdir au lieu de C:\Some\Dir.
  • Cygwin : ndk-build n'essaie pas d'utiliser les outils Windows natifs sous $NDK/prebuilt/windows/bin avec certaines versions de Cygwin et/ou GNU Make.

Cette version du NDK comprend de nouvelles fonctionnalités compatibles avec la plate-forme Android 4.0, ainsi que de nombreux autres ajouts et améliorations.

Nouvelles fonctionnalités
  • Ajout des API NDK officielles pour Android 4.0 (niveau d'API 14), ce qui ajoute les fonctionnalités natives suivantes à la plate-forme :
    • Ajout d'une API multimédia native basée sur la norme OpenMAX AL 1.0.1 du Khronos Group. Les nouveaux en-têtes <OMXAL/OpenMAXAL.h> et <OMXAL/OpenMAXAL_Android.h> permettent aux applications ciblant le niveau d'API 14 d'effectuer une sortie multimédia directement à partir du code natif à l'aide d'une nouvelle interface de file d'attente de tampon propre à Android. Pour en savoir plus, consultez docs/openmaxal/index.html et http://www.khronos.org/openmax/.
    • Mise à jour de l'API audio native basée sur la norme OpenSL ES 1.0.1 du Khronos Group. Avec le niveau d'API 14, vous pouvez désormais décoder des fichiers audio compressés (par exemple, MP3, AAC ou Vorbis) vers le format PCM. Pour en savoir plus, consultez docs/opensles/index.html et http://www.khronos.org/opensles/.
  • Ajout de la compatibilité avec CCache. Pour accélérer les recompilations volumineuses, définissez la variable d'environnement NDK_CCACHE sur ccache (ou le chemin d'accès à votre binaire ccache). Lorsqu'il est déclaré, le système de compilation NDK utilise automatiquement CCache lors de la compilation des fichiers sources. Par exemple :
    export NDK_CCACHE=ccache
    

    Remarque : CCache n'est pas inclus dans la version du NDK. Vous devez donc l'installer avant de l'utiliser. Pour en savoir plus sur CCache, consultez la page http://ccache.samba.org.

  • Ajout de la possibilité de définir APP_ABI sur all pour indiquer que vous souhaitez créer vos modules NDK pour toutes les ABI compatibles avec la version du NDK donnée. Cela signifie que l'une des deux lignes suivantes de votre fichier Application.mk correspond à cette version :
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    

    Cela fonctionne également si vous définissez APP_ABI lorsque vous appelez ndk-build à partir de la ligne de commande, ce qui vous permet de vérifier rapidement que votre projet est compilé pour toutes les ABI compatibles sans modifier son fichier Application.mk file. Exemple :

    ndk-build APP_ABI=all
    
  • Ajout d'une variable LOCAL_CPP_FEATURES dans Android.mk pour vous permettre de déclarer les fonctionnalités C++ (RTTI ou Exceptions) que votre module utilise. Cela garantit que l'association finale fonctionnera correctement si vous disposez de modules prédéfinis qui dépendent de ces fonctionnalités. Pour en savoir plus, consultez docs/ANDROID-MK.html et docs/CPLUSPLUS-SUPPORT.html.
  • Chemins d'accès abrégés vers les fichiers sources et objets utilisés dans les commandes de compilation. Lorsque vous appelez $NDK/ndk-build à partir du chemin d'accès à votre projet, les chemins d'accès aux fichiers sources, objets et binaires transmis aux commandes de compilation sont désormais beaucoup plus courts, car ils sont relatifs au répertoire actuel. Cela est utile lorsque vous créez des projets avec de nombreux fichiers sources, car vous évitez ainsi les limites de longueur de ligne de commande imposées par votre système d'exploitation hôte. Le comportement reste inchangé si vous appelez ndk-build à partir d'un sous-répertoire de l'arborescence de votre projet ou si vous définissez NDK_PROJECT_PATH pour qu'il pointe vers un répertoire spécifique.
Fonctionnalités expérimentales
Vous pouvez désormais compiler vos fichiers sources NDK sous Windows sans Cygwin en appelant le script ndk-build.cmd sur la ligne de commande à partir du chemin d'accès à votre projet. Le script utilise exactement les mêmes arguments que le script ndk-build d'origine. Le package NDK Windows est fourni avec ses propres binaires prédéfinis pour GNU Make, Awk et les autres outils requis par le build. Vous n'avez pas besoin d'installer quoi que ce soit d'autre pour obtenir un système de compilation opérationnel.

Important : ndk-gdb ne fonctionne pas sous Windows. Vous avez donc toujours besoin de Cygwin pour le débogage.

Cette fonctionnalité est encore expérimentale. N'hésitez donc pas à l'essayer et à signaler les problèmes sur la base de données des bugs publique ou sur le forum public. Tous les exemples et les tests unitaires fournis avec le NDK peuvent être compilés avec cette fonctionnalité.

Correction de bugs importants
  • Les bibliothèques partagées importées sont désormais installées par défaut à l'emplacement d'installation cible (libs/<abi>) si APP_MODULES n'est pas défini dans votre fichier Application.mk. Par exemple, si un module de premier niveau foo importe un module bar, libfoo.so et libbar.so sont tous deux copiés dans l'emplacement d'installation. Auparavant, seul libfoo.so était copié, sauf si vous aviez également listé bar dans APP_MODULES. Si vous définissez APP_MODULES de manière explicite, le comportement reste inchangé.
  • ndk-gdb fonctionne désormais correctement pour les activités comportant plusieurs catégories dans leurs filtres d'intent MAIN.
  • Les importations de bibliothèques statiques sont désormais effectivement transitives. Par exemple, si un module de premier niveau foo importe la bibliothèque statique bar qui importe la bibliothèque statique zoo, libfoo.so est désormais associé à la fois à libbar.a et à libzoo.a.
Autres modifications
  • docs/NATIVE-ACTIVITY.HTML : correction d'une faute de frappe. Le niveau d'API minimal doit être de 9 et non de 8 pour les activités natives.
  • docs/STABLE-APIS.html : ajout d'une documentation manquante listant EGL en tant qu'API stable compatible, à partir du niveau d'API 9.
  • download-toolchain-sources.sh : mise à jour permettant de télécharger les sources de la chaîne d'outils à partir du site android.googlesource.com, qui correspond au nouvel emplacement des serveurs AOSP.
  • Ajout d'un environnement d'exécution compatible avec C++ nommé gabi++. Pour en savoir plus, consultez le document docs/CPLUSPLUS-SUPPORT.html mis à jour.
  • Ajout d'un environnement d'exécution compatible avec C++ nommé gnustl_shared et correspondant à la version de bibliothèque partagée de GNU libstdc++ v3 (licence GPLv3). Pour en savoir plus, consultez docs/CPLUSPLUS-SUPPORT.html.
  • Ajout de la compatibilité avec RTTI dans les environnements d'exécution STLport C++ (les exceptions ne sont pas prises en charge).
  • Ajout de la compatibilité avec plusieurs extensions de fichiers dans LOCAL_CPP_EXTENSION. Par exemple, pour compiler à la fois foo.cpp et bar.cxx en tant que sources C++, déclarez ce qui suit :
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
  • Suppression de nombreux symboles exportés indésirables des bibliothèques système partagées au moment de l'association fournies par le NDK. Ainsi, le code généré avec la chaîne d'outils autonome ne risque pas de dépendre accidentellement d'un symbole d'ABI instable (par exemple, un symbole libgcc.a qui change à chaque modification de la chaîne d'outils utilisée pour créer la plate-forme).
  • Actualisation des en-têtes EGL et OpenGLES Khronos pour accepter davantage d'extensions. Notez que cela ne modifie pas les ABI du NDK pour les bibliothèques correspondantes, car chaque extension doit être vérifiée par l'application cliente au moment de l'exécution.

    Les extensions disponibles dépendent de votre appareil et des pilotes de GPU, et non de la version de la plate-forme sur laquelle l'appareil s'exécute. Les modifications d'en-tête ajoutent simplement de nouvelles constantes et de nouveaux types afin de faciliter l'utilisation des extensions lorsqu'elles ont été vérifiées par eglGetProcAddress() ou glGetProcAddress(). La liste suivante recense les nouvelles extensions compatibles :

    GLES 1.x
    • GL_OES_vertex_array_object
    • GL_OES_EGL_image_external
    • GL_APPLE_texture_2D_limited_npot
    • GL_EXT_blend_minmax
    • GL_EXT_discard_framebuffer
    • GL_EXT_multi_draw_arrays
    • GL_EXT_read_format_bgra
    • GL_EXT_texture_filter_anisotropic
    • GL_EXT_texture_format_BGRA8888
    • GL_EXT_texture_lod_bias
    • GL_IMG_read_format
    • GL_IMG_texture_compression_pvrtc
    • GL_IMG_texture_env_enhanced_fixed_function
    • GL_IMG_user_clip_plane
    • GL_IMG_multisampled_render_to_texture
    • GL_NV_fence
    • GL_QCOM_driver_control
    • GL_QCOM_extended_get
    • GL_QCOM_extended_get2
    • GL_QCOM_perfmon_global_mode
    • GL_QCOM_writeonly_rendering
    • GL_QCOM_tiled_rendering
    GLES 2.0
    • GL_OES_element_index_uint
    • GL_OES_get_program_binary
    • GL_OES_mapbuffer
    • GL_OES_packed_depth_stencil
    • GL_OES_texture_3D
    • GL_OES_texture_float
    • GL_OES_texture_float_linear
    • GL_OES_texture_half_float_linear
    • GL_OES_texture_npot
    • GL_OES_vertex_array_object
    • GL_OES_EGL_image_external
    • GL_AMD_program_binary_Z400
    • GL_EXT_blend_minmax
    • GL_EXT_discard_framebuffer
    • GL_EXT_multi_draw_arrays
    • GL_EXT_read_format_bgra
    • GL_EXT_texture_format_BGRA8888
    • GL_EXT_texture_compression_dxt1
    • GL_IMG_program_binary
    • GL_IMG_read_format
    • GL_IMG_shader_binary
    • GL_IMG_texture_compression_pvrtc
    • GL_IMG_multisampled_render_to_texture
    • GL_NV_coverage_sample
    • GL_NV_depth_nonlinear
    • GL_QCOM_extended_get
    • GL_QCOM_extended_get2
    • GL_QCOM_writeonly_rendering
    • GL_QCOM_tiled_rendering
    EGL
    • EGL_ANDROID_recordable
    • EGL_NV_system_time

Cette version du NDK n'inclut pas de nouvelles fonctionnalités par rapport à la version r6. La version r6b résout les problèmes suivants de la version r6 :

Correction de bugs importants
  • Correction du build lorsque APP_ABI="armeabi x86" est utilisé pour des compilations multi-architectures.
  • Correction de l'emplacement des binaires STLport prédéfinis dans le package de version du NDK. Ils étaient placés au mauvais endroit en raison d'un bug dans le script de packaging.
  • Correction de l'utilisation de atexit() dans les bibliothèques partagées avec la chaîne d'outils autonome x86.
  • Correction de make-standalone-toolchain.sh --arch=x86. Auparavant, ce script ne parvenait pas à copier les binaires GNU libstdc++ appropriés à l'emplacement adéquat.
  • Correction des avertissements liés à l'éditeur de liens de la chaîne d'outils autonome concernant l'absence de la définition et de la taille du symbole __dso_handle (ARM uniquement).
  • Correction de l'ordre d'inclusion de $(SYSROOT)/usr/include pour les builds x86. Pour en savoir plus, consultez le bug.
  • Correction des définitions de ptrdiff_t et size_t dans les systèmes x86 spécifiques lorsqu'ils sont utilisés avec la chaîne d'outils autonome x86.

Cette version du NDK est compatible avec l'ABI x86 et comprend d'autres modifications mineures. Pour obtenir des informations détaillées sur les modifications apportées dans cette version, consultez le document CHANGES.HTML inclus dans le package NDK.

Remarques générales
  • Ajout de la compatibilité avec l'ABI x86, qui vous permet de générer du code machine s'exécutant sur des appareils Android x86 compatibles. Les principales fonctionnalités destinées à x86 comprennent des chaînes d'outils, des en-têtes système, des bibliothèques et un débogage spécifiques. Pour en savoir plus sur la compatibilité avec x86, consultez le fichier docs/CPU-X86.html dans le package NDK.

    Par défaut, le code est généré pour les appareils ARM, mais vous pouvez ajouter x86 à la définition de APP_ABI dans votre fichier Application.mk pour créer des builds compatibles avec les plates-formes x86. Par exemple, la ligne suivante indique à ndk-build de compiler votre code pour trois ABI distinctes :

    APP_ABI := armeabi armeabi-v7a x86

    À moins d'utiliser des sources d'assemblage ARM, vous n'avez normalement pas besoin de modifier vos fichiers Android.mk pour compiler du code machine x86.

  • Vous pouvez créer une chaîne d'outils x86 autonome à l'aide de l'option --toolchain=x86-4.4.3 lorsque vous appelez make-standalone-toolchain.sh. Pour en savoir plus, consultez docs/STANDALONE-TOOLCHAIN.html.
  • Le nouvel outil ndk-stack vous permet de convertir les traces de la pile dans logcat qui sont générées par du code natif. Il convertit les adresses d'instructions dans un format lisible qui contient des informations telles que la fonction, le fichier source et le numéro de ligne correspondant à chaque bloc de pile. Pour en savoir plus et obtenir un exemple d'utilisation, consultez docs/NDK-STACK.html.
Autres modifications
arm-eabi-4.4.0, qui était obsolète depuis NDK r5, a été supprimé de la distribution du NDK.

Cette version du NDK n'inclut pas de nouvelles fonctionnalités par rapport à la version r5b. La version r5c résout les problèmes suivants de la version r5b :

Correction de bugs importants
  • ndk-build : correction d'un bug peu fréquent qui se produisait lors de la tentative d'exécution de compilations parallèles de projets débogables.
  • Correction d'une faute de frappe qui empêchait LOCAL_WHOLE_STATIC_LIBRARIES de fonctionner correctement avec la nouvelle chaîne d'outils et ajout d'une documentation à ce sujet dans docs/ANDROID-MK.html.
  • Correction d'un bug qui provoquait le plantage du code associé à gnustl_static lors de son exécution sur des plates-formes antérieures au niveau d'API 8 (Android 2.2).
  • ndk-gdb : correction d'un bug qui entraînait une erreur de segmentation lors du débogage d'appareils Android 3.0 ou version ultérieure.
  • <android/input.h> : deux fonctions introduites dans le niveau d'API 9 (Android 2.3) étaient incorrectes et ont été corrigées. Bien que cela fasse planter l'API source, l'interface binaire du système reste inchangée. Il manquait un paramètre history_index dans les fonctions incorrectes. Les définitions correctes sont les suivantes :
    float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );

    float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );
  • Mise à jour du binaire ARM de la bibliothèque C pour le niveau d'API 9 (Android 2.3) afin d'exposer correctement au moment de l'association les nouvelles fonctions ajoutées à ce niveau d'API (par exemple, pthread_rwlock_init).
Améliorations et corrections mineures
  • Les fichiers objets sont désormais toujours associés dans l'ordre dans lequel ils figurent dans LOCAL_SRC_FILES. Ce n'était pas le cas auparavant, car les fichiers étaient regroupés par extensions sources.
  • En cas d'échec, import-module affiche désormais la liste des répertoires concernés par la recherche. Cela vous permet de vérifier que la définition de NDK_MODULE_PATH utilisée par le système de compilation est correcte.
  • En cas de réussite, import-module affiche désormais dans le journal le répertoire où le module a été trouvé (visible avec NDK_LOG=1).
  • Augmentation de la vitesse de compilation des applications débogables lorsque le projet contient un très grand nombre de répertoires include.
  • ndk-gdb : meilleure détection des échecs de adb shell et amélioration des messages d'erreur.
  • <pthread.h> : correction de la définition de PTHREAD_RWLOCK_INITIALIZER pour le niveau d'API 9 (Android 2.3) ou version ultérieure.
  • Correction d'un problème faisant qu'un module pouvait s'importer lui-même, créant ainsi une boucle infinie dans GNU Make.
  • Correction d'un bug qui entraînait l'échec de la compilation si LOCAL_ARM_NEON était défini sur "true" (faut de frappe dans build/core/build-binary.mk).
  • Correction d'un bug qui empêchait la compilation des fichiers d'assemblage .s (les fichiers .S ne présentaient aucun problème).

Cette version du NDK n'inclut pas de nouvelles fonctionnalités par rapport à la version r5. La version r5b résout les problèmes suivants de la version r5 :

  • Les binaires r5 nécessitaient l'utilisation de glibc 2.11, mais les binaires r5b sont générés avec une chaîne d'outils spéciale qui cible glibc 2.7 ou version ultérieure. Les binaires de la chaîne d'outils Linux s'exécutent désormais sous Ubuntu 8.04 ou version ultérieure.
  • Correction d'un bug du compilateur dans la chaîne d'outils arm-linux-androideabi-4.4.3. Le binaire précédent générait des séquences d'instructions thumb incorrectes pour les caractères munis d'un signe.
  • Ajout de la documentation manquante pour la valeur "gnustl_static" de APP_STL, qui vous permet de créer une association avec une version de bibliothèque statique de GNU libstdc++.
  • Correction des problèmes suivants dans ndk-build :
    • Un bug créait des fichiers de dépendances incohérents lorsqu'une erreur de compilation se produisait sous Windows Cela empêchait toute compilation correcte une fois l'erreur corrigée dans le code source.
    • Un bug propre à Cygwin faisait que l'utilisation de chemins d'accès très courts pour l'installation d'Android NDK ou le projet entraînait la génération de fichiers de dépendances non valides. Cela rendait les builds incrémentiels impossibles.
    • Une faute de frappe empêchait la bibliothèque cpufeatures de fonctionner correctement avec la nouvelle chaîne d'outils NDK.
    • Les builds dans Cygwin sont plus rapides, car ils évitent les appels à cygpath -m à partir de GNU Make pour chaque fichier source ou objet, ce qui posait des problèmes en cas d'arborescences sources très volumineuses. En cas de dysfonctionnement, définissez NDK_USE_CYGPATH=1 dans votre environnement pour utiliser à nouveau cygpath -m.
    • L'installation de Cygwin informe désormais l'utilisateur des chemins d'installation non valides contenant des espaces. Auparavant, un chemin d'accès non valide générait une erreur signalant une version incorrecte de GNU Maker, même si la bonne version était installée.
  • Correction d'une faute de frappe qui empêchait la variable d'environnement NDK_MODULE_PATH de fonctionner correctement lorsqu'elle contenait plusieurs répertoires séparés par un signe deux-points.
  • Le script prebuilt-common.sh contient des correctifs qui permettent de rechercher du code machine 64 bits dans le compilateur, au lieu de se fier à la balise d'hôte, ce qui permet à la chaîne d'outils 32 bits d'effectuer une recompilation correcte sous Snow Leopard. Les scripts de recompilation de la chaîne d'outils sont désormais compatibles avec l'utilisation d'une chaîne d'outils hôte 32 bits.
  • Une déclaration manquante pour INET_ADDRSTRLEN a été ajoutée à <netinet/in.h>.
  • Les déclarations manquantes pour IN6_IS_ADDR_MC_NODELOCAL et IN6_IS_ADDR_MC_GLOBAL ont été ajoutées à <netinet/in6.h>.
  • "asm" a été remplacé par "__asm__" dans <asm/byteorder.h> pour permettre la compilation avec -std=c99.

Cette version du NDK comprend un grand nombre de nouvelles API. La plupart d'entre elles ont été introduites pour permettre le développement de jeux et d'applications similaires qui utilisent de manière intensive le code natif. Grâce à ces API, les développeurs bénéficient d'un accès natif direct aux événements, à l'audio, aux graphismes, à la gestion des fenêtres, aux éléments et au stockage. Ils peuvent également mettre en œuvre le cycle de vie de leur application Android en code natif à l'aide de la nouvelle classe NativeActivity. Pour obtenir des informations détaillées sur les modifications apportées dans cette version, consultez le document CHANGES.HTML inclus dans le package NDK téléchargé.

Remarques générales
  • Ajout de la compatibilité avec les activités natives, qui vous permettent de mettre en œuvre le cycle de vie de l'application Android en code natif.
  • Ajout de la compatibilité native pour les éléments suivants :
    • Sous-système de saisie (par exemple, clavier et écran tactile)
    • Accès aux données des capteurs (accéléromètre, boussole, gyroscope, etc.)
    • API de boucle d'événements pour attendre, par exemple, des événements de saisie et de capteur
    • Sous-système de fenêtres et de surfaces
    • API audio basées sur la norme OpenSL ES et compatibles avec la lecture et l'enregistrement, ainsi que le contrôle des effets audio de la plate-forme
    • Accès aux éléments mise en package dans un fichier .apk
  • Intégration d'une nouvelle chaîne d'outils (basée sur GCC 4.4.3) qui génère un code de meilleure qualité et peut également être utilisée comme compilateur croisé autonome par les personnes qui souhaitent compiler leur projet avec ./configure && make. Pour en savoir plus, consultez docs/STANDALONE-ToolCHAIN.html. Les binaires pour GCC 4.4.0 sont toujours fournis, mais les binaires 4.2.1 ont été supprimés.
  • Ajout de la compatibilité avec les bibliothèques statiques et partagées prédéfinies (docs/PREBUILTS.html), et avec les exportations et importations de modules afin de faciliter le partage et la réutilisation de modules tiers (le fichier docs/IMPORT-MODULE.html explique pourquoi).
  • Ajout d'une implémentation STL C++ par défaut (basée sur STLport) en tant que module d'assistance. Elle peut être utilisée comme bibliothèque statique ou partagée (des détails et des exemples d'utilisation sont disponibles dans sources/android/stlport/README). Des binaires prédéfinis pour STLport (statique ou partagée) et GNU libstdc++ (statique uniquement) sont également fournis si vous choisissez d'effectuer la compilation avec ces bibliothèques au lieu de l'implémentation STL C++ par défaut. Les exceptions C++ et RTTI ne sont pas compatibles avec l'implémentation STL par défaut. Pour en savoir plus, consultez docs/CPLUSPLUS-SUPPORT.HTML.
  • Amélioration de la bibliothèque d'aide cpufeatures pour une meilleure indication du type de processeur (certains appareils indiquaient un processeur ARMv7 alors qu'il s'agissait en fait d'un processeur ARMv6). Nous recommandons aux développeurs qui utilisent cette bibliothèque de recompiler leurs applications, puis de les importer sur Google Play pour bénéficier des améliorations apportées.
  • Ajout d'une bibliothèque EGL qui vous permet de créer et de gérer des textures et des services OpenGL ES.
  • Ajout des applications exemples native-plasma et native-activity, qui montrent comment coder une activité native.
  • Intégration de nombreuses corrections de bugs et d'autres améliorations mineures. Pour une liste détaillée de ces modifications, consultez docs/CHANGES.html.
Remarques concernant NDK r4b

Intégration de correctifs pour plusieurs problèmes dans les scripts de compilation et de débogage du NDK. Si vous utilisez NDK r4, nous vous recommandons de télécharger le build NDK r4b. Pour obtenir des informations détaillées sur les modifications apportées dans cette version, consultez le document CHANGES.TXT inclus dans le package NDK téléchargé.

Remarques générales
  • Ajout d'un système de compilation simplifié via la nouvelle commande de compilation ndk-build.
  • Débogage natif facile du code machine généré sur les appareils en production grâce à la nouvelle commande ndk-gdb.
  • Ajout d'une ABI propre à Android pour les architectures de processeur ARM, armeabi-v7a. Cette nouvelle ABI étend l'ABI armeabi existante afin d'inclure ces extensions contenant un ensemble d'instructions pour le processeur :
    • Instructions pour Thumb-2.
    • Instructions pour le FPU du matériel VFP (VFPv3-D16).
    • Compatibilité facultative avec les fonctionnalités intrinsèques d'ARM Advanced SIMD (NEON) GCC et VFPv3-D32. Les appareils compatibles sont par exemple Verizon Droid de Motorola, Google Nexus One, etc.
  • Ajout de la bibliothèque statique cpufeatures (avec sources), qui permet à votre application de détecter les fonctionnalités du processeur de l'appareil hôte lors de l'exécution. Plus précisément, les applications peuvent vérifier la compatibilité avec ARMv7-A, ainsi qu'avec VFPv3-D32 et NEON, puis fournir des chemins de code distincts si nécessaire.
  • Ajout d'une application exemple, hello-neon, qui montre comment vérifier les fonctionnalités du processeur à l'aide de la bibliothèque cpufeatures, puis fournir un chemin de code optimisé à l'aide des fonctionnalités intrinsèques de NEON, si elles sont compatibles avec le processeur.
  • Possibilité de générer du code machine pour l'un ou l'autre des ensembles d'instructions compatibles avec le NDK, ou les deux. Par exemple, vous pouvez effectuer une compilation à la fois pour les architectures ARMv5 et ARMv7-A, et tout stocker dans le fichier .apk final de votre application.
  • Pour que vos applications ne soient accessibles aux utilisateurs que si leurs appareils sont capables de les exécuter, Google Play les filtre désormais en fonction des informations de leur ensemble d'instructions. Aucune action n'est requise de votre part pour activer le filtrage. De plus, le système Android vérifie lui aussi votre application au moment de l'installation, qui ne se poursuit que si l'application fournit une bibliothèque compilée pour l'architecture du processeur de l'appareil.
  • Ajout de la compatibilité avec Android 2.2, y compris une nouvelle API stable permettant d'accéder aux tampons de pixels des objets Bitmap à partir du code natif.
Remarques générales
  • Ajout de la compatibilité avec les bibliothèques natives OpenGL ES 2.0.
  • Ajout d'une application exemple, hello-gl2, qui illustre l'utilisation des nuanceurs de sommet et de fragment OpenGL ES 2.0.
  • Actualisation des binaires de la chaîne d'outils pour cette version avec GCC 4.4.0 afin de générer du code machine légèrement plus compact et efficace que la version précédente (4.2.1). Le NDK fournit également les binaires 4.2.1, que vous pouvez éventuellement utiliser pour créer votre code machine.

Publication initiale sous le nom "Android 1.6 NDK, version 1".

Remarques générales
  • Ajout de la compatibilité avec les bibliothèques natives OpenGL ES 1.1.
  • Ajout d'une application exemple, san-angeles, qui affiche des graphismes 3D via les API OpenGL ES natives tout en gérant le cycle de vie des activités avec un objet GLSurfaceView.

Publication initiale sous le nom "Android 1.5 NDK, version 1".

Remarques générales
  • Compatibilité avec le compilateur (GCC) pour les instructions ARMv5TE, y compris les instructions Thumb-1.
  • Intégration d'en-têtes système pour les API natives stables, d'une documentation et d'applications exemples.