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 r29 (octobre 2025)
Journal des modifications- Téléchargements
-
- Les téléchargements correspondant à cette version sont disponibles sur cette page.
Android NDK r28 (février 2025)
Journal des modifications- Téléchargements
-
- Les téléchargements correspondant à cette version sont disponibles sur cette page.
Android NDK r27 LTS (juillet 2024)
Journal des modifications- Téléchargements
-
- Les téléchargements correspondant à cette version sont disponibles sur cette page.
Android NDK r26 LTS (septembre 2023)
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.
Android NDK r25 LTS (juillet 2022)
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.
Android NDK r24 (mars 2022)
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.
-
GNU Assembler (GAS) a été supprimé. Si vous avez compilé des projets en utilisant
Android NDK r23 LTS (août 2021)
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-gdbutilise 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).
-
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
Android NDK r22b (mars 2021)
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 directementas, utilisezclangà 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::filesystemest désormais assurée. Il existe deux problèmes connus :-
Problème 1258 : il est possible que
std::filesystem::perm_options::nofollowne soit pas appliqué sur les anciens appareils. -
Problème 1260 :
std::filesystem::canonicalindique à tort que l'opération a réussi si un chemin d'accès inexistant lui est transmis sur les anciens appareils.
-
Problème 1258 : il est possible que
-
GNU binutils est obsolète et sera supprimé dans une prochaine version du NDK. Notez que GNU Assembler (
Android NDK r21e LTS (janvier 2021)
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=lldlors 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)
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.
-
Android NDK r20b (juin 2019)
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=lldlors 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.
-
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
Android NDK r19c (janvier 2019)
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=lldlors 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 : 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$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.pyne 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 guide Build System Maintainers. - 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.
-
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
Android NDK r18b (septembre 2018)
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=lldlors 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.
Android NDK r17c (juin 2018)
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.
Android NDK r16b (décembre 2017)
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.
Android NDK r15c (juillet 2017)
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.
- 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). SiAPP_PLATFORMest inférieure àandroid-14,android-14est 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.
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.
- 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.
Android NDK r14b (mars 2017)
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.
- 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 :
Pour en savoir plus sur les nouveautés et les modifications apportées à cette version, consultez ce journal des modifications.
Android NDK r13b (octobre 2016)
- 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
-
-
Autres corrections pour les
__cxa_bad_castmanquants.
-
Autres corrections pour les
- NDK
-
NDK_TOOLCHAIN_VERSIONest 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.shest 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.
Android NDK r12b (juin 2016)
- Téléchargements
- Les téléchargements correspondant à cette version sont archivés sur cette page.
- Annonces
- Par défaut, la commande
ndk-buildutilise Clang dans la version r13. Nous allons supprimer GCC dans une prochaine version. - Le script
make-standalone-toolchain.shsera supprimé dans la version r13. Assurez-vous quemake_standalone_toolchain.pyrépond à vos besoins. - Signalez les problèmes sur GitHub.
- Nous avons corrigé
ndk-gdb.py(problème 118). -
Nous avons mis à jour
NdkCameraMetadataTags.hafin 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).
- Pour obtenir des informations complètes, consultez cette liste de modifications.
- 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-infoa été activé par défaut pour les versions de débogage Clang. Cette modification doit améliorer le débogage avec LLDB.--build-idest 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_CYGPATHne devrait plus causer de problèmes avec libgcc (problème 195486 pour Android).- Les options
-Wl,--warn-shared-textrelet-Wl,--fatal-warningssont 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
libcamera2ont été ajoutées pour les appareils avec un niveau de matérielINFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDou 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.exeetclang++.exedu package Windows 32 bits sont en réalité 64 bits. L'exécutable 32 bits est nomméclang_32.exe.
- Les exécutables
- 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-pltafin 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-dynamicpour contourner un bug de l'éditeur de liens dynamique pour les versions d'Android plus anciennes. - NDK r11 KI pour
dynamic_castne fonctionne pas avec Clang. Nous avons corrigé les problèmes liés à x86, àstlport_staticet à 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++_sharedne 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.
__thread devrait vraiment fonctionner cette fois.
Android NDK r12 (juin 2016)
- Téléchargements
- Les téléchargements correspondant à cette version sont archivés sur cette page.
- Annonces
- La commande
ndk-buildutilisera Clang par défaut dans une prochaine version. GCC sera supprimé dans une version ultérieure. - Le script
make-standalone-toolchain.shsera supprimé dans une prochaine version. Si vous utilisez ce script, veuillez prévoir une migration versmake_standalone_toolchain.pydè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-infosoit activée par défaut. Cette modification améliore le débogage avec LLDB. - Activation de
--build-idcomme 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_CYGPATHafin qu'il ne provoque plus de problèmes avec libgcc (problème 195486). - Activation des options suivantes par défaut :
-Wl,--warn-shared-textrelet-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_LIMITEDou supérieur. Pour en savoir plus, consultez la documentation de référence surCameraCharacteristics. - Clang
- Mise à jour de Clang vers la version 3.8svn (r256229, build 2812033). Les exécutables
clang.exeetclang++.exedu package Windows 32 bits sont en réalité 64 bits. L'exécutable 32 bits est nomméclang_32.exe. - Correction de
__threadafin 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
libatomicafin 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-pltafin 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-dynamicpour 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_castne 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++_sharedne 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 photoACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAPest indiquée par erreur et sera supprimée dans la prochaine version. Utilisez plutôt la valeurACAMERA_STATISTICS_LENS_SHADING_MAP.
Android NDK r11c (mars 2016)
- Modifications
- Application de correctifs supplémentaires au script
ndk-gdb.py. - Ajout d'un argument de nom de package facultatif à l'option
--attachde la commandendk-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).
Android NDK r11b (mars 2016)
- 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-gdbpour Mac. - Ajout de raccourcis de premier niveau pour les outils de ligne de commande :
ndk-dependsndk-gdbndk-stackndk-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
--toolchaindansmake-standalone-toolchain.sh.
- Correction de
- Annonces importantes
- Clang
-
- Errata
- Contrairement à ce que nous avons signalé dans les notes de la version r11,
__threadne 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.
Android NDK r11 (mars 2016)
- 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.
- Nous vous recommandons vivement de passer à Clang.
- Ajouts
- Clang est maintenant compatible avec l'émulation TLS.
- Le compilateur accepte désormais
__threaden émulant ELF TLS avec des données spécifiques des threads pthread. - C++11
thread_localfonctionne 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.
- Le compilateur accepte désormais
- Clang est maintenant compatible avec l'émulation TLS.
- Annonces importantes
- 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.
- Ajout d'une API de traçage natif à
- 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.
- Suppression de la compatibilité avec
- 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
-targetsurarmv5te-linux-androideabi.
- Vous pouvez rétablir l'ancien comportement en définissant l'option
- Modification du système de compilation afin qu'il utilise
-isystempour 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::__ndk1pour é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_PLATFORMpar Gingerbread.- La compatibilité avec Froyo et les versions antérieures devrait être abandonnée dans une prochaine version.
- Modification des chaînes d'outils autonomes ARM pour qu'elles utilisent par défaut arm7.
- Mise à jour du struct gabi++
_Unwind_Exceptionpour 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.hetuchar.hà partir de ToT Bionic. - Synchronisation de
sys/cdefs.hpour tous les niveaux d'API. - Correction de
fegetenv and fesetenvpour arm. - Correction de la taille/l'alignement du pointeur de fin de
crtend_*pour mips64 et x86_64.
- Annonces importantes
- Binutils
-
- Ajouts
- Ajout d'une nouvelle option :
--pic-veneer.
- Ajout d'une nouvelle option :
- 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=goldau 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).
- Ajouts
- 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.
- Suppressions
- YASM
-
- Modifications
- Mise à jour de YASM vers la version 1.3.0.
- Modifications
- 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 à
-O0entraîne des échecs de test avecdynamic_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.
Android NDK r10e (mai 2015)
- 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=clangsé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.goldpour 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.
- Pour intégrer le multithreading lors de la compilation, utilisez l'option
- Mise à niveau de GDB/gdbserver vers la version 7.7 pour toutes les architectures.
- Suppression du package NDK pour Darwin 32 bits.
- Intégration de la solution de contournement pour l'erratum 843419 de Cortex-A53 dans l'éditeur de liens
- 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.pragmaest 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_*dansmedia/NdkMediaDrm.h - Correction de
sys/ucontext.hpourmips64 - Abandon de la vérification de la version Clang pour
__builtin_isnanet__builtin_isinf - Ajout de
android-21/arch-mips/usr/include/asm/reg.het deandroid-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
mipsetmips64afin de créer une section.gcc_except_tableaccessible 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-rtqui causaient des plantages lorsque Clang effectuait une compilation pourmips64. 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::compareafin qu'il renvoie-1et1. Auparavant, il renvoyait des nombres signés arbitraires. - Correction de
ndk-gdbpour 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_iterpour GCC. Pour en savoir plus, consultez le problème 22355 de LLVM. - Correction de la compatibilité de
.asmavec l'ABIx86_64. - Mise en place d'une solution de contournement pour le problème lié à
stlportdans 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 targetlors de la compilation d'un seul fichier.cen exécutant la commandendk-build.cmdà partir degradle(problème 66937). - Ajout des bibliothèques
libatomic.aetlibgomp.aqui manquaient dans les chaînes d'outils hôte suivantes :aarch64-linux-android-4.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_64-4.9
- Autres modifications
-
- Ajout de
ld.goldpouraarch64. L'éditeur de liens par défaut resteld.bfd. Pour activer explicitementld.gold, ajoutez-fuse-ld=goldà la variableLOCAL_LDFLAGSouAPP_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-protectorpar-fstack-protector-strongpour 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-gdbpour permettre au système de compilation de remplacer le nom du package (problème 56189). - Abandon de
-mno-ldc1-stc1pour MIPS. Il est possible que cette option ne fonctionne pas avec les nouvelles options-fpxxet-mno-odd-spreg, ni avec l'ABI FPXX. - Ajout de la détection de MIPS MSA et R6 à
cpu-features.
- Ajout de
Android NDK r10d (décembre 2014)
- 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.6lorsque vous exécutezmake-standalone-toolchain.shsur 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
-mstackrealignpar 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 -pielors de la compilation. Dans les niveaux d'API 16 et supérieurs, ndk-build utilisePIElors 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.
- 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
- 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/vsscanfau 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 liées aux errata A53 835769 dans l'éditeur de liens aarch64-linux-android-4.9. Dans ce cadre, GCC transmet une nouvelle option,
- Autres corrections de bugs
-
- Correction des bibliothèques et des en-têtes suivants :
- Ajout de
posix_memalignau niveau d'API 16. Ajout d'un prototype dansstdlib.haux niveaux d'API 16 à 19 (problème 77861). - Correction de
stdatomic.hafin qu'il n'inclue<atomic>que pour C++11. - Modification des en-têtes suivants pour une utilisation autonome :
sys/user.hetgl2ext.h,dlext.h,fts.hetsgidefs.hpour le niveau d'API 21. - Modification de
sys/user.hpour renommermxcsr_masken le remplaçant parmxcr_masket pour modifier le type de données deu_ar0 en remplaçant - Modification du type de valeur renvoyé par
sysconf():intremplacé parlong. - Correction de la gestion de
thumbpourLOCAL_ARM_MODEpar ndk-build : dans la version r10d, ndk-build ajouteLOCAL_LDFLAGS+=-mthumbpar défaut, sauf si l'une des conditions suivantes s'applique : - Vous avez défini
LOCAL_ARM_MODEsurarm. - Vous créez une version de débogage (avec des paramètres tels que
APP_OPTIM=debugetAndroidManifest.xmlcontenantandroid: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_FILESdans 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_PCHpour 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).
unsigned longpar le struct user_regs_struct*.
Android NDK r10c (octobre 2014)
- 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-Lpar la désignation de la version officielle :android-21. - Mise à jour de GCC 4.9 en rebasculant sur la branche
googledu dépôt GCC. Les principales différences par rapport à la version en amont de GCC 4.9 sont les suivantes : - L'option
-O2active 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.
- Ajout de la compatibilité avec Clang 3.5 pour tous les hôtes :
NDK_TOOLCHAIN_VERSION=clangsé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-ascomme solution de contournement. - Clang 3.5 génère des avertissements supplémentaires pour les options inutilisées, telles que l'option
-finline-functionscompatible avec GCC. - 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, consultezprebuilt/common/gdb/common.setupdans 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.hdans 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-neonmis à jour danssamples/. - Consultez le guide d'Intel sur le portage d'ARM NEON vers Intel SSE.
- Accédez au document "NDK Programmer's Guide" (
- Documentation de la compatibilité de
_FORTIFY_SOURCEavecheaders/libs/android-21, qui est apparue dans la version r10 (lorsqueandroid-21s'appelait encoreAndroid-L), mais pour laquelle il n'existait aucune documentation.
Pour en savoir plus, consultez Correction de bugs importants ci-dessous.
Lors de la migration à partir de projets utilisant GCC, vous pouvez utiliser
-Wno-invalid-command-line-argumentet-Wno-unused-command-line-argumentpour ignorer les options inutilisées jusqu'à ce que vous puissiez décider quoi en faire. - Correction de bugs importants
-
- Correction d'une erreur interne du compilateur avec GCC4.9/aarch64, qui générait le message d'erreur suivant (problème 77564) :
- Correction du code incorrect généré à partir de GCC4.9/arm (problème 77567).
- Correction d'une erreur interne du compilateur GCC4.9/mips concernant l'assemblage intégré (problème 77568).
- Correction du code incorrect généré par GCC4.9/arm pour
x = (cond) ? y : x(problème 77569). - Correction de GCC4.9/aarch64 et de Clang3.5/aarch64 pour contourner l'erratum Cortex-A53 (835769) par défaut. Désactivez la solution de contournement en spécifiant
-mno-fix-cortex-a53-835769.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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_getReportingModeetASensor_isWakeUpSensor. - Correction de
stdatomic.hpour améliorer la compatibilité avec GCC 4.6 et permettre l'utilisation de l'en-tête<atomic>. - Ajout de
sys/ucontext.hetsys/user.hà tous les niveaux d'API. L'en-têtesignal.hinclut désormais<sys/ucontext.h>. Vous pouvez supprimer toute définition existante destruct ucontext. - Ajout de
posix_memalignaux niveaux d'API 17, 18 et 19. - Ajout des fonctions suivantes à toutes les architectures :
android_set_abort_message,posix_fadvise,posix_fadvise64etpthread_gettid_np. - Ajout des autorisations requises à l'exemple
native-media/AndroidManifest.xml(problème 106640). - Ajout de
clock_nanosleepetclock_settimeau 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,__getdents64etdlmalloc. - Suppression des fonctions suivantes des architectures 64 bits :
basename_r,dirname_r,__isthreadedet_flush_cache(mips64). - Suppression de la fonction suivante des architectures 32 bits :
__signalfd4. - Remplacement du type du troisième argument
size_tparintdans les fonctions suivantes :strtoll_l,strtoull_l,wcstoll_letwcstoull_l. - Restauration des fonctions suivantes dans l'architecture 64 bits :
arc4random,arc4random_bufetarc4random_uniform. - Remise en place de
cxa_*et des opérateursnewetdeletedanslibstdc++.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é.
- Ajout de codes de touche TV :
- 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=dansmake-standalone-toolchain.shpour 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/.
- Correction des bibliothèques et en-têtes suivants pour
- Autres modifications
-
- Amélioration de
cpu-featurespour 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.hetinclude-fixed/linux/compiler.hdu compilateur GCC (problème 73728). - Correction d'un problème lié à
-fltoavec GCC 4.8 sous Mac OS X. Le message d'erreur était le suivant : - Correction d'une faute de frappe dans
build-binary.mk.(problème 76992).
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Amélioration de
- Problèmes connus importants
-
- La spécification de -Os (
-fauto-profile) dans GCC 4.9 peut entraîner un plantage (problème 77571).
- La spécification de -Os (
Android NDK r10b (septembre 2014)
- 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
- Autres corrections de bugs
-
- Suppression de
stdio.hdes répertoiresinclude-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/etsources/third_party/googletest/README.NDK(problème 74069). - Correction des en-têtes Android-L :
- Ajout des fonctions suivantes à
ctype.hetwchar.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()ettwalk()(problème 73719) ainsi que 42 fonctions*_l(). - Changement de nom :
cmsg_nxthdrdevient__cmsg_nxthdr. - Suppression de
__libc_malloc_dispatch. - Remplacement du prototype
ptrace()parlong ptrace(int, ...);. - Suppression de
sha1.h. - Extension de
android_dlextinfodansandroid/dlext.h. - Annotation de
__NDK_FPABI__pour les fonctions recevant ou renvoyant des valeurs de type float ou double dansstdlib.h,time.h,wchar.hetcomplex.h.
- Suppression de
- Autres modifications
-
- Mise à jour de
mipsel-linux-android-4.9etmips64el-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-featurespour détecter davantage de fonctionnalités arm64 (liste des modifications 100339).
- Mise à jour de
Android NDK r10 (juillet 2014)
- 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=clangne 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
all32etall64pourAPP_ABI.APP_ABI=all32est équivalent àAPP_ABI=armeabi,armeabi-v7a,x86,mips.APP_ABI=all64est équivalent àAPP_ABI=arm64-v8a,x86_64,mips64.APP_ABI=allsé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_TR1si 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.hmis à 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.mkou 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 scriptmake-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.8ou4.9pour permettre à ndk-gdb de sélectionner GDB 7.6. - Ajout de l'option de compilation
-mssse3pour 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-aliasingsi 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
-O3de Clang 3.3/3.4 dans : - Correction du plantage de Clang 3.3/3.4 suivant :
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef(problème 57381).): Assertion Weights.size() >= 2 && "Need at least two branch weights!" 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). - Correction de libc++ pour qu'elle compile maintenant
- Autres corrections de bugs
-
- Corrections d'en-têtes :
- Correction de
ssize_t32 bits pour le définir surintau lieu delong int. - Correction de
WCHAR_MINet deWCHAR_MAXafin 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.so32 bits et ajout depread64,pwrite64etftruncate64pour 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 : - 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 utilisestrrchr()au lieu destrchr()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-piepour les cibles Android si ni-shared, ni-staticn'existait. Ce comportement, qui était incorrect, obligeait l'éditeur de liens à signaler que-sharedet-piene pouvaient pas coexister.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);(liste de modifications 91185). - 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.
- Ajout de
Android NDK r9d (mars 2014)
- Modifications importantes
-
- Ajout de la compatibilité avec le compilateur Clang 3.4. L'option
NDK_TOOLCHAIN_VERSION=clangsé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 : La bibliothèque créée est copiée dansTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a. Pour que make se comporte comme prévu, vous ne pouvez pas spécifier à la foisarmeabi-v7aetarmeabi-v7a-harden tant que cibles (c'est-à-dire sur la ligne APP_ABI=). Si vous le faites, l'une d'entre elles sera ignorée. Notez queAPP_ABI=allest toujours équivalent àarmeabi armeabi-v7a x86 mips. - Le script
make-standalone-toolchain.shcopie des bibliothèques supplémentaires dans les répertoires/hard. Ajoutez lesCFLAGSetLFLAGSci-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_ASMFLAGSetEXPORT_ASMFLAGSpour les cibles x86. Le scriptndk-buildutiliseprebuilts/*/bin/yasm*pour créer des fichiersLOCAL_SRC_FILESavec 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++_staticouAPP_STL := c++_shareddansApplication.mk. Vous pouvez effectuer une recompilation à partir de la source viaLIBCXX_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++.
CPLUSPLUS-SUPPORT.html(problème 36496). - Ajoutez
- Ajout de la compatibilité avec le compilateur Clang 3.4. L'option
- 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,_hashlibet_ssl - Linux :
zlib,nis,crypt,_curseset_curses_panel
- Mac OS X :
- Correction de gdbserver
event_getmsg_helperx86 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 dansandroid/asset_manager.hpour le niveau d'API Android 13 et supérieur (problème 64988). - Correction d'un
#includemanquant dansandroid/rect_manager.hpour le niveau d'API Android 14 et supérieur. - Ajout de
JNICALLàJNI_OnLoadet àJNI_OnUnloaddansjni.h. Notez queJNICALLest défini comme__NDK_FPABI__. Pour en savoir plus, consultezsys/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) :
- Ajout de
sys/cachectl.hpour 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.hvia 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_VALUEet__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUEpour le niveau d'API Android 9 ou inférieur. - Ajout de
scalbln,scalblnfetscalblnlàlibm.sox86 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).
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
- Correction d'un
- Correction de gabi++
std::unexpected()pour appelerstd::terminate()afin qu'un gestionnairestd::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 pasonSystemUiVisibilityChangeet ne restaure donc pas le mode immersif.
- Correction du script
ndk-buildpermettant d'ajouter-rpath-link=$SYSROOT/usr/libet-rpath-link=$TARGET_OUTafin d'utiliserld.bfdpour associer des exécutables (problème 64266). - Suppression de
-Bsymbolicde tous les builds STL. - Correction de
ndk-gdb-py.cmdvia la définition deSHELLcomme variable d'environnement au lieu de le transmettre àpython.exe, qui ignore le paramètre (problème 63054). - Correction du script
make-standalone-toolchain.shafin que l'option--stl=stlportcopie les en-têtes gabi++ au lieu de les relier par lien symbolique. Les interfaces systèmecmd.exeet MinGW ne comprennent pas les liens symboliques créés par cygwin.
- Corrections d'en-têtes :
- Autres modifications
-
- Application d'autorisations d'exécution à tous les scripts
*cmdprécédemment destinés à être utilisés uniquement dans l'interface systèmecmd.exe, au cas où les développeurs préfèrent utiliserndk-build.cmddans cygwin plutôt que le scriptndk-buildrecommandé. - Amélioration de la vitesse du script
make-standalone-toolchain.shen le déplaçant au lieu de le copier si le répertoire de destination spécifié n'existe pas.
- Application d'autorisations d'exécution à tous les scripts
Android NDK r9c (décembre 2013)
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-floatavec les fonctions mathématiques__builtin. Pour en savoir plus sur les corrections de-mhard-floatavec STL, veuillez suivre le problème 61784.
- Autres corrections de bugs
-
- Corrections d'en-têtes :
- Remplacement du prototype
pollparpoll(struct pollfd *, nfds_t, int);danspoll.h. - Ajout de
utimensatàlibc.sopour 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
futimensdanslibc.sopour le niveau d'API Android 19. - Ajout des fonctions manquantes
clock_settime()etclock_nanosleep()àtime.hpour 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,etCLOCK_BOOTTIME_ALARMdanstime.h. - Suppression de
CLOCK_REALTIME_HRetCLOCK_MONOTONIC_HR., qui sont obsolètes.
- Remplacement du prototype
- 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_ReleaseStringUTFCharsdans/system/lib/libdvm.soqui provoquait des plantages sur les appareils x86
- Correction des échecs de
ndk-buildqui se produisent dans cygwin lorsque le package NDK est référencé via un lien symbolique. - Correction des échecs de
ndk-build.cmdqui se produisent dans Windowscmd.exelorsqueLOCAL_SRC_FILEScontient des chemins d'accès absolus (problème 69992). - Correction du script
ndk-stackpour 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-stackpour les cibles windows-x64_64 afin qu'elle ne fasse plus correspondre par erreur une ligne de bloc à une ligne de la sectionstack:ne contenant paspc,eipniip. 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.
- Corrections d'en-têtes :
- 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-buildn'essaie pas de rechercherNDK_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 variablesAPP_*figurant dansApplication.mk. APP_ABIpeut désormais être énuméré dans une liste d'éléments séparés par une virgule. 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 scriptndk-stackde 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-jnide façon à indiquerAPP_ABIlors de la compilation. - Utilisation de l'outil
aren mode déterministe (option-D) pour créer des bibliothèques statiques (problème 60705).
- Ajout de
Android NDK r9b (octobre 2013)
- Modifications importantes
-
- Mise à jour de
include/android/*het demath.hpour 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-floatdans l'ABI armeabi-v7a existante. Pour en savoir plus et connaître les restrictions actuelles concernant Clang, consulteztests/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 les activer, définissez
-fdiagnostics-color=auto,-fdiagnostics-color=always,ou exportezGCC_COLORScomme indiqué ci-dessous : Pour en savoir plus, consultez GCC Language Independent Options.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- 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.
- Mise à jour de
- 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.exeWindows 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 :
(problème 58916, problème GCC)internal compiler error: verify_flow_info failed
- Modification du build GDB/ARM de façon à ignorer les données
ARM.exidxpour 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 : (correctif GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- 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
- Autres corrections de bugs
-
- Corrections d'en-têtes
- Correction de
WCHAR_MINetWCHAR_MAXpour 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_SIGNEDpour rétablir l'ancien comportement (problème 57749). - Correction de
include/netinet/tcp.hpour qu'il contienne l'énumération d'étatsTCP_INFO(problème 38881). - Correction de la macro de
cdefs_elh.h_C_LABEL_STRINGde 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
imaxabsetimaxdivde l'en-têteinttypes.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êtebionicstdlib.h.
- Correction de
- Correction du problème de création de
samples/gles3jniavec Clang au niveau d'API Android 11. - Correction de MCLinker de façon à autoriser plusieurs occurrences des options suivantes :
-gc-sectionset--eh-frame-hdr. - Correction de MCLinker de façon à accepter l'option
--no-warn-mismatch. - Modification de l'option
cpu-featuresde 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.clors 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-asafin qu'elle puisse réussir les tests pourssax-instructionsetfenv. - Correction du compilateur GCC 4.6/4.7/4.8 de façon à transmettre l'option
--eh-frame-hdrde 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, consultezNDK-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_subet__atomic_fetch_or. - Correction de l'erreur interne du compilateur Clang 3.3 en cas de
vfprintfpersonnalisé (problème Clang).
- Corrections d'en-têtes
- Autres modifications
-
- Activation d'OpenMP pour tous les builds GCC. Pour utiliser cette fonctionnalité, ajoutez les options suivantes à vos paramètres de compilation :
Pour obtenir des exemples de code, consultezLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp. - Réduction considérable de la taille de
ld.mcld(1,5 Mo au lieu de 3,5 Mo pourld.bfdet de 7,5 Mo pourld.gold), pour un gain de vitesse d'environ 20 %. - Ajout de
LOCAL_CONLYFLAGSetAPP_CONLYFLAGSpour spécifier des options applicables uniquement à C, mais pas à C++. LesLOCAL_CFLAGSetAPP_CFLAGSexistants 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=gnu99peuvent é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.asoient compilés avec-funwind-tablespour 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-sdc1dans 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-plasmapour 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.
- Activation d'OpenMP pour tous les builds GCC. Pour utiliser cette fonctionnalité, ajoutez les options suivantes à vos paramètres de compilation :
Android NDK r9 (juillet 2013)
- Modifications importantes
-
- Ajout de la compatibilité avec Android 4.3 (niveau d'API 18). Pour en savoir plus, consultez
STABLE-APIS.htmlet les nouveaux exemples de code danssamples/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, exportezNDK_TOOLCHAIN_VERSION=4.8ou ajoutez-le dansApplication.mk. - Pour les builds autonomes, utilisez l'option
--toolchain=dansmake-standalone-toolchain.sh. Exemple :
--toolchain=arm-linux-androideabi-4.8
Remarque : L'option
-Wunused-local-typedefsest activée par-Wall. Veillez à ajouter__attribute__((unused))si vous utilisez des assertions au moment de la compilation, commesources/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-accesslors de la compilation pour des noyaux qui ne sont pas compatibles avec cette fonctionnalité. - Pour les builds
- Ajout de la compatibilité avec Clang 3.3. L'option de compilation
NDK_TOOLCHAIN_VERSION=clangsé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.goldest utilisé par défaut lorsqu'il est disponible, vous devez ajouter-fuse-ld=mclddansLOCAL_LDFLAGSouAPP_LDFLAGSpour activer MCLinker. - Ajout de l'outil
ndk-depends, qui affiche les dépendances de la bibliothèque ELF. Pour en savoir plus, consultezNDK-DEPENDS.html(problème 53486).
- Ajout de la compatibilité avec Android 4.3 (niveau d'API 18). Pour en savoir plus, consultez
- 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
-Olors de l'utilisation de Boost 1.52.0 (problème 42891). - Correction de
libc.soet delibc.apour permettre l'utilisation de la fonctionwait4()(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_COMMANDSen raison duquel le fichierlinker.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-gdbde sorte que les actions--startou--launchattendent 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
--nowaitpour 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
stepiaprès une instruction Thumbbx pcoublx pc(problème 56962 et problème 36149). - Correction de MIPS
gdbserverpour qu'il rechercheDT_MIPS_RLD_MAPau lieu deDT_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).
- Correction d'un problème potentiel de gestion des événements dans
- Autres corrections de bugs
-
- Correction du script
ndk-buildpour 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_Exceptionafin 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-buildafin 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 commandendk-build clean(modification 54461 et modification 54480). - Modification de l'option
NDK_ANALYZE=1de façon à réduire son niveau de verbosité. - Correction de
gnu-libstdc++/Android.mkde façon à inclure un cheminbackward/pour les builds utilisant la rétrocompatibilité (problème 53404). - Correction d'un problème faisant que
stlport newrenvoyait parfois des valeurs aléatoires. - Correction de
ndk-gdbde façon à respecter l'ordre deCPU_ABISet non deAPP_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.goldpour fusionner les littéraux de chaîne. - Correction de
ld.goldpour gérer l'alignement des grands symboles. - Mise à jour de
ld.goldpour activer l'option--sort-section=name. - Correction de GCC 4.4.3/4.6/4.7 pour supprimer l'option
-export-dynamicpour les programmes associés de manière statique. GCC n'ajoute plus de section.interppour ces programmes. - Correction d'une erreur de compilation de GCC 4.4.3
stlportconcernant letypedefincohérent de_Unwind_Control_Block(problème 54426). - Correction des scripts
awkpour gérer les fichiersAndroidManifest.xmlcréés sous Windows pouvant contenir des caractères de fin\ret provoquer des erreurs de compilation (problème 42548). - Correction de
make-standalone-toolchain.shde façon à vérifier le répertoireprebuilts/afin de détecter si l'hôte est 32 bits ou 64 bits. - Correction de l'option
-integrated-asde Clang 3.2. - Correction des données de gestionnaire
pr1etpr2du modèle compact Clang 3.2 ARM EHABI. - Ajout de l'option Clang
-mllvm -arm-enable-ehabipour 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-sdkne figure dans le fichier manifeste de l'application (problème 57015).
- Correction du script
- Autres modifications
-
- Corrections d'en-têtes
- Modification des en-têtes pour que
__set_errnosoit une fonction intégrée, étant donné que__set_errnodanserrno.hest obsolète et quelibc.sone l'exporte plus. - Modification de
elf.hpour inclurestdint.h(problème 55443). - Correction de
sys/un.hpour qu'il soit inclus indépendamment des autres en-têtes (problème 53646). - Correction de toute la famille d'API
MotionEvent_getHistoricalpour qu'elle accepteconst AInputEvent* motion_event(problème 55873). - Correction de
malloc_usable_sizepour qu'il accepteconst void*(problème 55725). - Correction de stdint.h pour une meilleure compatibilité avec C99 (modification 46821).
- Modification de
wchar.hde façon à ne pas redéfinirWCHAR_MAXniWCHAR_MIN. - Correction de la déclaration de
<inttypes.h>pour les macrosPRIetSCNliées au pointeur (problème 57218). - Modification de l'en-tête
sys/cdefs.hafin que__WCHAR_TYPE__soit 32 bits pour les niveaux d'API inférieurs à 9, ce qui signifie quewchat_test 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).
- Modification des en-têtes pour que
- 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.shpour prendre en charge la bibliothèquestlporten plus degnustl, lorsque vous spécifiez l'option--stl=stlport. Pour en savoir plus, consultezSTANDALONE-TOOLCHAIN.html. - Mise à jour du script
make-standalone-toolchain.shafin que l'option--llvm-version=crée les scripts$TOOLCHAIN_PREFIX-clanget$TOOLCHAIN_PREFIX-clang++en plus declangetclang++, 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-semanticspour 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-promotionpour 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écuterconst_castpour 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 d'une option
- Ajout de
-mldc1-sdc1aux compilateurs MIPS GCC et Clang. Par défaut, les compilateurs alignent correctement les objets de 8 octets et génèrent les instructionsldc1etsdc1pour 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érationsldc1etsdc1sur la mémoire non alignée. Dans ce cas, utilisez l'option-mno-ldc1-sdc1pour résoudre le problème. - Rétrogradation de la gravité d'un événement d'"avertissement" à "info" si
APP_PLATFORM_LEVELest supérieur àAPP_MIN_PLATFORM_LEVEL.APP_PLATFORM_LEVELpeut être inférieur àAPP_PLATFORMdansjni/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_LEVELest spécifié parandroid:minSdkVersiondans le fichier manifeste de votre application (problème 39752). - Ajout des méthodes
android_getCpuIdArm()etandroid_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-buildafin d'utiliser l'outilas/ldde GCC 4.7 pour la compilation Clang.Remarque : Dans GCC 4.7,
monotonic_clocketis_monotonicont été respectivement renomméssteady_clocketis_steady. - Ajout des avertissements suivants au script
ndk-build:- Ajout d'avertissements si des
LOCAL_LDLIBS/LDFLAGSsont 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/LDFLAGSd'une bibliothèque partagée ou de modules exécutables
- Ajout d'avertissements si des
- Mise à jour des scripts de compilation pour que, si
APP_MODULESn'est pas défini et si seules des bibliothèques statiques sont listées dansAndroid.mk, le script force leur compilation (problème 53502). - Mise à jour de
ndk-buildde façon à accepter les chemins d'accès absolus dansLOCAL_SRC_FILES. - Suppression des exécutables
*-gdbtui, qui sont des doublons des exécutables*-gdbavec l'option-tuiactivé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_OUTpour permettre le remplacement du chemin d'accèslibraries/gdbserveren ignorant la valeur par défaut$PROJECT/libs. Pour en savoir plus, consultezOVERVIEW.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éfinirLOCAL_DISABLE_FORMAT_STRING_CHECKS=truepour la désactiver. Pour en savoir plus, consultezANDROID-MK.html. - Ajout de la compatibilité avec l'impression élégante de STL dans
ndk-gdb-py. Pour en savoir plus, consultezNDK-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.
- Corrections d'en-têtes
Android NDK r8e (mars 2013)
- 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, consultezCHANGES.HTMLetNDK-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.goldest l'éditeur de liens par défaut lorsqu'il est disponible. Vous devez donc activer explicitement MCLinker. Pour en savoir plus, consultezCHANGES.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_LIBRARIESetLOCAL_SHARED_LIBRARIES. Pour en savoir plus, consultezCHANGES.HTML(problème 39378).
- Ajout de l'ensemble de chaînes d'outils hôte 64 bits (suffixe du nom de package
- 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 desteady_clock(problème 39680). - Correction de la chaîne d'outils afin d'activer
_GLIBCXX_HAS_GTHREADSpour 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, fonctiondistance_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_startet à__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
rvalueuniforme 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:linelorsque les symboles contiennent des chemins d'accès longs et indirects aux fichiers (problème 42448). - Correction de
read_program_headerdans GDB pour les exécutables MIPS PIE (modification 49592). - Correction de l'erreur de segmentation de
STLportdansuncaught_exception()(modification 50236). - Correction de l'erreur de bus de
STLportdans la gestion des exceptions en raison d'un accès non aligné deDW_EH_PE_udata2,DW_EH_PE_udata4etDW_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).
- Correction du script de compilation de façon à compiler toutes les chaînes d'outils dans
- Autres corrections de bugs
-
- Correction des en-têtes du NDK :
- Suppression des définitions redondantes de
size_t,ssize_tetptrdiff_t. - Correction de l'en-tête
fenv.hpour MIPS et ARM. - Correction de
stddef.hpour ne pas redéfiniroffsetof, car il existe déjà dans la chaîne d'outils. - Correction de
elf.hafin qu'il contienneElf32_auxv_tetElf64_auxv_t(problème 38441). - Correction des définitions C++
#ifdefdans le fichier d'en-têteOpenSLES_AndroidConfiguration.h(problème 53163).
- Suppression des définitions redondantes de
- Correction de
STLportafin 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
cpufeaturesde façon à ne pas analyser/proc/self/auxv(problème 43055). - Correction de
ld.goldde 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èquelibgcc_sjlj_1.dll. - Correction de Clang 3.1 qui générait une liste de registres incohérente dans
.vsaveet provoquait l'échec de l'assembleur (modification 49930). - Correction de Clang 3.1 pour pouvoir compiler libgabi++ et réussir les tests
test-stlportpour 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
clangetclang++dans le compilateur NDK autonome de façon à détecter-cc1et à ne pas spécifier-targetlorsqu'il est effectivement présent. - Correction de
ndk-buildpour observerNDK_APP_OUTdéfini dansApplication.mk. - Correction de
libc.soetlib.aX86, qui ne disposaient pas des fonctionssigsetjmpetsiglongjmpdéjà déclarées danssetjmp.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-buildsous 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-buildne se compilait pas si le fichier makefile se terminait par un espace blanc dans la définition deLOCAL_PATH(problème 42841).
- Correction des en-têtes du NDK :
- 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_cleanupet__cxa_type_matchpour 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, consultezCHANGES.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
STLportsoit compilé pour ARM en mode Thumb. - Ajout de la compatibilité avec
std::set_new_handlerdans Gabi++ (problème 52805). - Activation de l'appel système
FUTEXdans GNU libstdc++. - Mise à jour de
ndk-buildafin qu'il ne copie plus la bibliothèque statique prédéfinie dans le répertoireobj/local/<abi>/d'un projet (problème 40302). - Suppression de
__ARM_ARCH_5*__dans le script ARMtoolchains/*/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/rsqrtMIPS 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-allet-ftree-loop-linear(informations). - Activation de
pollypour 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
-fltodans 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, carld.goldn'est pas disponible. - Activation de
--pluginet de--plugin-optpourld.golddans GCC 4.6/4.7. - Activation de
--text-reorderpourld.golddans GCC 4.7. - Configuration de GNU libstdc++ avec
_GLIBCXX_USE_C99_MATH, qui annule la définition du scriptisinfdans l'en-tête bionique. Pour en savoir plus, consultezCHANGES.html. - Ajout de
APP_LDFLAGSaux scripts de compilation. Pour en savoir plus, consultezANDROID-MK.html. - Mise à jour des scripts de compilation pour permettre à
NDK_LOG=0de désactiverNDK_LOG. - Mise à jour des scripts de compilation pour permettre à
NDK_HOST_32BIT=0de 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 depentiumproetgenericpari686etatom. - Amélioration des scripts de compilation de la chaîne d'outils :
- Correction d'une condition de concurrence dans
build-gcc.shpour le type de compilationmingw, qui empêchait un grand nombre de processus de compilation parallèles. - Mise à jour de
build-gabi++.shet debuild-stlport.shafin qu'ils puissent désormais s'exécuter à partir du package NDK (problème 52835). - Correction de
run-tests.shdans l'ensemble d'utilitairesMSys. - 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.shvers une version plus récente. - Ajout d'une option permettant de créer
libgnustl_static.aetstlport_static.asans visibilité masquée.
- Correction d'une condition de concurrence dans
Android NDK r8d (décembre 2012)
- 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 variableNDK_TOOLCHAIN_VERSION=4.7ou 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.
- Pour
- Ajout de la prise en charge des exceptions
stlportvia gabi++. Notez que la nouvelle version de gabi++ dépend dedlopenet du code associé. Cela signifie que :- Vous ne pouvez plus créer d'exécutable statique à l'aide de l'option
-staticni inclurelibstlport_static.aà l'aide deAPP_STL := stlport_static. (Vous pouvez toujours utiliser l'option-staticavec 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
-nostdlibet de {-Wl,--no-undefined}, vous devez inclure manuellement l'option-ldl.
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.
- Vous ne pouvez plus créer d'exécutable statique à l'aide de l'option
- 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-allet-fstack-protector-stronglors de l'utilisation du compilateur GCC 4.6 ou version ultérieure.Remarque : Le paramètre
-mstack-protector-guardlui-même n'active aucune option-fstack-protector*. - Ajout de la fonction
android_setCpu()àsources/android/cpufeatures/cpu-features.cafin qu'elle soit utilisée lorsque la détection automatique via/procest impossible sous Android 4.1 ou version ultérieure (problème Chromium 164154).
- 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 :
- 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 :
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.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- 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.1dans Cygwin (problème 39585). - Correction du script
make-standalone-toolchain.shpour 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_ANDROIDBUFFERQUEUESOURCEmanquante 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).
- Correction de la recompilation inutile des fichiers d'objets lors de l'utilisation du script
- Autres corrections de bugs
-
- Corrections apportées aux fichiers d'en-tête du NDK :
- Correction de
__WINT_TYPE__et dewint_tpour 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__danssys/cdefs.h(problème 14627). - Réorganisation des en-têtes dans
byteswap.hetdirent.h. - Correction de
limits.hpour inclurepage.h, qui fournit des paramètresPAGE_SIZE(problème 39983). - Correction du type renvoyé par
glGetAttribLocation()etglGetUniformLocation(): remplacement deintparGLint. - Correction de la constante
__BYTE_ORDERpour les builds x86 (problème 39824).
- Correction de
- Correction du script
ndk-buildde façon à ne pas écraser-Ospar-O2pour les builds ARM. - Correction des scripts de compilation pour permettre l'écrasement des paramètres
HOST_AWK,HOST_SEDetHOST_MAKE. - Correction du problème affectant
ld.golddans les buildsfsck_msdosassociant 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.amanquant lors de l'association de bibliothèques partagées.
- Corrections apportées aux fichiers d'en-tête du NDK :
- 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
SIGILLpour les chemins sans instruction return. - Mise à jour de
make-standalone-toolchain.shde 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.asoit compilée et placée danslib32/.
Android NDK r8c (novembre 2012)
- 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, exportezNDK_TOOLCHAIN_VERSION=clang3.1ou ajoutez ce paramètre de variable d'environnement àApplication.mk. - Pour les builds autonomes, ajoutez
--llvm-version=3.1àmake-standalone-toolchain.shet remplacezCCetCXXpar<tool-path>/bin/clanget<tool-path>/bin/clang++dans votre fichier makefile. Pour en savoir plus, consultezSTANDALONE-TOOLCHAIN.html.
Remarque : Cette fonctionnalité est expérimentale. Veuillez l'essayer et signaler tout problème.
- Pour
- Ajout de l'éditeur de liens Gold
ld.goldpour 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 liensld.bfden ajoutantLOCAL_LDFLAGS += -fuse-ld=bfdàAndroid.mkou 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]etndk-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-13dansAPP_PLATFORM,project.propertiesoudefault.propertiessoient associés àandroid-9au lieu deandroid-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
-fPIEpour les exécutables indépendants de la position (PIE, position-independent executables). Une nouvelle optionAPP_PIEvous permet de contrôler ce comportement. Pour en savoir plus, consultezAPPLICATION-MK.html.Remarque : Tous les niveaux d'API supérieurs à 14 sont toujours associés à
platforms/android-14, et aucun nouveauplatforms/android-Nn'a été ajouté. - Modification de
ndk-buildpour générer des avertissements si le niveau d'API ajusté est supérieur àandroid:minSdkVersiondans le fichierAndroidManifest.xmldu projet.
- Modification de la logique de compilation pour que les projets spécifiant
- Mise à jour de la bibliothèque d'aide
cpu-featurespour inclure davantage de fonctionnalités spécifiques à ARM. Pour en savoir plus, consultezsources/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 etcrt*.osont correctement associés. - Ajout de
-mfpu=vfpv3-d16àndk-buildau lieu de l'option-mfpu=vfputilisée dans les versions précédentes.
- Modification de ce type de compilation afin de transmettre le paramètre
- 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 :
- 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.shavec 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++.asont désormais conservés lors de la copie.
- Suppression du
\rredondant dans le fichier Windows prédéfiniecho.exe. Ce\rredondant provoquait l'échec degdb.setupdans 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 nomstypeinfopar défaut. Pour en savoir plus, consulteztoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo(problème 22165). - Correction du problème lié au contexte
nulldans GCC 4.6cp/mangle.c::write_unscoped_name, qui pouvait planter lorsque le contexte étaitnullet déréférencé dansTREE_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 deSTLport, 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-psabipour éviter cet avertissement n'est plus nécessaire. - Correction d'un problème se produisant lorsqu'un projet comportant les suffixes
.armou.neondansLOCAL_SRC_FILESutilisait égalementAPP_STL. AvecAPP_STL, le scriptndk-buildrecherche les fichiers C++ dansLOCAL_SRC_FILESavant d'ajouter les chemins STLheader/libà la compilation.ndk-builda été modifié de façon à exclure les suffixes.armet.neonavant la recherche. Sinon, les éléments deLOCAL_SRC_FILEStels quemyfile.cpp.arm.neonne seraient pas compilés en code C++. - Correction de
binutils-2.21/ld.bfdpour permettre l'association d'objets provenant d'anciens binutils sanstag_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/ldassocie un objet prédéfini avec le plus récentbinutils-2.21. - Correction d'un problème lié à la compilation GNU
stdc++avec à la fois-mthumbet-march=armv7-avia la modification demake-standalone-toolchain.shde façon à insérerheaders/libsdans le sous-répertoirearmv7-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 depuischar(problème GCC 50099). - Correction de l'erreur interne du compilateur en cas de valeur de décalage négative (problème GCC).
- Correction d'ARM GCC 4.4.3/4.6
- Correction de
-fstack-protectorpour X86, qui est également l'option par défaut pour la cible ABIndk-buildx86. - Corrections propres à MIPS :
- Correction du boutisme de
STLportvia la définition de_STLP_LITTLE_ENDIANsur 1 lors de la compilation de MIPSlibstlport_*. - Correction du problème lié à GCC
__builtin_unreachablelors de la compilation de LLVM (problème GCC 54369). - Rétroportage de la correction du processus de compilation
cc1utilisant 100 % du processeur (problème GCC 50380).
- Correction du boutisme de
- 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
gdbavec une dépendance étroite à une version spécifique de Python (problème 36120). - Correction de
ndk-gdblorsqueAPP_ABIcontientallet 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
solibsactuelles si l'éditeur de liens est cohérent. Cette modification accélère la gestion des événementssolib(problème 37677). - Ajout d'un correctif afin d'effectuer plusieurs tentatives de détection de points d'arrêt
solib. GDB relance désormaisenable_break()à chaque appel desvr4_current_sos(), jusqu'à ce que l'opération réussisse (modification 43563). - Correction d'un problème qui empêchait
gdbde s'arrêter aux points d'arrêt placés dans les bibliothèquesdlopen-ed(problème 34856). - Correction de
SIGILLdans l'éditeur de liens dynamique lors de l'appel dedlopen()sur un système où les symboles ont été supprimés de/system/bin/linkeret oùrtld_db_dlactivity()est implémenté en modeThumb, en raison de la non-préservation duLSBdesym_addr(problème 37147).
- 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
- 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
- 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
__unusedpar__linux_unuseddanslinux/sysctl.hetlinux/icmp.hpour éviter les conflits avec#define __unuseddanssys/cdefs.h. - Correction de
fenv.hpour les fonctions C imbriquées avec__BEGIN_DECLSet__END_DECLS. - Suppression des fonctions non mises en œuvre dans
malloc.h. - Correction de la définition
stdint.hdeuint64_tpour les compilateurs ANSI (problème 1952). - Correction des macros de préprocesseur dans
<arch>/include/machine/*. - Remplacement de
link.hpour 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_MAXetULONG_LONG_MAXde<pthread.h>vers<limits.h>.
- Correction du code
- 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_exceptionn'ont lieu que lorsqueSTLportest 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.sopour qu'il n'exporte pasatexit()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 parcrtbegin_*.o.Si votre projet est associé à l'aide des options
-nostdlib -Wl,--no-undefined, vous devez fournir votre propre__dso_handle, carcrtbegin_so.on'est pas associé dans ce cas. Le contenu de__dso_handlen'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
objdumppour les entréespltafin de générer un codefunction@pltplus lisible. - Suppression des symboles suivants (introduits dans GCC 4.6
libgcc.a) de la bibliothèquelibc.sode la plate-forme X86 :__aeabi_idiv0,__aeabi_ldiv0,__aeabi_unwind_cpp_pr1et__aeabi_unwind_cpp_pr2. - Suppression des
.ctors,.dtorset.eh_framenon utilisés dans MIPScrt*_so.S. - Mise à jour de
ndk-gdbafin qu'il n'utilise que la dernière ligne de sortie dendk-buildDUMP_XXXX. Cette modification garantit que siApplication.mkouAndroid.mkgénère une sortie avec la syntaxe$(info ...), elle n'est pas injectée dans le résultat deDUMP_XXXX(en savoir plus).
- Correction des en-têtes du NDK :
- Autres modifications
-
- Suppression des en-têtes
arch-x86etarch-mipsdeplatforms/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-buildpour reconnaître davantage d'extensions de fichiers C++ par défaut :.cc .cp .cxx .cpp .CPP .c++ .C. Vous pouvez toujours utiliserLOCAL_CPP_EXTENSIONpour écraser ces paramètres d'extension. - Correction d'un problème dans
samples/san-angelesqui 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-7native-activity: android-9 remplacée par android-10native-audio: android-9 remplacée par android-10native-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 danscrtbegin_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-tagsont désormais obsolètes. - Ajout d'un script
run-tests-all.shqui appellerun-tests.shetstandalone/run.shavec différentes conditions. Le scriptrun-tests.shs'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.
- Suppression des en-têtes
Android NDK r8b (juillet 2012)
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_COMMANDSdans 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,-det-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 quegdbsur l'hôte puisse définir un point d'arrêt dans__dl_rtld_db_dlactivityet tenir compte de l'activité de l'éditeur de liens (par exemple, analyser de nouveau les symbolessoliblorsquedlopen()est appelé).
- Mise à jour de l'outil pour transmettre les options
- Correction de
ndk-build cleansous Windows, qui ne parvenait pas à supprimer./libs/*/lib*.so. - Correction de
ndk-build.cmdpour renvoyer une valeurERRORLEVELnon nulle en cas d'échec demake. - Correction de
libc.sopour arrêter l'exportation incorrecte des symboles__exidx_startet__exidx_end. - Correction de
SEGVlors du déroulement de la pile au-delà de__libc_initpour ARM et MIPS.
- Correction des problèmes liés à
- Modifications importantes
-
- Ajout de la chaîne d'outils GCC 4.6 (
binutils2.21 avecgoldet GDB 7.3.x) pour qu'elle coexiste avec la chaîne d'outils GCC 4.4.3 d'origine (binutils2.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.3dansApplication.mk. - La compatibilité avec l'éditeur de liens
goldn'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, ajoutezLOCAL_LDLIBS += -fuse-ld=golddansAndroid.mk. - Les programmes compilés avec
-fPIEnécessitent le nouveauGDBpour le débogage, y compris les binaires dans les images système Android 4.1 (niveau d'API 16). - L'outil
binutils2.21ldcontient 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
strippour conserver les membresp_alignetp_flagsd'origine dans la sectionGNU_RELRO, s'ils sont valides. Sans ce correctif, les programmes créés avec-fPIEne peuvent pas être débogués (en savoir plus).
- Correction de
- Désactivation de l'optimisation de
sincos()pour assurer la compatibilité avec les anciennes plates-formes.
- 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
- Mise à jour des options de compilation pour activer le bit Never eXecute (NX) et les protections
relro/bind_nowpar 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 relroet 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 :
- Désactivez la protection NX en définissant l'option
--execstackpour l'assembleur et-z execstackpour l'éditeur de liens. - Désactivez le renforcement des données internes en définissant les options
-z norelroet-z lazypour l'éditeur de liens. - Désactivez ces protections dans le fichier NDK
jni/Android.mken 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. - Désactivez la protection NX en définissant l'option
- Ajout de
- Ajout d'éléments de branding pour les exécutables Android avec la section
.note.ABI-tag(danscrtbegin_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 */ }
- Ajout de la chaîne d'outils GCC 4.6 (
- Autres corrections de bugs
-
- Correction du problème de troncation du réadressage de
mips-linux-gnupour l'ajuster àR_MIPS_TLS_LDM(en savoir plus). - Correction des erreurs de segmentation de l'outil
ldlors de l'utilisation de--gc-sections(en savoir plus). - Correction du problème de comptage de
GOT_PAGEpour 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
.dynamicvers 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-shareddes 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-fpicsi compatible). Si vous ne spécifiez pas-mshared,-fpic,-fPIC,-fpieou-fPIEde 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-shareddans ce cas. - Correction des noms de package incorrects dans les exemples
hello-jniettwo-libsafin que le projettestssous-jacent puisse être compilé.
- Correction du problème de troncation du réadressage de
- Autres modifications
-
- Modification de l'emplacement des binaires :
- Déplacement de
gdbserverdetoolchain/<arch-os-ver>/prebuilt/gdbserverversprebuilt/android-<arch>/gdbserver/gdbserver. - Changement de nom du préfixe de la chaîne d'outils x86 :
i686-android-linux-devienti686-linux-android-. - Déplacement de
sources/cxx-stl/gnu-libstdc++/includeet delibverssources/cxx-stl/gnu-libstdc++/4.6en cas de compilation avec GCC 4.6, ou verssources/cxx-stl/gnu-libstdc++/4.4.3en cas de compilation avec GCC 4.4.3. - Déplacement de
libbfd.aet delibintl.adelib/verslib32/.
- Déplacement de
- Ajout et amélioration de divers scripts dans la chaîne d'outils de recompilation et de test NDK :
- Ajout de
build-mingw64-toolchain.shpour 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.shgrâce à l'utilisation de la commandeclone, la commandecheckoutn'é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.shetbuild-host-gdb.sh. - Ajout de
tests/check-release.shpour 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.
- Ajout de
- Suppression de l'en-tête
if_dl.hde toutes les plates-formes et architectures. Les élémentsAF_LINKetsockaddr_dlqu'il décrit sont propres à BSD (autrement dit, ils n'existent pas sous Linux).
- Modification de l'emplacement des binaires :
Android NDK r8 (mai 2012)
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.htmldans 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 deAPP_ABIdans votre fichierApplication.mk. Par exemple, la ligne suivante indique àndk-buildde 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.mkpour compiler du code machine MIPS. - Vous pouvez créer une chaîne d'outils MIPS autonome à l'aide de l'option
--arch=mipslorsque vous appelezmake-standalone-toolchain.sh. Pour en savoir plus, consultezdocs/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.
- 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
- 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 basebvers la classe dérivéeDé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.shde copierlibsupc++.*.
- Correction d'une faute de frappe dans l'implémentation GAbi++ faisant que le résultat de
- Autres corrections de bugs
-
- Correction de
ndk-build.cmdpour garantir le bon fonctionnement dendk-build.cmdmême si l'utilisateur a redéfini la variable d'environnementSHELL, qui peut être modifiée lors de l'installation de divers outils de développement dans les environnements Windows.
- Correction de
Android NDK r7c (avril 2012)
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).
- 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,
- 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 parndk-gdb. - Ajout de la possibilité de créer des modules avec des centaines, voire des milliers de fichiers sources en définissant
LOCAL_SHORT_COMMANDSsurtruedans votre fichierAndroid.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.
- Ajout de la compatibilité avec les répertoires de sortie personnalisés via la variable d'environnement
- Autres corrections de bugs
-
- Correction de la mise en œuvre de
android_getCpuCount()dans la bibliothèque d'aidecpufeatures. 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.
- Correction de la mise en œuvre de
Android NDK r7b (février 2012)
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.hpour é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, consultezdocs/ANDROID-ATOMICS.html. - Rétablissement de
binutils2.19 pour corriger les problèmes de débogage qui se produisaient dans NDK r7 (qui était passé àbinutils2.20.1). - Correction de
ndk-buildsous Linux 32 bits. Suite à une erreur de packaging, une version 64 bits de l'exécutableawkavait été placée sousprebuilt/linux-x86/bindans 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.
- Suppression d'un bug de boucle infinie/débordement de pile qui se produisait lors d'une tentative d'appel de
- 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 GNUlibstdc++C++). Utilisez-lgnustl_sharedpour 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_sharedsur Cygwin. L'éditeur de liens signalait quelibsupc++.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.
- Mise à jour de
- 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_FEATURESsur'exceptions','rtti'ou les deux dans votre fichierApplication.mk. Pour en savoir plus, consultezdocs/APPLICATION-MK.html.
- Activez les exceptions et/ou RTTI de manière explicite dans vos modules ou dans
ndk-gdbfonctionne 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é parps, 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_MODEet 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
memmoveau lieu dememcpydansstring::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-featuresa été mise à jour pour indiquer trois fonctionnalités de processeur x86 facultatives (SSSE3,MOVBEetPOPCNT). Pour en savoir plus, consultezdocs/CPU-FEATURES.html. docs/NDK-BUILD.htmla été mis à jour afin d'indiquerNDK_APPLICATION_MKau lieu deNDK_APP_APPLICATION_MKpour la sélection d'un fichierApplication.mkpersonnalisé.- Cygwin :
ndk-buildne 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
/homeen\\server\subdirau lieu deC:\Some\Dir.
- lorsque le préfixe du lecteur Cygwin n'était pas
- Cygwin :
ndk-buildn'essaie pas d'utiliser les outils Windows natifs sous$NDK/prebuilt/windows/binavec certaines versions de Cygwin et/ou GNU Make.
- Lorsque votre application utilise l'environnement d'exécution GNU
Android NDK r7 (novembre 2011)
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, consultezdocs/openmaxal/index.htmlet 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.htmlet http://www.khronos.org/opensles/.
- 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
- Ajout de la compatibilité avec CCache. Pour accélérer les recompilations volumineuses, définissez la variable d'environnement
NDK_CCACHEsurccache(ou le chemin d'accès à votre binaireccache). Lorsqu'il est déclaré, le système de compilation NDK utilise automatiquement CCache lors de la compilation des fichiers sources. 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_ABIsurallpour 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 fichierApplication.mkcorrespond à cette version :APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Cela fonctionne également si vous définissez
APP_ABIlorsque vous appelezndk-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 fichierApplication.mk file. Exemple :ndk-build APP_ABI=all
- Ajout d'une variable
LOCAL_CPP_FEATURESdansAndroid.mkpour 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, consultezdocs/ANDROID-MK.htmletdocs/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 appelezndk-buildà partir d'un sous-répertoire de l'arborescence de votre projet ou si vous définissezNDK_PROJECT_PATHpour qu'il pointe vers un répertoire spécifique.
- Ajout des API NDK officielles pour Android 4.0 (niveau d'API 14), ce qui ajoute les fonctionnalités natives suivantes à la plate-forme :
- Fonctionnalités expérimentales
-
Vous pouvez désormais compiler vos fichiers sources NDK sous Windows sans Cygwin en appelant le script
ndk-build.cmdsur la ligne de commande à partir du chemin d'accès à votre projet. Le script utilise exactement les mêmes arguments que le scriptndk-buildd'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-gdbne 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>) siAPP_MODULESn'est pas défini dans votre fichierApplication.mk. Par exemple, si un module de premier niveaufooimporte un modulebar,libfoo.soetlibbar.sosont tous deux copiés dans l'emplacement d'installation. Auparavant, seullibfoo.soétait copié, sauf si vous aviez également listébardansAPP_MODULES. Si vous définissezAPP_MODULESde manière explicite, le comportement reste inchangé. ndk-gdbfonctionne 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
fooimporte la bibliothèque statiquebarqui importe la bibliothèque statiquezoo,libfoo.soest désormais associé à la fois àlibbar.aet àlibzoo.a.
- Les bibliothèques partagées importées sont désormais installées par défaut à l'emplacement d'installation cible (
- 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 documentdocs/CPLUSPLUS-SUPPORT.htmlmis à jour. - Ajout d'un environnement d'exécution compatible avec C++ nommé
gnustl_sharedet correspondant à la version de bibliothèque partagée de GNU libstdc++ v3 (licence GPLv3). Pour en savoir plus, consultezdocs/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 foisfoo.cppetbar.cxxen 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()ouglGetProcAddress(). La liste suivante recense les nouvelles extensions compatibles :- GLES 1.x
-
GL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_NV_system_time
Android NDK r6b (août 2011)
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/includepour les builds x86. Pour en savoir plus, consultez le bug. - Correction des définitions de
ptrdiff_tetsize_tdans les systèmes x86 spécifiques lorsqu'ils sont utilisés avec la chaîne d'outils autonome x86.
- Correction du build lorsque
Android NDK r6 (juillet 2011)
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.htmldans 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_ABIdans votre fichierApplication.mkpour créer des builds compatibles avec les plates-formes x86. Par exemple, la ligne suivante indique àndk-buildde 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.mkpour 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.3lorsque vous appelezmake-standalone-toolchain.sh. Pour en savoir plus, consultezdocs/STANDALONE-TOOLCHAIN.html. - Le nouvel outil
ndk-stackvous permet de convertir les traces de la pile danslogcatqui 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, consultezdocs/NDK-STACK.html.
- 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
- Autres modifications
arm-eabi-4.4.0, qui était obsolète depuis NDK r5, a été supprimé de la distribution du NDK.
Android NDK r5c (juin 2011)
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_LIBRARIESde fonctionner correctement avec la nouvelle chaîne d'outils et ajout d'une documentation à ce sujet dansdocs/ANDROID-MK.html. - Correction d'un bug qui provoquait le plantage du code associé à
gnustl_staticlors 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ètrehistory_indexdans 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-moduleaffiche désormais la liste des répertoires concernés par la recherche. Cela vous permet de vérifier que la définition deNDK_MODULE_PATHutilisée par le système de compilation est correcte. - En cas de réussite,
import-moduleaffiche désormais dans le journal le répertoire où le module a été trouvé (visible avecNDK_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 deadb shellet amélioration des messages d'erreur.<pthread.h>: correction de la définition dePTHREAD_RWLOCK_INITIALIZERpour 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 dansbuild/core/build-binary.mk). - Correction d'un bug qui empêchait la compilation des fichiers d'assemblage
.s(les fichiers.Sne présentaient aucun problème).
- Les fichiers objets sont désormais toujours associés dans l'ordre dans lequel ils figurent dans
Android NDK r5b (janvier 2011)
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++. le
- 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éfinissezNDK_USE_CYGPATH=1dans votre environnement pour utiliser à nouveaucygpath -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_PATHde fonctionner correctement lorsqu'elle contenait plusieurs répertoires séparés par un signe deux-points. - Le script
prebuilt-common.shcontient 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_ADDRSTRLENa été ajoutée à<netinet/in.h>. - Les déclarations manquantes pour
IN6_IS_ADDR_MC_NODELOCALetIN6_IS_ADDR_MC_GLOBALont été ajoutées à<netinet/in6.h>. - "asm" a été remplacé par "__asm__" dans
<asm/byteorder.h>pour permettre la compilation avec-std=c99.
Android NDK r5 (décembre 2010)
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
cpufeaturespour 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-plasmaetnative-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.
Android NDK r4b (juin 2010)
- 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'ABIarmeabiexistante 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èquecpufeatures, 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
.apkfinal 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.
- Ajout d'un système de compilation simplifié via la nouvelle commande de compilation
Android NDK r3 (mars 2010)
- 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.
Android NDK r2 (septembre 2009)
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 objetGLSurfaceView.
Android NDK r1 (juin 2009)
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.