Cette page fournit des informations sur les modifications apportées à toutes les versions stables du NDK qui ont été publiées. Pour télécharger la dernière version stable du NDK ou toute version bêta actuellement disponible, consultez la page Téléchargements de NDK.
Consultez le groupe Google android-ndk-announce pour obtenir des informations plus complètes et abonnez-vous pour recevoir des annonces de versions.
Android NDK r27 LTS (juillet 2024)
Journal des modifications- Téléchargements
-
- Les téléchargements correspondant à cette version sont disponibles sur cette page.
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-gdb
utilise LLDB par défaut. - NDK r23 est la dernière version acceptant les appareils non compatibles avec Neon. À partir de NDK r24, les bibliothèques armeabi-v7a de sysroot intégreront Neon. Comme les appareils non compatibles avec Neon sont très peu nombreux et très anciens, cela ne fait aucune différence pour la plupart des applications, sauf en ce qui concerne l'amélioration des performances.
- Jelly Bean (API 16, 17 et 18) n'est pas compatible avec la prochaine version du NDK. L'OS minimal accepté par NDK r24 est KitKat (niveau d'API 19).
-
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::filesystem
est désormais assurée. Il existe deux problèmes connus :-
Problème 1258 : il est possible que
std::filesystem::perm_options::nofollow
ne soit pas appliqué sur les anciens appareils. -
Problème 1260 :
std::filesystem::canonical
indique à tort que l'opération a réussi si un chemin d'accès inexistant lui est transmis sur les anciens appareils.
-
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=lld
lors de l'association. Notez que le problème 843 affecte les builds utilisant LLD avec binutils trip et objcopy plutôt que llvm-strip et llvm-objcopy. -
Les anciens chemins d'installation des chaînes d'outils seront supprimés dans les prochaines versions. Ces chemins d'accès sont obsolètes depuis NDK r19 et occupent un espace considérable dans le NDK. Les chemins supprimés seront les suivants :
- platforms
- sources/cxx-stl
- sysroot
- toolchains (sauf toolchains/llvm)
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=lld
lors de l'association. - À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
- Des API Android Q ont été ajoutées.
-
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=lld
lors de l'association. Remarque : LLD n'est pas compatible avec les symboles compressés sous Windows pour le moment (problème 888). Clang ne peut pas non plus générer de symboles compressés sous Windows, ce qui peut poser problème lorsque vous utilisez des artefacts créés sous Darwin ou Linux. - À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
-
Problème 780 : les chaînes d'outils autonomes ne sont plus nécessaires. Clang, binutils, sysroot et les autres composants de chaîne d'outils sont désormais tous installés dans
$NDK/toolchains/llvm/prebuilt/<host-tag>
et Clang les détecte automatiquement. Au lieu de créer une chaîne d'outils autonome pour l'API 26 ARM, appelez directement le compilateur à partir du NDK :$ $NDK/toolchains/llvm/prebuilt/
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/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
ne sera pas supprimé. Il est désormais inutile et générera un avertissement avec les informations ci-dessus, mais il restera en place afin de préserver les workflows existants. Si vous utilisez ndk-build, CMake ou une chaîne d'outils autonome, votre workflow ne devrait pas changer. Cette modification est significative pour les responsables de systèmes de compilation tiers, qui doivent désormais être en mesure de supprimer du code propre à Android. Pour en savoir plus, consultez le document Build System Maintainers Guide. - ndk-depends a été supprimé. Nous pensons que ReLinker constitue une meilleure solution pour les problèmes de chargement de bibliothèques natives sur les anciennes versions d'Android.
- Problème 862 : les scripts de wrapper GCC qui effectuaient une redirection vers Clang ont été supprimés, car ils ne sont pas suffisamment fonctionnels pour constituer une alternative satisfaisante.
-
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=lld
lors de l'association. - gnustl, gabi++ et stlport ont été supprimés.
- La compatibilité avec ICS (android-14 et android-15) n'est plus assurée. Les applications qui utilisent des exécutables n'ont plus besoin de fournir à la fois un exécutable PIE et non-PIE.
- À partir d'août 2019, vous devrez proposer une version 64 bits lorsque vous importerez un APK sur le Play Store. Procédez au portage de vos applications dès maintenant afin d'éviter les surprises le moment venu. Pour en savoir plus, consultez cet article de blog.
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_PLATFORM
est inférieure àandroid-14
,android-14
est utilisé à la place. - Dans le NDK, CMake est désormais compatible avec l'exécution de code assembleur écrit en YASM pour l'exécution sur des architectures x86 et x86-64. Pour en savoir plus, consultez Compiler du code assembleur.
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_cast
manquants.
-
Autres corrections pour les
- NDK
-
NDK_TOOLCHAIN_VERSION
est désormais défini par défaut sur Clang.- libc++ a été mise à jour vers la version r263688.
- Nous avons nettoyé pratiquement tous les composants en amont. Cela devrait permettre de supprimer plusieurs bugs, mais nous devons encore nettoyer libandroid_support avant de le recommander par défaut.
-
make-standalone-toolchain.sh
est désormais un simple wrapper pour la version Python de l'outil. Il existe quelques différences de comportement. Pour en savoir plus, consultez le message de commit. - Certaines bibliothèques correspondant à des ABI non compatibles ont été supprimées (mips64r2, mips32r6, mips32r2 et x32). Il en reste peut-être quelques-unes.
- Les problèmes liés à crtbegin_static.o faisant qu'il manquait une fonction atexit au moment de l'association lors de la création d'un exécutable statique pour ARM android-21 ou version supérieure ont été résolus : consultez le problème 132.
- Un fichier de chaîne d'outils CMake a été ajouté dans build/cmake/android.toolchain.cmake.
- Problèmes connus
-
- Cette section n'a pas vocation à dresser la liste exhaustive de tous les bugs en attente de résolution.
- Les chaînes d'outils autonomes qui utilisent libc++ et GCC ne fonctionnent pas. Il semble s'agir d'un bug dans GCC. Pour en savoir plus, consultez le message de commit.
- Les en-têtes et les bibliothèques Bionic pour Marshmallow et N ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Lollipop (sans que cela soit une régression par rapport à la version r11).
- Les outils RenderScript sont absents (sans que cela soit une régression par rapport à la version r11) : consultez le problème 7.
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-build
utilise Clang dans la version r13. Nous allons supprimer GCC dans une prochaine version. - Le script
make-standalone-toolchain.sh
sera supprimé dans la version r13. Assurez-vous quemake_standalone_toolchain.py
répond à vos besoins. - Signalez les problèmes sur GitHub.
- Nous avons corrigé
ndk-gdb.py
(problème 118). -
Nous avons mis à jour
NdkCameraMetadataTags.h
afin qu'il ne contienne plus de valeur d'énumération non valide. - Nous avons corrigé un bug dans ndk-build qui générait des avertissements erronés pour les bibliothèques statiques utilisant libc++. Pour en savoir plus sur cette modification, consultez les commentaires sur cette page.
- Les en-têtes OpenSLES ont été mis à jour pour android-24.
- NDK
- Nous n'assurons plus la compatibilité avec l'ABI armeabi-v7a-hard. Pour en savoir plus, consultez cette explication.
- Tous les sysroots correspondant à des niveaux de plate-forme antérieurs à Gingerbread ont été supprimés. Nous n'assurons plus leur compatibilité depuis la version 11, mais nous n'avions pas pris le temps de les supprimer.
- La gestion des exceptions lors de l'utilisation de c++_shared sur ARM32 fonctionne désormais dans la plupart des cas. Le dérouleur est désormais associé à chaque objet associé plutôt que directement à libc++. Pour en savoir plus sur cette gestion des exceptions, consultez les problèmes connus.
- Les options de compilation par défaut ont été réduites
(problème 27).
- 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-info
a été activé par défaut pour les versions de débogage Clang. Cette modification doit améliorer le débogage avec LLDB.--build-id
est désormais activé par défaut.- L'ID de build s'affiche désormais dans les rapports sur les plantages natifs afin que vous puissiez facilement identifier la version de votre code qui était en cours d'exécution.
NDK_USE_CYGPATH
ne devrait plus causer de problèmes avec libgcc (problème 195486 pour Android).- Les options
-Wl
,--warn-shared-textrel
et-Wl,--fatal-warnings
sont désormais activées par défaut. Si vous avez partagé des réadressages de code, votre application ne peut pas se charger sous Android 6.0 (niveau d'API 23) ou version ultérieure. Le réadressage de code n'a jamais été autorisé pour les applications 64 bits. - Les en-têtes précompilés devraient mieux fonctionner (problème 14 et problème 16).
- Les bibliothèques STL ARM (autres que thumb) inaccessibles ont été supprimées.
- La compatibilité avec Vulkan a été ajoutée à android-24.
- L'API Choreographer a été ajoutée à android-24.
- Des API
libcamera2
ont été ajoutées pour les appareils avec un niveau de matérielINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ou supérieur. Pour en savoir plus, consultez la page CameraCharacteristics. - Clang
- Mise à jour de Clang vers la version 3.8svn (r256229, build 2812033).
- Les exécutables
clang.exe
etclang++.exe
du 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-plt
afin de corriger une erreur interne de l'éditeur de liens qui se produit lors de l'association de binaires arm32 très volumineux. - Correction de bouchons d'exécution incorrects pour AArch64. Ceux-ci entraînaient un calcul incorrect des adresses de renvoi pour les objets partagés dynamiques (DSO, Dynamic Shared Object) très volumineux.
- Introduction de l'option par défaut
--no-apply-dynamic
pour contourner un bug de l'éditeur de liens dynamique pour les versions d'Android plus anciennes. - NDK r11 KI pour
dynamic_cast
ne fonctionne pas avec Clang. Nous avons corrigé les problèmes liés à x86, àstlport_static
et à l'optimisation. - GDB
- Mise à jour vers GDB 7.11. Pour en savoir plus, consultez la page GDB News.
- Correction de bugs pour
ndk-gdb.py
. - Problèmes connus
- ASAN x86 ne fonctionne toujours pas. Pour en savoir plus, consultez la discussion sur cette liste de modifications.
- Le déroulement d'exception avec
c++_shared
ne fonctionne toujours pas avec ARM sous Android 2.3 (niveau d'API 9) ou Android 4.0 (niveau d'API 14). - Les en-têtes et les bibliothèques Bionic pour Android 6.0 (niveau d'API 23) et Android 7.0 (niveau d'API 24) ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Android 5.0 (niveau d'API 21) (sans que cela soit une régression par rapport à la version r11).
- Les outils RenderScript sont absents (sans que cela soit une régression par rapport à la version r11) (problème 7).
- Ce journal des modifications n'a pas vocation à dresser la liste exhaustive de tous les bugs en attente de résolution.
__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-build
utilisera Clang par défaut dans une prochaine version. GCC sera supprimé dans une version ultérieure. - Le script
make-standalone-toolchain.sh
sera supprimé dans une prochaine version. Si vous utilisez ce script, veuillez prévoir une migration versmake_standalone_toolchain.py
dès que possible. - NDK
- Suppression de la compatibilité avec l'ABI armeabi-v7a-hard. Pour une explication, consultez la documentation.
- Suppression de tous les sysroots pour les niveaux de plate-forme antérieurs à Android 2.3 (niveau d'API 9). Nous n'assurons plus leur compatibilité depuis NDK r11, mais nous n'avions pas pris le temps de les supprimer.
- Mise à jour de la gestion des exceptions lors de l'utilisation de c++_shared sur ARM32 afin qu'elle fonctionne dans la plupart des cas (consultez Problèmes connus). Le dérouleur est désormais associé à chaque objet associé plutôt que directement à libc++.
- Réduction des options de compilation par défaut (problème 27 du NDK). Vous pouvez consulter les détails de cette mise à jour dans la modification 207721.
- Ajout d'une implémentation des chaînes d'outils autonomes pour Python dans
build/tools/make_standalone_toolchain.py
. Sous Windows, vous n'avez plus besoin de Cygwin pour utiliser cette fonctionnalité. Notez que le type bash sera supprimé dans une prochaine version. Veuillez donc tester dès maintenant la nouvelle fonctionnalité. - Configuration des versions de débogage Clang pour que l'option
-fno-limit-debug-info
soit activée par défaut. Cette modification améliore le débogage avec LLDB. - Activation de
--build-id
comme option par défaut. Cette option permet d'afficher un identifiant dans les rapports sur les plantages natifs afin que vous puissiez facilement identifier la version de votre code qui était en cours d'exécution. - Correction du problème lié à
NDK_USE_CYGPATH
afin qu'il ne provoque plus de problèmes avec libgcc (problème 195486). - Activation des options suivantes par défaut :
-Wl,--warn-shared-textrel
et-Wl,--fatal-warnings
. Si vous avez partagé des réadressages de code, votre application ne se charge pas sous Android 6.0 (niveau d'API 23) ou version ultérieure. Notez que cette configuration n'a jamais été autorisée pour les applications 64 bits. - Correction de quelques problèmes pour améliorer le fonctionnement des en-têtes précompilés (problème 14 et problème 16 du NDK).
- Les bibliothèques STL ARM (autres que thumb) inaccessibles ont été supprimées.
- La compatibilité avec Vulkan a été ajoutée à android-24.
- L'API Choreographer a été ajoutée à android-24.
- Ajout des API libcamera2 pour les appareils compatibles avec le niveau de fonctionnalité
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ou supérieur. Pour en savoir plus, consultez la documentation de référence surCameraCharacteristics
. - Clang
- Mise à jour de Clang vers la version 3.8svn (r256229, build 2812033). Les exécutables
clang.exe
etclang++.exe
du package Windows 32 bits sont en réalité 64 bits. L'exécutable 32 bits est nomméclang_32.exe
. - Correction de
__thread
afin qu'il fonctionne vraiment cette fois. - GCC
- Synchronisation du compilateur avec ChromeOS GCC pour google/gcc-4_9 r227810.
- Rétroportage du correctif de nettoyage de couverture à partir de ToT (r231296).
- Correction de
libatomic
afin qu'il n'utilise pas ifuncs (problème 31 du NDK). - Binutils
- Mise sous silence des messages d'information "Erratum 843419 found and fixed" (Erratum 843419 détecté et corrigé).
- Introduction de l'option
--long-plt
afin de corriger une erreur interne de l'éditeur de liens lors de l'association de binaires arm32 très volumineux. - Correction de bouchons d'exécution incorrects pour
AArch64
. En raison de ce problème, les adresses de renvoi n'étaient pas calculées correctement pour les objets partagés dynamiques (DSO, Dynamic Shared Object) très volumineux. - Introduction de l'option par défaut
--no-apply-dynamic
pour contourner un bug de l'éditeur de liens dynamique pour les versions d'Android plus anciennes. - Correction d'un problème connu de NDK r11 faisant que
dynamic_cast
ne fonctionnait pas avec Clang, x86, stlport_static et l'optimisation. - GDB
- Mise à jour vers la version 7.11 de GDB. Pour en savoir plus sur cette version, consultez GDB News.
- Correction d'un certain nombre de bugs dans le script
ndk-gdb.py
. - Problèmes connus
- Address Sanitizer (ASAN) x86 ne fonctionne pas à l'heure actuelle. Pour en savoir plus, consultez le problème 186276.
- Le déroulement d'exception avec
c++_shared
ne fonctionne pas avec ARM sous Android 2.3 (niveau d'API 9) ou Android 4.0 (niveau d'API 14). - Les en-têtes et les bibliothèques Bionic pour Android 6.0 (niveau d'API 23) ou version ultérieure ne sont pas encore exposés, malgré la présence d'android-24. Ces plates-formes ont toujours les en-têtes et les bibliothèques Android 5.0 (niveau d'API 21), ce qui correspond à NDK r11.
- Les outils RenderScript sont absents, ce qui correspond à NDK r11 (problème 7 du NDK).
- Dans le fichier d'en-tête
NdkCameraMetadataTags.h
, la valeur d'énumération de la balise de métadonnées de l'appareil photoACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
est 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
--attach
de 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-gdb
pour Mac. - Ajout de raccourcis de premier niveau pour les outils de ligne de commande :
ndk-depends
ndk-gdb
ndk-stack
ndk-which
(commande qui ne figurait pas du tout dans les versions précédentes)
- Correction des chaînes d'outils autonomes pour libc++, dans lesquelles
__cxxabi_config.h
était manquant. - Correction de la documentation d'aide pour
--toolchain
dansmake-standalone-toolchain.sh
.
- Correction de
- Annonces importantes
- Clang
-
- Errata
- Contrairement à ce que nous avons signalé dans les notes de la version r11,
__thread
ne fonctionne pas. En effet, la version de Clang que nous fournissons ne dispose pas de la correction de bug pour la compatibilité avec l'émulation TLS.
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
__thread
en émulant ELF TLS avec des données spécifiques des threads pthread. - C++11
thread_local
fonctionne dans certains cas, mais pas pour les données comportant des destructeurs non triviaux, car ils nécessitent une prise en charge par libc. Cette limite ne s'applique pas à l'exécution sous Android 6.0 (niveau d'API 23) ou version ultérieure. - L'émulation TLS ne fonctionne pas encore avec Aarch64 lorsque l'accès aux variables TLS s'effectue à partir d'une bibliothèque partagée.
- 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
-target
surarmv5te-linux-androideabi
.
- Vous pouvez rétablir l'ancien comportement en définissant l'option
- Modification du système de compilation afin qu'il utilise
-isystem
pour les inclusions de plates-formes.- Les avertissements dus à Bionic n'interrompent plus la compilation des applications.
- Correction d'un bug qui se produisait lorsqu'un binaire générait des exceptions via gabi++ (problème 179410).
- Remplacement de l'espace de noms intégré de libc++ par
std::__ndk1
pour éviter les problèmes d'ODR avec la bibliothèque libc++ de plate-forme. - Toutes les bibliothèques libc++ sont désormais compilées avec libc++abi.
- Remplacement de la valeur par défaut de
APP_PLATFORM
par Gingerbread.- La compatibilité avec Froyo et les versions antérieures devrait être abandonnée dans une prochaine version.
- Modification des chaînes d'outils autonomes ARM pour qu'elles utilisent par défaut arm7.
- Mise à jour du struct gabi++
_Unwind_Exception
pour les environnements 64 bits. - Ajout des fonctionnalités suivantes à cpufeatures :
- Détection de SSE4.1 et SSE4.2
- Détection des fonctionnalités du processeur sur x86_64
- Mise à jour de libc++abi vers r231075 en amont.
- Mise à jour de
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
etuchar.h
à partir de ToT Bionic. - Synchronisation de
sys/cdefs.h
pour tous les niveaux d'API. - Correction de
fegetenv and fesetenv
pour arm. - Correction de la taille/l'alignement du pointeur de fin de
crtend_*
pour mips64 et x86_64.
- 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=gold
au moment de l'association afin d'utiliser Gold au lieu de bfd. Le comportement par défaut sera probablement modifié en conséquence dans la prochaine version. - Amélioration du délai d'association des binaires volumineux pour le backend Gold ARM (jusqu'à 50 % de réduction du délai d'association pour le navigateur Chrome débogable).
- 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 à
-O0
entraî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=clang
sélectionne désormais cette version de Clang par défaut. - Suppression de Clang 3.4.
- Suppression de GCC 4.6.
- Intégration de la compatibilité avec le multithreading dans
ld.gold
pour toutes les architectures. L'association peut désormais s'effectuer avec ou sans prise en charge du multithreading. Par défaut, elle se fait sans celle-ci.- Pour intégrer le multithreading lors de la compilation, utilisez l'option
--threads
. - Pour compiler sans multithreading, utilisez l'option
--no-threads
.
- 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.pragma
est prioritaire. - Correction d'une erreur qui provoquait un plantage avec le message d'erreur suivant :
in add_stores, at var-tracking.c:6000
- Mise en œuvre d'une solution de contournement pour un problème dans Clang 3.5 où la vectorisation automatique LLVM génère
llvm.cttz.v2i64()
, une instruction sans équivalent dans l'ensemble d'instructions ARM.
- Autres corrections de bugs
-
- Correction des bibliothèques et des en-têtes suivants :
- Correction de
PROPERTY_*
dansmedia/NdkMediaDrm.h
- Correction de
sys/ucontext.h
pourmips64
- Abandon de la vérification de la version Clang pour
__builtin_isnan
et__builtin_isinf
- Ajout de
android-21/arch-mips/usr/include/asm/reg.h
et 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
mips
etmips64
afin de créer une section.gcc_except_table
accessible en écriture, ce qui correspond au comportement de GCC. Cette modification vous permet d'éviter l'avertissement suivant de l'éditeur de liens :.../ld: warning: creating a DT_TEXTREL in a shared object
- Rétroportage d'un correctif pour les problèmes liés à
compiler-rt
qui causaient des plantages lorsque Clang effectuait une compilation 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::compare
afin qu'il renvoie-1
et1
. Auparavant, il renvoyait des nombres signés arbitraires. - Correction de
ndk-gdb
pour les ABI 64 bits (problème 118300). - Correction du plantage de l'exemple HelloComputeNDK pour RenderScript sous Android 4.4 (niveau d'API Android 19). Pour en savoir plus, consultez cette page.
- Correction de
libc++ __wrap_iter
pour GCC. Pour en savoir plus, consultez le problème 22355 de LLVM. - Correction de la compatibilité de
.asm
avec l'ABIx86_64
. - Mise en place d'une solution de contournement pour le problème lié à
stlport
dans GCC 4.8 (problème 127773). - Suppression du séparateur de répertoire de fin
\\
du chemin d'accès au projet sous Windows (problème 160584). - Correction d'une erreur
no rule to make target
lors de la compilation d'un seul fichier.c
en exécutant la commandendk-build.cmd
à partir degradle
(problème 66937). - Ajout des bibliothèques
libatomic.a
etlibgomp.a
qui manquaient dans les chaînes d'outils hôte suivantes :aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Autres modifications
-
- Ajout de
ld.gold
pouraarch64
. L'éditeur de liens par défaut resteld.bfd
. Pour activer explicitementld.gold
, ajoutez-fuse-ld=gold
à la variableLOCAL_LDFLAGS
ouAPP_LDFLAGS
. - Création des chaînes d'outils MIPS et MIPS64 avec
binutils-2.25
, qui offre une compatibilité améliorée avec R6. - Définition de
-fstandalone-debug
(informations de débogage complètes) comme option par défaut pour Clang. - Remplacement de
-fstack-protector
par-fstack-protector-strong
pour les chaînes d'outils ARM, AArch64, X86 et X86_64 pour GCC 4.9, Clang 3.5 et Clang 3.6. - Ajout du commutateur de ligne de commande
--package
àndk-gdb
pour permettre au système de compilation de remplacer le nom du package (problème 56189). - Abandon de
-mno-ldc1-stc1
pour MIPS. Il est possible que cette option ne fonctionne pas avec les nouvelles options-fpxx
et-mno-odd-spreg
, ni avec l'ABI FPXX. - Ajout de la détection de MIPS MSA et R6 à
cpu-features
.
- 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.6
lorsque vous exécutezmake-standalone-toolchain.sh
sur la ligne de commande. GCC 4.9 reste la version par défaut pour les ABI 64 bits. - Modification de toutes les chaînes d'outils x86[_64] pour qu'elles n'ajoutent plus
-mstackrealign
par défaut. La chaîne d'outils NDK suppose un alignement de pile de 16 octets. Les options et les outils utilisés par défaut appliquent cette règle. Un utilisateur qui écrit du code assembleur doit veiller à conserver l'alignement de la pile et à s'assurer que les autres compilateurs respectent également cette règle (bug 38496 de GCC). - Ajout de la fonctionnalité Address Sanitizer à la compatibilité de Clang 3.5 avec les ABI ARM et x86. Pour en savoir plus sur cette modification, consultez le projet Address Sanitizer.
- Introduction, à partir du niveau d'API 21, de l'obligation d'utiliser
-fPIE -pie
lors de la compilation. Dans les niveaux d'API 16 et supérieurs, ndk-build utilisePIE
lors de la compilation. Cette modification a plusieurs conséquences, qui sont décrites dans le problème 888 de la Preview développeur. Ces conséquences ne concernent pas les bibliothèques partagées.
- 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/vsscanf
au niveau d'API 21. Le correctif lui-même avait été appliqué à la version r10c (problème 77988). - Correction d'un plantage d'AutoFDO (
-fauto-profile
) qui se produisait avec GCC 4.9 lorsque-Os
était spécifié (problème 77571).
- Autres corrections 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_memalign
au niveau d'API 16. Ajout d'un prototype dansstdlib.h
aux niveaux d'API 16 à 19 (problème 77861). - Correction de
stdatomic.h
afin qu'il n'inclue<atomic>
que pour C++11. - Modification des en-têtes suivants pour une utilisation autonome :
sys/user.h
etgl2ext.h
,dlext.h
,fts.h
etsgidefs.h
pour le niveau d'API 21. - Modification de
sys/user.h
pour renommermxcsr_mask
en le remplaçant parmxcr_mask
et pour modifier le type de données deu_ar0
en remplaçant - Modification du type de valeur renvoyé par
sysconf()
:int
remplacé parlong
. - Correction de la gestion de
thumb
pourLOCAL_ARM_MODE
par ndk-build : dans la version r10d, ndk-build ajouteLOCAL_LDFLAGS+=-mthumb
par défaut, sauf si l'une des conditions suivantes s'applique : - Vous avez défini
LOCAL_ARM_MODE
surarm
. - Vous créez une version de débogage (avec des paramètres tels que
APP_OPTIM=debug
etAndroidManifest.xml
contenantandroid:debuggable="true"
), pour laquelle le mode ARM est défini par défaut afin de conserver la compatibilité avec les chaînes d'outils antérieures (problème 74040). - Correction de
LOCAL_SRC_FILES
dans ndk-build de façon à utiliser des chemins d'accès absolus Windows (problème 74333). - Suppression du code propre à bash de ndk-gdb (problème 73338).
- Suppression du code propre à bash de
make-standalone-toolchain.sh
(problème 74145). - Révision de la documentation concernant un correctif pour les dépendances transitives de
System.loadLibrary()
(problème 41790). - Correction d'un problème qui empêchait l'extraction des packages 64 bits sous Ubuntu 14.04 et OS X 10.10 (Yosemite) (problème 78148).
- Correction d'un problème lié à
LOCAL_PCH
pour améliorer la compatibilité avec Clang (problème 77575). - Clarification du message d'avertissement "requires executable stack" (pile exécutable requise) de ld.gold (problème 79115).
unsigned long
par 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-L
par la désignation de la version officielle :android-21
. - Mise à jour de GCC 4.9 en rebasculant sur la branche
google
du dépôt GCC. Les principales différences par rapport à la version en amont de GCC 4.9 sont les suivantes : - L'option
-O2
active désormais la vectorisation, sans pelage de boucle, mais avec un déroulage plus agressif. - Des améliorations ont été apportées à FDO et à LIPO.
- Ajout de la compatibilité avec Clang 3.5 pour tous les hôtes :
NDK_TOOLCHAIN_VERSION=clang
sélectionne désormais Clang 3.5. Gardez à l'esprit les points suivants : - ARM et x86 utilisent par défaut l'assembleur intégré. Si cela pose problème, utilisez
-fno-integrated-as
comme solution de contournement. - Clang 3.5 génère des avertissements supplémentaires pour les options inutilisées, telles que l'option
-finline-functions
compatible avec GCC. - 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.setup
dans le répertoire contenant le NDK. - Suppression de la compatibilité avec Clang 3.3.
- Abandon de GCC 4.6, qui sera éventuellement supprimé des versions futures.
- Mise à jour de mclinker vers la version 2.8, compatible avec le pliage de code identique (ICF, Identical Code Folding). Spécifiez ICF à l'aide de l'option
--icf
. - Compatibilité étendue avec
arm_neon.h
dans x86 et x86_64 pour atteindre une couverture d'environ 93 % des fonctionnalités intrinsèques de NEON. Pour en savoir plus sur la compatibilité avec NEON :- Accédez au document "NDK Programmer's Guide" (
docs/Programmers_Guide/html/
), puis consultez Architectures and CPUs > Neon. - Examinez l'exemple
hello-neon
mis à jour 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_SOURCE
avecheaders/libs/android-21
, qui est apparue dans la version r10 (lorsqueandroid-21
s'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-argument
et-Wno-unused-command-line-argument
pour 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) :
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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
. - Autres corrections de bugs
-
- Correction des bibliothèques et en-têtes suivants pour
android-21
:- Ajout de codes de touche TV :
android/keycodes.h
. - Ajout de constantes et de six nouvelles fonctions de capteur dans
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
etASensor_isWakeUpSensor
. - Correction de
stdatomic.h
pour améliorer la compatibilité avec GCC 4.6 et permettre l'utilisation de l'en-tête<atomic>
. - Ajout de
sys/ucontext.h
etsys/user.h
à tous les niveaux d'API. L'en-têtesignal.h
inclut désormais<sys/ucontext.h>
. Vous pouvez supprimer toute définition existante destruct ucontext
. - Ajout de
posix_memalign
aux niveaux d'API 17, 18 et 19. - Ajout des fonctions suivantes à toutes les architectures :
android_set_abort_message
,posix_fadvise
,posix_fadvise64
etpthread_gettid_np
. - Ajout des autorisations requises à l'exemple
native-media/AndroidManifest.xml
(problème 106640). - Ajout de
clock_nanosleep
etclock_settime
au niveau d'API 21 (problème 77372). - Suppression des symboles suivants de toutes les architectures :
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
etdlmalloc
. - Suppression des fonctions suivantes des architectures 64 bits :
basename_r
,dirname_r
,__isthreaded
et_flush_cache
(mips64). - Suppression de la fonction suivante des architectures 32 bits :
__signalfd4
. - Remplacement du type du troisième argument
size_t
parint
dans les fonctions suivantes :strtoll_l
,strtoull_l
,wcstoll_l
etwcstoull_l
. - Restauration des fonctions suivantes dans l'architecture 64 bits :
arc4random
,arc4random_buf
etarc4random_uniform
. - Remise en place de
cxa_*
et des opérateursnew
etdelete
danslibstdc++.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.sh
pour qu'il accepte et traite désormais correctement l'utilisation d'un suffixe spécifiant une version de Clang. - Correction des fonctions libc++/armeabi de
strtod()
. - Correction de la documentation du NDK dans
docs/
.
- Correction des bibliothèques et en-têtes suivants pour
- Autres modifications
-
- Amélioration de
cpu-features
pour détecter la compatibilité d'ARMv8 avec les ensembles d'instructions suivants : AES, CRC32, SHA2, SHA1 et PMULL/PMULL2 64 bits (problème 106360). - Modification de ndk-build afin qu'il utilise
*-gcc-ar
, disponible dans GCC 4.8, GCC 4.9 et Clang. Clang le spécifie au lieu de*-ar
. Ce paramètre améliore la compatibilité avec LTO. - Suppression des en-têtes
include-fixed/linux/a.out.h
etinclude-fixed/linux/compiler.h
du compilateur GCC (problème 73728). - Correction d'un problème lié à
-flto
avec GCC 4.8 sous Mac OS X. Le message d'erreur était le suivant :
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Correction d'une faute de frappe dans
build-binary.mk.
(problème 76992). - 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.h
des 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.h
etwchar.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_nxthdr
devient__cmsg_nxthdr
. - Suppression de
__libc_malloc_dispatch
. - Remplacement du prototype
ptrace()
parlong ptrace(int, ...);
. - Suppression de
sha1.h
. - Extension de
android_dlextinfo
dansandroid/dlext.h
. - Annotation de
__NDK_FPABI__
pour les fonctions recevant ou renvoyant des valeurs de type float ou double dansstdlib.h
,time.h
,wchar.h
etcomplex.h
.
- Suppression de
- Autres modifications
-
- Mise à jour de
mipsel-linux-android-4.9
etmips64el-linux-android-4.9
, mise en œuvre d'une nouvelle structure de répertoire multilib et compatibilité avec gdb-7.7. - Amélioration de
cpu-features
pour détecter davantage de fonctionnalités arm64 (liste des modifications 100339).
- 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=clang
ne fonctionne pas pour arm64-v8a et mips64. - Android-L est le premier niveau compatible avec l'environnement 64 bits. Notez que ce niveau d'API est temporaire et qu'il n'est destiné qu'à l'aperçu de L. Un numéro de niveau d'API réel le remplacera à la publication de la version L.
- Cette version inclut désormais les paramètres
all32
etall64
pourAPP_ABI
.APP_ABI=all32
est équivalent àAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
est équivalent àAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
sélectionne toutes les ABI.
- La nouvelle bibliothèque GNU libstdc++ dans Android-L contient l'intégralité de
<tr1/cmath>
. Avant de définir votre propre fonction mathématique, vérifiez dans_GLIBCXX_USE_C99_MATH_TR1
si une fonction portant ce nom existe déjà afin d'éviter les erreurs de définitions multiples dans l'éditeur de liens. - La bibliothèque cpu-features a été mise à jour pour le noyau ARMv8. Il est possible que la bibliothèque cpu-features existante ne détecte pas la présence de NEON sur la plate-forme ARMv8. Recompilez votre code avec la nouvelle version.
- Ajout d'un répertoire d'API
platforms/android-L/
contenant les éléments suivants : - En-têtes Bionic mis à jour. Ils n'avaient pas changé entre les niveaux d'API Android 3 (Cupcake) et 19 (KitKat). Cette nouvelle version, pour le niveau L, va être synchronisée avec AOSP.
- Nouvelles API multimédias et exemple de codec natif.
- En-tête
Android.h
mis à jour pour SLES/OpenSLES et assurant la compatibilité avec le format audio à virgule flottante à simple précision dans un lecteur audio. - Extensions GLES 3.1 et AEP pour
libGLESv3.so.
. - En-têtes GLES2 et GLES3 mis à jour vers les dernières versions officielles de Khronos.
- Ajout des compilateurs GCC 4.9 aux ABI 32/64 bits. Comme indiqué précédemment, GCC 4.9 est le compilateur par défaut (uniquement) pour les ABI 64 bits. Pour les ABI 32 bits, vous devez activer GCC 4.9 de manière explicite, car GCC 4.6 est toujours le compilateur par défaut.
- Pour ndk-build, activez la compilation 32 bits avec GCC 4.9 en ajoutant
NDK_TOOLCHAIN_VERSION=4.9
àApplication.mk
ou en l'exportant en tant que variable d'environnement à partir de la ligne de commande. - Pour une chaîne d'outils autonome, utilisez l'option
--toolchain=
dans le 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.8
ou4.9
pour permettre à ndk-gdb de sélectionner GDB 7.6. - Ajout de l'option de compilation
-mssse3
pour assurer la compatibilité avec SSSE3, en en faisant l'option par défaut pour l'ABI x86 (mise à niveau à partir de SSE3). L'image publiée par Google ne contient pas d'instructions SSSE3. - Mise à jour de GCC 4.8 vers la version 4.8.3.
- Amélioration de la compatibilité avec ARM libc++ EH grâce au passage de gabi++ à libc++abi. Pour en savoir plus, consultez la section "Compatibilité C++" de la documentation. Gardez à l'esprit les points suivants :
- Tous les tests, à l'exception des paramètres régionaux, réussissent désormais avec Clang 3.4 et GCC 4.8. Pour en savoir plus, consultez la section "Compatibilité C++" de la documentation.
- Les bibliothèques libc++ pour X86 et MIPS libc++ utilisent toujours gabi++.
- GCC 4.7 et les versions ultérieures peuvent désormais utiliser <atomic>.
- Vous devez ajouter
-fno-strict-aliasing
si vous utilisez<list>
, car__list_imp::_end
_ enfreint les règles TBAA (problème 61571). - Depuis GCC 4.6, LIBCXX_FORCE_REBUILD:=true ne recompile plus libc++. Pour la recompiler, vous devez utiliser un autre compilateur. Notez que Clang 3.3 n'a pas été testé.
- mclinker en est maintenant à la version 2.7 et est compatible avec aarch64 Linux.
- Ajout de la compatibilité avec les en-têtes précompilés spécifiés par
LOCAL_PCH
(problème 25412).
- Correction de bugs importants
-
- Correction de libc++ pour qu'elle compile maintenant
std::feof
, etc. (problème 66668). - Correction d'un appel de bibliothèque atomique Clang 3.3/3.4 qui provoquait des plantages dans certains tests libc++ pour l'ABI armeabi.
- Correction des plantages de Clang 3.4 lors de la lecture d'en-têtes précompilés (problème 66657).
- Correction de l'assertion
-O3
de Clang 3.3/3.4 dans : - 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_t
32 bits pour le définir surint
au lieu delong int
. - Correction de
WCHAR_MIN
et deWCHAR_MAX
afin qu'ils adoptent les signes appropriés en fonction de l'architecture sur laquelle ils s'exécutent : - X86/MIPS : avec signe.
- ARM : sans signe.
- Pour forcer X86/MIPS à ne pas ajouter de signe par défaut, utilisez
-D__WCHAR_UNSIGNED__
. - Pour obliger
wchar_t
à avoir 16 bits, utilisez-fshort-wchar
. - Suppression des symboles inexistants du fichier
libc.so
32 bits et ajout depread64
,pwrite64
etftruncate64
pour le niveau d'API Android 12 ou supérieur (problème 69319). Pour en savoir plus, consultez le message de commit associé à la liste de modifications d'AOSP 94137. - Correction d'un avertissement de GCC concernant la redéfinition de
putchar
. Le message d'avertissement est le suivant : - 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-pie
pour les cibles Android si ni-shared
, ni-static
n'existait. Ce comportement, qui était incorrect, obligeait l'éditeur de liens à signaler que-shared
et-pie
ne pouvaient pas coexister.
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=clang
sélectionne désormais Clang 3.4. GCC 4.6 reste le compilateur par défaut. - Ajout de
APP_ABI=armeabi-v7a-hard
, avec l'option multilib supplémentaire-mfloat-abi=hard
. Ces options sont destinées à être utilisées avec ARM GCC 4.6/4.8 et Clang 3.3/3.4 (qui utilisent l'assembleur, l'éditeur de liens et les bibliothèques 4.8). Lorsque vous utilisez ces options, notez les modifications suivantes : - Lors de l'exécution du script
ndk-build
, ajoutez les options suivantes pour la cible armeabi-v7a :TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
La bibliothèque créée est copiée danslibs/armeabi-v7a
. Pour que make se comporte comme prévu, vous ne pouvez pas spécifier à la foisarmeabi-v7a
etarmeabi-v7a-hard
en tant que cibles (c'est-à-dire sur la ligne APP_ABI=). Si vous le faites, l'une d'entre elles sera ignorée. Notez queAPP_ABI=all
est toujours équivalent àarmeabi armeabi-v7a x86 mips
. - Le script
make-standalone-toolchain.sh
copie des bibliothèques supplémentaires dans les répertoires/hard
. Ajoutez lesCFLAGS
etLFLAGS
ci-dessus à votre fichier makefile pour permettre l'association de GCC ou Clang aux bibliothèques situées dans/hard
. - Ajout de l'assembleur yasm, ainsi que des options
LOCAL_ASMFLAGS
etEXPORT_ASMFLAGS
pour les cibles x86. Le scriptndk-build
utiliseprebuilts/*/bin/yasm*
pour créer des fichiersLOCAL_SRC_FILES
avec l'extension.asm
. - Mise à jour de MClinker vers la version 2.6.0, ce qui ajoute la compatibilité avec
-gc-sections
. - Ajout de la compatibilité expérimentale avec libc++ (r201101 en amont). Utilisez cette nouvelle fonctionnalité en procédant comme suit :
- Ajoutez
APP_STL := c++_static
ouAPP_STL := c++_shared
dansApplication.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
,_hashlib
et_ssl
- Linux :
zlib
,nis
,crypt
,_curses
et_curses_panel
- Mac OS X :
- Correction de gdbserver
event_getmsg_helper
x86 et MIPS. - Correction de nombreux problèmes liés à la chaîne d'outils NDK RenderScript, y compris des problèmes de compatibilité avec les anciens appareils et de réflexion C++.
- Autres corrections de bugs
-
- Corrections d'en-têtes :
- Correction d'un
#include <sys/types.h>
manquant dansandroid/asset_manager.h
pour le niveau d'API Android 13 et supérieur (problème 64988). - Correction d'un
#include
manquant dansandroid/rect_manager.h
pour le niveau d'API Android 14 et supérieur. - Ajout de
JNICALL
àJNI_OnLoad
et àJNI_OnUnload
dansjni.h
. Notez queJNICALL
est 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) :
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
- Ajout de
sys/cachectl.h
pour toutes les architectures. Les développeurs MIPS peuvent désormais inclure cet en-tête au lieu d'écrire#ifdef __mips__
. - Correction de
platforms/android-18/include/android/input.h
via l'ajout de__NDK_FPABI__
aux fonctions qui acceptent ou renvoient des valeurs float ou doubles. - Correction de MIPS
struct stat
, qui était défini de manière incorrecte sur son équivalent 64 bits pour le niveau d'API Android 12 et supérieur. Ce paramètre incorrect correspondait à une régression introduite dans la version r9c. - Définition de
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
et__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
pour le niveau d'API Android 9 ou inférieur. - Ajout de
scalbln
,scalblnf
etscalblnl
àlibm.so
x86 pour le niveau d'API 18 et supérieur. - Correction d'une faute de frappe dans
sources/android/support/include/iconv.h
(problème 63806).
- Correction de gabi++
std::unexpected()
pour 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 pasonSystemUiVisibilityChange
et ne restaure donc pas le mode immersif.
- Correction du script
ndk-build
permettant d'ajouter-rpath-link=$SYSROOT/usr/lib
et-rpath-link=$TARGET_OUT
afin d'utiliserld.bfd
pour associer des exécutables (problème 64266).- Suppression de
-Bsymbolic
de tous les builds STL.- Correction de
ndk-gdb-py.cmd
via la définition deSHELL
comme variable d'environnement au lieu de le transmettre àpython.exe
, qui ignore le paramètre (problème 63054).- Correction du script
make-standalone-toolchain.sh
afin que l'option--stl=stlport
copie les en-têtes gabi++ au lieu de les relier par lien symbolique. Les interfaces systèmecmd.exe
et 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
*cmd
pré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.cmd
dans cygwin plutôt que le scriptndk-build
recommandé. - Amélioration de la vitesse du script
make-standalone-toolchain.sh
en le déplaçant au lieu de le copier si le répertoire de destination spécifié n'existe pas.
- 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-float
avec les fonctions mathématiques__builtin
. Pour en savoir plus sur les corrections de-mhard-float
avec STL, veuillez suivre le problème 61784.
- Autres corrections de bugs
-
- Corrections d'en-têtes :
- Remplacement du prototype
poll
parpoll(struct pollfd *, nfds_t, int);
danspoll.h
. - Ajout de
utimensat
àlibc.so
pour les niveaux d'API Android 12 et 19. Ces bibliothèques sont désormais incluses pour tous les niveaux d'API Android compris entre 12 et 19. - Introduction de
futimens
danslibc.so
pour le niveau d'API Android 19. - Ajout des fonctions manquantes
clock_settime()
etclock_nanosleep()
àtime.h
pour le niveau d'API Android 8 ou supérieur. - Ajout de
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
etCLOCK_BOOTTIME_ALARM
danstime.h.
- Suppression de
CLOCK_REALTIME_HR
etCLOCK_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_ReleaseStringUTFChars
dans/system/lib/libdvm.so
qui provoquait des plantages sur les appareils x86
- Correction des échecs de
ndk-build
qui se produisent dans cygwin lorsque le package NDK est référencé via un lien symbolique. - Correction des échecs de
ndk-build.cmd
qui se produisent dans Windowscmd.exe
lorsqueLOCAL_SRC_FILES
contient des chemins d'accès absolus (problème 69992). - Correction du script
ndk-stack
pour qu'il se poursuive même lorsqu'il ne peut pas analyser un bloc en raison d'une routine, d'un nom de fichier ou d'un numéro de ligne introuvables. Dans tous les cas, il affiche??
. - Correction de la pile
ndk-stack
pour les cibles windows-x64_64 afin qu'elle ne fasse plus correspondre par erreur une ligne de bloc à une ligne de la sectionstack:
ne contenant paspc
,eip
niip
. Par exemple :I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Correction de gabi++ de façon à :
- ne pas utiliser malloc() pour allouer des objets thread-local C++ ;
- éviter les interblocages dans gabi++ dans les cas où libc.debug.malloc n'est pas nul dans les builds userdebug/eng de plate-forme Android.
- 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-build
n'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_ABI
peut désormais être énuméré dans une liste d'éléments séparés par une virgule. Par exemple :APP_ABI := "armeabi,armeabi-v7a"
- Ajout de la possibilité de recompiler toute la STL avec des informations de débogage dans un package distinct facultatif, nommé
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, à l'aide de l'option-g
. Cette option permet au scriptndk-stack
de fournir un meilleur vidage de pile pour toute la STL. Cette modification ne devrait pas affecter le code ni la taille du fichier simplifié final. - Amélioration des exemples
hello-jni
de façon à indiquerAPP_ABI
lors de la compilation. - Utilisation de l'outil
ar
en mode déterministe (option-D
) pour créer des bibliothèques statiques (problème 60705).
- Ajout de
Android NDK r9b (octobre 2013)
- Modifications importantes
-
- Mise à jour de
include/android/*h
et demath.h
pour tous les niveaux d'API Android jusqu'à 18, y compris l'ajout des niveaux 13, 15, 16 et 17. Pour en savoir plus sur les API ajoutées, consultez les messages de commit des modifications 68012 et 68014 (problèmes 47150, 58528 et 38423). - Ajout de la compatibilité avec le niveau d'API Android 19, y compris la liaison Renderscript.
- Ajout de la compatibilité avec
-mhard-float
dans l'ABI armeabi-v7a existante. Pour en savoir plus et connaître les restrictions actuelles concernant Clang, 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 activer les couleurs de diagnostic, définissez
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
ou exportezGCC_COLORS
comme indiqué ci-dessous :GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Pour en savoir plus, consultez le document GCC Language Independent Options. - Ajout de deux exemples pour illustrer les fonctionnalités d'OpenGL ES 3.0 : Teapot et MoreTeapots. Ces exemples s'exécutent sur des appareils équipés d'Android 4.1 (niveau d'API 16) ou version ultérieure.
- Abandon de la compatibilité avec GCC 4.7 et Clang 3.2, qui seront supprimés dans la prochaine version.
- 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.exe
Windows 32 bits (problème 58975). - Correction de l'erreur interne du compilateur GCC 4.8 lors de la création d'une bibliothèque de puces. Le message d'erreur est le suivant :
internal compiler error: verify_flow_info failed
(problème 58916, problème GCC) - Modification du build GDB/ARM de façon à ignorer les données
ARM.exidx
pour le déroulement dans le code de prologue. Ajout d'une commande (set arm exidx-unwinding
) pour contrôler le déroulement de pile basé sur exidx (problème 55826). - Correction du problème du compilateur Clang 3.3 MIPS entraînant une réutilisation incorrecte des registres HI et LO.
- Correction de l'erreur interne du compilateur MIPS 4.7 dans
dbx_reg_number
. Le message d'erreur est le suivant :external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(correctif GCC)
- 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_MIN
etWCHAR_MAX
pour ARM de sorte qu'ils n'aient pas de signe, conformément aux spécifications (les versions X86/MIPS ont un signe). Définissez_WCHAR_IS_ALWAYS_SIGNED
pour rétablir l'ancien comportement (problème 57749). - Correction de
include/netinet/tcp.h
pour qu'il contienne l'énumération d'étatsTCP_INFO
(problème 38881). - Correction de la macro de
cdefs_elh.h
_C_LABEL_STRING
de façon à ne plus générer d'avertissements dans la chaîne d'outils GCC 4.8 en mode c++11 (problème 58135 et problème 58652). - Suppression des fonctions inexistantes
imaxabs
etimaxdiv
de 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êtebionic
stdlib.h
.
- Correction de
- Correction du problème de création de
samples/gles3jni
avec Clang au niveau d'API Android 11. - Correction de MCLinker de façon à autoriser plusieurs occurrences des options suivantes :
-gc-sections
et--eh-frame-hdr
. - Correction de MCLinker de façon à accepter l'option
--no-warn-mismatch
. - Modification de l'option
cpu-features
de façon à ne pas supposer que tous les appareils VFPv4 sont compatibles avec IDIV. Désormais, cette option permet d'ajouter IDIV uniquement aux appareils figurant sur la liste d'autorisation, y compris le Nexus 4 (problème 57637). - Correction du problème de journalisation incorrecte d'erreurs par
android_native_app_glue.c
lors d'opérations de préenvoi d'événements. - Correction de toutes les opérations sur
gabi++
terminate et unexpected_handler pour qu'elles soient thread-safe. - Correction de plusieurs problèmes liés à l'option Clang
-integrated-as
afin qu'elle puisse réussir les tests pourssax-instructions
etfenv
. - Correction du compilateur GCC 4.6/4.7/4.8 de façon à transmettre l'option
--eh-frame-hdr
de l'éditeur de liens, même pour les exécutables statiques. Pour en savoir plus, consultez le correctif GCC. - Correction d'une apostrophe superflue dans
CPU-ARCH-ABIS.html
. Pour en savoir plus, 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_sub
et__atomic_fetch_or
. - Correction de l'erreur interne du compilateur Clang 3.3 en cas de
vfprintf
personnalisé (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 :
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Pour obtenir des exemples de code, consulteztests/device/test-openmp
- Réduction considérable de la taille de
ld.mcld
(1,5 Mo au lieu de 3,5 Mo pourld.bfd
et de 7,5 Mo pourld.gold
), pour un gain de vitesse d'environ 20 %. - Ajout de
LOCAL_CONLYFLAGS
etAPP_CONLYFLAGS
pour spécifier des options applicables uniquement à C, mais pas à C++. LesLOCAL_CFLAGS
etAPP_CFLAGS
existants sont également utilisés pour la compilation C++ (afin d'éviter d'avoir à spécifier deux fois la plupart des options), si bien que des options comme-std=gnu99
peuvent échouer avec un avertissement dans les builds g++ et avec une erreur dans les builds clang++. - Ajout de fonctions d'assistance de tableau
gabi++
. - Modification des builds GCC de sorte que tous les fichiers
libgcc.a
soient compilés avec-funwind-tables
pour permettre à la pile d'être déroulée au-delà de points précédemment bloqués, tels que__aeabi_idiv0
. - Ajout de la compatibilité avec Ingenic MXU dans MIPS GCC 4.6/4.7/4.8 avec la nouvelle option
-mmxu
. - Extension de
-mldc1-sdc1
dans MIPS GCC 4.6/4.7/4.8 pour contrôler également ldxc1/sdxc1. - Ajout de crazy linker. Pour en savoir plus, consultez
sources/android/crazy_linker/README.TXT
. - Correction de
bitmap-plasma
pour qu'il dessine en plein écran plutôt que dans une zone de 200 x 200 pixels. - Réduction de 25 % de la taille des chaînes d'outils Linux et Darwin via la création de liens symboliques vers des fichiers identiques.
- 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.html
et 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.8
ou 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-typedefs
est 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-access
lors 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=clang
sélectionne désormais Clang 3.3 par défaut.Remarque : GCC 4.4.3 et Clang 3.1 sont tous deux obsolètes et seront supprimés de la prochaine version du NDK.
- Mise à jour de GNU Project Debugger (GDB) pour prendre en charge Python 2.7.5.
- Ajout de MCLinker pour prendre en charge les hôtes Windows. Étant donné que
ld.gold
est utilisé par défaut lorsqu'il est disponible, vous devez ajouter-fuse-ld=mcld
dansLOCAL_LDFLAGS
ouAPP_LDFLAGS
pour 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
-O
lors de l'utilisation de Boost 1.52.0 (problème 42891). - Correction de
libc.so
et delibc.a
pour 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_COMMANDS
en 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-gdb
de sorte que les actions--start
ou--launch
attendent désormais le serveur de débogage GNU afin qu'il puisse atteindre plus précisément les points d'arrêt définis au début du chemin d'exécution (tels que ceux figurant dans le code JNI) (problème 41278).Remarque : Cette fonctionnalité nécessite jdb et génère un avertissement concernant les points d'arrêt en attente. Spécifiez l'option
--nowait
pour rétablir le comportement précédent. - Correction du plantage de GDB lorsque la liste des bibliothèques est vide.
- Correction du plantage de GDB lors de l'utilisation d'une commande
stepi
après une instruction Thumbbx pc
oublx pc
(problème 56962 et problème 36149). - Correction de MIPS
gdbserver
pour qu'il rechercheDT_MIPS_RLD_MAP
au 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-build
pour vous permettre de spécifier une version de Clang comme option de ligne de commande (par exemple,NDK_TOOLCHAIN_VERSION=clang3.2
). Auparavant, il n'était possible de spécifier la version qu'en tant que variable d'environnement. - Correction de la taille gabi++ de
_Unwind_Exception
afin qu'elle soit désormais de 24 pour les cibles de compilation MIPS lors de l'utilisation du compilateur Clang (modification 54141). - Correction du script
ndk-build
afin que les bibliothèques compilées soient effectivement supprimées des projets qui incluent des bibliothèques statiques prédéfinies lors de l'utilisation de la commandendk-build clean
(modification 54461 et modification 54480). - Modification de l'option
NDK_ANALYZE=1
de façon à réduire son niveau de verbosité. - Correction de
gnu-libstdc++/Android.mk
de façon à inclure un cheminbackward/
pour les builds utilisant la rétrocompatibilité (problème 53404). - Correction d'un problème faisant que
stlport new
renvoyait parfois des valeurs aléatoires. - Correction de
ndk-gdb
de façon à respecter l'ordre deCPU_ABIS
et 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.gold
pour fusionner les littéraux de chaîne. - Correction de
ld.gold
pour gérer l'alignement des grands symboles. - Mise à jour de
ld.gold
pour activer l'option--sort-section=name
. - Correction de GCC 4.4.3/4.6/4.7 pour supprimer l'option
-export-dynamic
pour les programmes associés de manière statique. GCC n'ajoute plus de section.interp
pour ces programmes. - Correction d'une erreur de compilation de GCC 4.4.3
stlport
concernant letypedef
incohérent de_Unwind_Control_Block
(problème 54426). - Correction des scripts
awk
pour gérer les fichiersAndroidManifest.xml
créés sous Windows pouvant contenir des caractères de fin\r
et provoquer des erreurs de compilation (problème 42548). - Correction de
make-standalone-toolchain.sh
de façon à vérifier le répertoireprebuilts/
afin de détecter si l'hôte est 32 bits ou 64 bits. - Correction de l'option
-integrated-as
de Clang 3.2. - Correction des données de gestionnaire
pr1
etpr2
du modèle compact Clang 3.2 ARM EHABI. - Ajout de l'option Clang
-mllvm -arm-enable-ehabi
pour corriger l'erreur de Clang suivante :clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Correction de l'échec de la compilation lorsque aucun élément
uses-sdk
ne figure dans le fichier manifeste de l'application (problème 57015).
- Correction du script
- Autres modifications
-
- Corrections d'en-têtes
- Modification des en-têtes pour que
__set_errno
soit une fonction intégrée, étant donné que__set_errno
danserrno.h
est obsolète et quelibc.so
ne l'exporte plus. - Modification de
elf.h
pour inclurestdint.h
(problème 55443). - Correction de
sys/un.h
pour qu'il soit inclus indépendamment des autres en-têtes (problème 53646). - Correction de toute la famille d'API
MotionEvent_getHistorical
pour qu'elle accepteconst AInputEvent* motion_event
(problème 55873). - Correction de
malloc_usable_size
pour qu'il accepteconst void*
(problème 55725). - Correction de stdint.h pour une meilleure compatibilité avec C99 (modification 46821).
- Modification de
wchar.h
de façon à ne pas redéfinirWCHAR_MAX
niWCHAR_MIN
. - Correction de la déclaration de
<inttypes.h>
pour les macrosPRI
etSCN
liées au pointeur (problème 57218). - Modification de l'en-tête
sys/cdefs.h
afin que__WCHAR_TYPE__
soit 32 bits pour les niveaux d'API inférieurs à 9, ce qui signifie quewchat_t
est 32 bits pour tous les niveaux d'API. Pour rétablir le comportement précédent, définissez la variable booléenne_WCHAR_IS_8BIT
(problème 57267).
- 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.sh
pour prendre en charge la bibliothèquestlport
en plus degnustl
, lorsque vous spécifiez l'option--stl=stlport
. Pour en savoir plus, consultezSTANDALONE-TOOLCHAIN.html
. - Mise à jour du script
make-standalone-toolchain.sh
afin que l'option--llvm-version=
crée les scripts$TOOLCHAIN_PREFIX-clang
et$TOOLCHAIN_PREFIX-clang++
en plus declang
etclang++
, de façon à éviter d'utiliser les définitions clang et clang++ de l'hôte par erreur. - Ajout de deux options pour réactiver deux optimisations dans Clang en amont qui sont désactivées dans le NDK pour une meilleure compatibilité avec le code compilé par GCC :
- Ajout d'une option
-fcxx-missing-return-semantics
pour réactiver la sémantique de retour manquante dans Clang 3.2 ou version ultérieure. Normalement, tous les chemins doivent se terminer par une instruction return pour une fonction renvoyant une valeur. Si ce n'est pas le cas, Clang insère une instruction non définie (ou une interruption en mode débogage) dans le chemin sans instruction return. Si vous êtes sûr que votre code est correct, utilisez cette option pour permettre à l'optimiseur de profiter du comportement non défini. En cas de doute, n'utilisez pas cette option. Il est possible que l'appelant reçoive toujours une valeur incorrecte aléatoire, mais l'optimiseur ne l'exploitera pas et votre code sera plus difficile à déboguer. - Ajout d'une option
-fglobal-ctor-const-promotion
pour réactiver la promotion des variables globales avec constructeur statique en tant que constantes. Avec cette option, le processus d'optimisation des variables globales de LLVM tente d'évaluer celles ayant des constructeurs statiques et de les promouvoir en tant que constantes globales. Bien que cette optimisation soit correcte, elle peut entraîner une incompatibilité avec le code compilé par GCC. Par exemple, le code peut exécuterconst_cast
pour caster la constante en valeur modifiable et la modifier. Dans GCC, la variable est en lecture/écriture et le code est exécuté par accident. Dans Clang, la variable "const" est dans la mémoire en lecture seule et peut entraîner le plantage de votre application.
- Ajout d'une option
- Ajout de
-mldc1-sdc1
aux compilateurs MIPS GCC et Clang. Par défaut, les compilateurs alignent correctement les objets de 8 octets et génèrent les instructionsldc1
etsdc1
pour les déplacer. Si votre application utilise un outil d'allocation personnalisé qui ne s'aligne pas toujours sur la limite de 8 octets d'un nouvel objet comme le fait l'outil d'allocation par défaut, il est possible qu'elle plante en raison d'opérationsldc1
etsdc1
sur la mémoire non alignée. Dans ce cas, utilisez l'option-mno-ldc1-sdc1
pour résoudre le problème. - Rétrogradation de la gravité d'un événement d'"avertissement" à "info" si
APP_PLATFORM_LEVEL
est supérieur àAPP_MIN_PLATFORM_LEVEL
.APP_PLATFORM_LEVEL
peut être inférieur àAPP_PLATFORM
dansjni/Application.mk
, car le NDK ne comporte pas d'en-têtes pour tous les niveaux. Dans ce cas, le niveau réel est décalé vers le bas.APP_MIN_PLATFORM_LEVEL
est spécifié parandroid:minSdkVersion
dans 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-build
afin d'utiliser l'outilas/ld
de GCC 4.7 pour la compilation Clang.Remarque : Dans GCC 4.7,
monotonic_clock
etis_monotonic
ont été respectivement renomméssteady_clock
etis_steady
. - Ajout des avertissements suivants au script
ndk-build
:- Ajout d'avertissements si des
LOCAL_LDLIBS/LDFLAGS
sont utilisés dans des modules de bibliothèque statique - Ajout d'un avertissement si une configuration ne comporte aucun module à compiler
- Ajout d'un avertissement pour les bibliothèques non système utilisées dans les
LOCAL_LDLIBS/LDFLAGS
d'une bibliothèque partagée ou de modules exécutables
- Ajout d'avertissements si des
- Mise à jour des scripts de compilation pour que, si
APP_MODULES
n'est pas défini et si seules des bibliothèques statiques sont listées dansAndroid.mk
, le script force leur compilation (problème 53502). - Mise à jour de
ndk-build
de façon à accepter les chemins d'accès absolus dansLOCAL_SRC_FILES
. - Suppression des exécutables
*-gdbtui
, qui sont des doublons des exécutables*-gdb
avec l'option-tui
activée. - Mise à jour des scripts de compilation pour vous avertir lorsque l'interface du compilateur Edison Design Group (EDG) réactive
_STLP_HAS_INCLUDE_NEXT
(problème 53646). - Ajout de la variable d'environnement
NDK_LIBS_OUT
pour permettre le remplacement du chemin d'accèslibraries/gdbserver
en 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=true
pour 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.HTML
etNDK-BUILD.html
. - Ajout du compilateur Clang 3.2. GCC 4.6 reste le compilateur par défaut. Pour en savoir plus sur l'utilisation du compilateur Clang, consultez
CHANGES.HTML
. - Ajout d'un analyseur de code statique pour les hôtes Linux/MacOSX. Pour en savoir plus sur l'utilisation de l'analyseur, consultez
CHANGES.HTML
. - Ajout de MCLinker pour les hôtes Linux/MacOSX en tant que fonctionnalité expérimentale.
ld.gold
est l'éditeur de liens par défaut lorsqu'il est disponible. Vous devez donc activer explicitement MCLinker. Pour en savoir plus, 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_LIBRARIES
etLOCAL_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_GTHREADS
pour GCC 4.7 libstdc++ (problème 41770 et problème 41859). - Résolution du problème entraînant l'échec de l'association du code X86 MXX/SSE en raison de l'absence de
posix_memalign
(modification 51872). - Correction de l'erreur de segmentation de GCC4.7/X86 dans
i386.c
, 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_start
et à__exidx_start_end
(modification 52134). - Correction de l'erreur interne du compilateur Clang 3.1 lors de l'utilisation de la bibliothèque Eigen (problème 41246).
- Correction de l'erreur interne du compilateur Clang 3.1 lors de l'inclusion de
<chrono>
en mode C++11 (problème 39600). - Correction de l'erreur interne du compilateur Clang 3.1 lors de la génération du code d'objet pour un appel de méthode vers une
rvalue
uniforme initialisée (problème 41387). - Correction du réalignement de la pile Clang 3.1/X86 (modification 52154).
- Correction du problème lié à GNU Debugger (GDB) SIGILL lors du débogage sous Android 4.1.2 (problème 40941).
- Correction du problème empêchant GDB de définir des points d'arrêt
source:line
lorsque les symboles contiennent des chemins d'accès longs et indirects aux fichiers (problème 42448). - Correction de
read_program_header
dans GDB pour les exécutables MIPS PIE (modification 49592). - Correction de l'erreur de segmentation de
STLport
dansuncaught_exception()
(modification 50236). - Correction de l'erreur de bus de
STLport
dans la gestion des exceptions en raison d'un accès non aligné deDW_EH_PE_udata2
,DW_EH_PE_udata4
etDW_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_t
etptrdiff_t
. - Correction de l'en-tête
fenv.h
pour MIPS et ARM. - Correction de
stddef.h
pour ne pas redéfiniroffsetof
, car il existe déjà dans la chaîne d'outils. - Correction de
elf.h
afin qu'il contienneElf32_auxv_t
etElf64_auxv_t
(problème 38441). - Correction des définitions C++
#ifdef
dans le fichier d'en-têteOpenSLES_AndroidConfiguration.h
(problème 53163).
- Suppression des définitions redondantes de
- Correction de
STLport
afin qu'il annule l'opération en cas d'erreur de mémoire insuffisante au lieu se fermer de manière silencieuse. - Correction des en-têtes système et Gabi++ de façon à permettre la compilation avec un niveau d'API 8 ou inférieur.
- Correction de
cpufeatures
de façon à ne pas analyser/proc/self/auxv
(problème 43055). - Correction de
ld.gold
de façon à ne pas dépendre de la bibliothèque libstdc++ hôte et, sur les plates-formes Windows, à ne pas dépendre de la bibliothèquelibgcc_sjlj_1.dll
. - Correction de Clang 3.1 qui générait une liste de registres incohérente dans
.vsave
et provoquait l'échec de l'assembleur (modification 49930). - Correction de Clang 3.1 pour pouvoir compiler libgabi++ et réussir les tests
test-stlport
pour les cibles de compilation MIPS (modification 51961). - Correction de Clang 3.1 afin d'activer les exceptions par défaut pour C++ uniquement, et non pour C.
- Correction de plusieurs problèmes dans Clang 3.1 afin de réussir la plupart des tests d'exception GNU.
- Correction des scripts
clang
etclang++
dans le compilateur NDK autonome de façon à détecter-cc1
et à ne pas spécifier-target
lorsqu'il est effectivement présent. - Correction de
ndk-build
pour observerNDK_APP_OUT
défini dansApplication.mk
. - Correction de
libc.so
etlib.a
X86, qui ne disposaient pas des fonctionssigsetjmp
etsiglongjmp
dé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-build
sous Windows lors de l'exécution à partir du répertoire JNI du projet (problème 40192). - Correction du problème faisant que le script
ndk-build
ne se compilait pas si le fichier makefile se terminait par un espace blanc dans la définition 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_cleanup
et__cxa_type_match
pour qu'ils aient une visibilité par défaut au lieu de la visibilité masquée précédente dans GNU libstdc++. Pour en savoir plus, 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
STLport
soit compilé pour ARM en mode Thumb. - Ajout de la compatibilité avec
std::set_new_handler
dans Gabi++ (problème 52805). - Activation de l'appel système
FUTEX
dans GNU libstdc++. - Mise à jour de
ndk-build
afin qu'il ne copie plus la bibliothèque statique prédéfinie dans le ré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/rsqrt
MIPS en virgule flottante avec un FPU 32 bits. - Activation de l'optimiseur de boucle Graphite dans GCC 4.6 et 4.7 pour permettre d'autres optimisations :
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
et-ftree-loop-linear
(informations). - Activation de
polly
pour Clang 3.1 sur les hôtes Linux et Max OS X 32 bits à des fins d'analyse et d'optimisation de l'accès à la mémoire (informations). - Activation de
-flto
dans GCC 4.7 et 4.6, Clang 3.2 et Clang 3.1 sous Linux (Clang LTO via LLVMgold.so). Les cibles de compilation MIPS ne sont pas compatibles, carld.gold
n'est pas disponible. - Activation de
--plugin
et de--plugin-opt
pourld.gold
dans GCC 4.6/4.7. - Activation de
--text-reorder
pourld.gold
dans GCC 4.7. - Configuration de GNU libstdc++ avec
_GLIBCXX_USE_C99_MATH
, qui annule la définition du scriptisinf
dans l'en-tête bionique. Pour en savoir plus, consultezCHANGES.html
. - Ajout de
APP_LDFLAGS
aux scripts de compilation. Pour en savoir plus, consultezANDROID-MK.html
. - Mise à jour des scripts de compilation pour permettre à
NDK_LOG=0
de désactiverNDK_LOG
. - Mise à jour des scripts de compilation pour permettre à
NDK_HOST_32BIT=0
de désactiver la chaîne d'outils de l'environnement de développement hôte 32 bits. - Modification des options GCC/X86 par défaut
-march=
et-mtune=
: remplacement depentiumpro
etgeneric
pari686
etatom
. - Amélioration des scripts de compilation de la chaîne d'outils :
- Correction d'une condition de concurrence dans
build-gcc.sh
pour le type de compilationmingw
, qui empêchait un grand nombre de processus de compilation parallèles. - Mise à jour de
build-gabi++.sh
et debuild-stlport.sh
afin qu'ils puissent désormais s'exécuter à partir du package NDK (problème 52835). - Correction de
run-tests.sh
dans l'ensemble d'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.sh
vers une version plus récente. - Ajout d'une option permettant de créer
libgnustl_static.a
etstlport_static.a
sans 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.7
ou ajoutez-la àApplication.mk
. - Pour les builds autonomes, ajoutez l'option
--toolchain=
àmake-standalone-toolchain.sh
, par exemple :--toolchain=arm-linux-androideabi-4.7
Remarque : Cette fonctionnalité est expérimentale. Veuillez l'essayer et signaler tout problème.
- Pour
- Ajout de la prise en charge des exceptions
stlport
via gabi++. Notez que la nouvelle version de gabi++ dépend dedlopen
et du code associé. Cela signifie que :- Vous ne pouvez plus créer d'exécutable statique à l'aide de l'option
-static
ni inclurelibstlport_static.a
à l'aide deAPP_STL := stlport_static
. (Vous pouvez toujours utiliser l'option-static
avec une chaîne d'outils autonome.) La compilation d'un exécutable dynamique à l'aide deinclude $(BUILD_EXECUTABLE)
fonctionne toujours, car le compilateur ajoute automatiquement l'option-ldl
. - Si votre projet effectue une association à l'aide de
-nostdlib
et de {-Wl,--no-undefined}, vous devez inclure manuellement l'option-ldl
.
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-all
et-fstack-protector-strong
lors de l'utilisation du compilateur GCC 4.6 ou version ultérieure.Remarque : Le paramètre
-mstack-protector-guard
lui-même n'active aucune option-fstack-protector*
. - Ajout de la fonction
android_setCpu()
àsources/android/cpufeatures/cpu-features.c
afin qu'elle soit utilisée lorsque la détection automatique via/proc
est impossible sous Android 4.1 ou version ultérieure (problème Chromium 164154).
- 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 :
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
Ce problème était causé par la compilation sous Mac OS X 10.7, qui générait des binaires incompatibles avec Mac OS 10.6.x et le NDK. - Suppression des options
-x c++
du script de compilation autonome Clang++ (problème 39089). - Résolution des problèmes liés à l'utilisation de l'option
NDK_TOOLCHAIN_VERSION=clang3.1
dans Cygwin (problème 39585). - Correction du script
make-standalone-toolchain.sh
pour permettre la génération d'une chaîne d'outils autonome à l'aide des environnements Cygwin ou MinGW. La chaîne d'outils obtenue peut être utilisée dans les environnements Cygwin, MingGW ou CMD.exe (problème 39915 et problème 39585). - Ajout de l'option
SL_IID_ANDROIDBUFFERQUEUESOURCE
manquante dans les builds android-14 pour ARM et X86 (problème 40625). - Correction de la détection de processeur x86 pour la fonctionnalité
ANDROID_CPU_X86_FEATURE_MOVBE
(problème 39317). - Correction d'un problème qui empêchait la bibliothèque de modèles standards (STL, Standard Template Library) d'utiliser des sources C++ n'ayant pas l'extension de fichier
.cpp
. - Correction de l'erreur interne du compilateur GCC 4.6 ARM at reload1.c:1061 (problème 20862).
- Correction de l'erreur interne du compilateur GCC 4.4.3 ARM at emit-rtl.c:1954 (problème 22336).
- Correction de l'erreur interne du compilateur GCC 4.4.3 at postreload.c:396 (problème 22345).
- Correction du problème d'omission des fonctions lambda dans GCC 4.6/4.7 (problème 35933).
- 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_t
pour qu'ils correspondent au même type. - Correction d'une faute de frappe dans
android/bitmap.h
(problème 15134). - Correction d'une faute de frappe dans
errno.h
. - Ajout de la vérification de la présence de
__STDC_VERSION__
danssys/cdefs.h
(problème 14627). - Réorganisation des en-têtes dans
byteswap.h
etdirent.h
. - Correction de
limits.h
pour inclurepage.h
, qui fournit des paramètresPAGE_SIZE
(problème 39983). - Correction du type renvoyé par
glGetAttribLocation()
etglGetUniformLocation()
: remplacement deint
parGLint
. - Correction de la constante
__BYTE_ORDER
pour les builds x86 (problème 39824).
- Correction de
- Correction du script
ndk-build
de façon à ne pas écraser-Os
par-O2
pour les builds ARM. - Correction des scripts de compilation pour permettre l'écrasement des paramètres
HOST_AWK
,HOST_SED
etHOST_MAKE
. - Correction du problème affectant
ld.gold
dans les buildsfsck_msdos
associant des objets créés par le compilateur Intel C/C++ (ICC). - Correction de la compatibilité avec ARM EHABI dans Clang de façon à respecter les spécifications.
- Correction de GNU Debugger (GDB) afin de réduire le temps passé à parcourir le mappage des liens de la cible pendant les événements
solib
(problème 38402). - Correction du problème de fichier
libgcc.a
manquant lors de l'association de bibliothèques partagées.
- 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
SIGILL
pour les chemins sans instruction return. - Mise à jour de
make-standalone-toolchain.sh
de façon à accepter le suffixe-clang3.1
, qui équivaut à ajouter--llvm-version=3.1
à la chaîne d'outils GCC 4.6. - Remplacement de l'URL du rapport de bug GCC et Clang par : https://source.android.com/source/report-bug s.html.
- Ajout de la compatibilité avec ARM ELF à
llvm-objdump
. - Suppression de l'avertissement treating c input as c++ (traitement de l'entrée de code C comme du code C++) pour les builds Clang.
- Mise à jour du build de sorte que seule la version 32 bits de
libiberty.a
soit compilée et placée 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.1
ou ajoutez ce paramètre de variable d'environnement àApplication.mk
. - Pour les builds autonomes, ajoutez
--llvm-version=3.1
àmake-standalone-toolchain.sh
et remplacezCC
etCXX
par<tool-path>/bin/clang
et<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.gold
pour la chaîne d'outils Windows. Il est également activé par défaut pour ARM et X86 sur tous les hôtes. Vous pouvez l'ignorer afin d'utiliser l'éditeur de liensld.bfd
en ajoutantLOCAL_LDFLAGS += -fuse-ld=bfd
àAndroid.mk
ou en transmettant-fuse-ld=bfd
à la ligne de commande g++/clang++ qui effectue l'association. - Ajout de vérifications des espaces dans le chemin du NDK dans les scripts
ndk-build[.cmd]
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-13
dansAPP_PLATFORM
,project.properties
oudefault.properties
soient associés àandroid-9
au 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
-fPIE
pour les exécutables indépendants de la position (PIE, position-independent executables). Une nouvelle optionAPP_PIE
vous 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-N
n'a été ajouté. - Modification de
ndk-build
pour générer des avertissements si le niveau d'API ajusté est supérieur àandroid:minSdkVersion
dans le fichierAndroidManifest.xml
du projet.
- Modification de la logique de compilation pour que les projets spécifiant
- Mise à jour de la bibliothèque d'aide
cpu-features
pour 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*.o
sont correctement associés. - Ajout de
-mfpu=vfpv3-d16
àndk-build
au lieu de l'option-mfpu=vfp
utilisée dans les versions précédentes.
- 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.sh
avec des droits racine (problème 35279).- Tous les fichiers et exécutables du package de version du NDK sont configurés pour disposer d'autorisations de lecture et d'exécution.
- La propriété/le groupe de
libstdc++.a
sont désormais conservés lors de la copie.
- Suppression du
\r
redondant dans le fichier Windows prédéfiniecho.exe
. Ce\r
redondant provoquait l'échec degdb.setup
dans GNU Debugger (GDB), car il était intégré à tort dans le chemin d'accès (problème 36054). - Correction des builds parallèles Windows qui échouaient parfois en raison de problèmes de synchronisation dans la mise en œuvre de
host-mkdir
(problème 25875). - Correction de GCC 4.4.3 GNU
libstdc++
de façon à ne pas fusionner les nomstypeinfo
par 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
null
dans GCC 4.6cp/mangle.c::write_unscoped_name
, qui pouvait planter lorsque le contexte étaitnull
et 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-psabi
pour éviter cet avertissement n'est plus nécessaire. - Correction d'un problème se produisant lorsqu'un projet comportant les suffixes
.arm
ou.neon
dansLOCAL_SRC_FILES
utilisait égalementAPP_STL
. AvecAPP_STL
, le scriptndk-build
recherche les fichiers C++ dansLOCAL_SRC_FILES
avant d'ajouter les chemins STLheader/lib
à la compilation.ndk-build
a été modifié de façon à exclure les suffixes.arm
et.neon
avant la recherche. Sinon, les éléments deLOCAL_SRC_FILES
tels quemyfile.cpp.arm.neon
ne seraient pas compilés en code C++. - Correction de
binutils-2.21/ld.bfd
pour permettre l'association d'objets provenant d'anciens binutils 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/ld
associe 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-mthumb
et-march=armv7-a
via la modification demake-standalone-toolchain.sh
de façon à insérerheaders/libs
dans 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-protector
pour X86, qui est également l'option par défaut pour la cible ABIndk-build
x86. - Corrections propres à MIPS :
- Correction du boutisme de
STLport
via la définition de_STLP_LITTLE_ENDIAN
sur 1 lors de la compilation de MIPSlibstlport_*
. - Correction du problème lié à GCC
__builtin_unreachable
lors de la compilation de LLVM (problème GCC 54369). - Rétroportage de la correction du processus de compilation
cc1
utilisant 100 % du processeur (problème GCC 50380).
- 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
gdb
avec une dépendance étroite à une version spécifique de Python (problème 36120). - Correction de
ndk-gdb
lorsqueAPP_ABI
contientall
et ne correspond à aucune architecture connue (Problème 35392). - Correction de la compatibilité avec les noms de chemin d'accès Windows, en conservant le caractère
:
s'il semble faire partie d'un chemin d'accès Windows commençant par une lettre de lecteur (problème GDB 12843). - Correction de l'ajout de la compatibilité avec les points d'arrêt matériels pour ARM dans
gdbserver
(problème GDB). - Ajout d'un correctif permettant de ne lire que les
solibs
actuelles si l'éditeur de liens est cohérent. Cette modification accélère la gestion des évé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
gdb
de s'arrêter aux points d'arrêt placés dans les bibliothèquesdlopen-ed
(problème 34856). - Correction de
SIGILL
dans l'éditeur de liens dynamique lors de l'appel dedlopen()
sur un système où les symboles ont été supprimés de/system/bin/linker
et oùrtld_db_dlactivity()
est implémenté en modeThumb
, en raison de la non-préservation duLSB
desym_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
__unused
par__linux_unused
danslinux/sysctl.h
etlinux/icmp.h
pour éviter les conflits avec#define __unused
danssys/cdefs.h
. - Correction de
fenv.h
pour les fonctions C imbriquées avec__BEGIN_DECLS
et__END_DECLS
. - Suppression des fonctions non mises en œuvre dans
malloc.h
. - Correction de la définition
stdint.h
deuint64_t
pour les compilateurs ANSI (problème 1952). - Correction des macros de préprocesseur dans
<arch>/include/machine/*
. - Remplacement de
link.h
pour MIPS par une nouvelle version compatible avec toutes les plates-formes. - Suppression de
linux-unistd.h
. - Déplacement des macros propres à GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
etULONG_LONG_MAX
de<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_exception
n'ont lieu que lorsqueSTLport
est autorisé à utiliser des exceptions. - Correction du problème lié à la création de packages NDK uniquement Linux sans la création de code Windows. Pour effectuer ce type de compilation, utilisez les paramètres suivants :
./build/tools/make-release.sh --force --systems=linux-x86
- Correction de
libc.so
pour qu'il n'exporte 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.o
n'est pas associé dans ce cas. Le contenu de__dso_handle
n'a pas d'importance, comme illustré dans l'exemple de code suivant :extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Correction du décodeur de symboles pour ARM utilisé dans
objdump
pour les entréesplt
afin de générer un codefunction@plt
plus lisible. - Suppression des symboles suivants (introduits dans GCC 4.6
libgcc.a
) de la bibliothèquelibc.so
de la plate-forme X86 :__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
et__aeabi_unwind_cpp_pr2
. - Suppression des
.ctors
,.dtors
et.eh_frame
non utilisés dans MIPScrt*_so.S
. - Mise à jour de
ndk-gdb
afin qu'il n'utilise que la dernière ligne de sortie dendk-build
DUMP_XXXX
. Cette modification garantit que siApplication.mk
ouAndroid.mk
gé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-x86
etarch-mips
deplatforms/android-[3,4,5,8]
. Ces en-têtes étaient incomplets, car les ABI X86 et MIPS ne sont compatibles qu'à partir du niveau d'API 9. - Simplification du chemin include c++ dans les packages autonomes, comme illustré ci-dessous
(problème 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- Correction de
ndk-build
pour reconnaître davantage d'extensions de fichiers C++ par défaut :.cc .cp .cxx .cpp .CPP .c++ .C
. Vous pouvez toujours utiliserLOCAL_CPP_EXTENSION
pour écraser ces paramètres d'extension. - Correction d'un problème dans
samples/san-angeles
qui générait un écran noir ou un cadre figé quand il était relancé. - Remplacement des API obsolètes dans les exemples de NDK
(problème 20017) :
hello-gl2
: android-5 remplacée par android-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-tag
sont désormais obsolètes. - Ajout d'un script
run-tests-all.sh
qui appellerun-tests.sh
etstandalone/run.sh
avec différentes conditions. Le scriptrun-tests.sh
s'exécute sans l'option--abi
. Il a été amélioré de façon à compiler la plupart des tests pour toutes les ABI compatibles et à s'exécuter sur tous les appareils associés.
- 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_COMMANDS
dans les environnements Mac OS et Windows Cygwin pour les bibliothèques statiques. Les fichiers de liste sont générés plus rapidement et ne sont pas regénérés, ce qui permet d'éviter les recompilations de projets répétitives. - Correction de plusieurs problèmes dans
ndk-gdb
:- Mise à jour de l'outil pour transmettre les options
-e
,-d
et-s
à adb de manière plus cohérente. - Mise à jour de l'outil afin qu'il accepte les noms de série d'appareils contenant des espaces.
- Mise à jour de l'outil permettant de récupérer les informations
/system/bin/link
, afin quegdb
sur l'hôte puisse définir un point d'arrêt dans__dl_rtld_db_dlactivity
et tenir compte de l'activité de l'éditeur de liens (par exemple, analyser de nouveau les symbolessolib
lorsquedlopen()
est appelé).
- Mise à jour de l'outil pour transmettre les options
- Correction de
ndk-build clean
sous Windows, qui ne parvenait pas à supprimer./libs/*/lib*.so
. - Correction de
ndk-build.cmd
pour renvoyer une valeurERRORLEVEL
non nulle en cas d'échec demake
. - Correction de
libc.so
pour arrêter l'exportation incorrecte des symboles__exidx_start
et__exidx_end
. - Correction de
SEGV
lors du déroulement de la pile au-delà de__libc_init
pour ARM et MIPS.
- Correction des problèmes liés à
- Modifications importantes
-
- Ajout de la chaîne d'outils GCC 4.6 (
binutils
2.21 avecgold
et GDB 7.3.x) pour qu'elle coexiste avec la chaîne d'outils GCC 4.4.3 d'origine (binutils
2.19 et GDB 6.6).- GCC 4.6 est désormais la chaîne d'outils par défaut. Pour sélectionner la chaîne d'outils d'origine, vous pouvez définir
NDK_TOOLCHAIN_VERSION=4.4.3
dansApplication.mk
. - La compatibilité avec l'éditeur de liens
gold
n'est disponible que pour les architectures ARM et x86 sur les hôtes Linux et Mac OS. Cette compatibilité est désactivée par défaut. Pour l'activer, ajoutezLOCAL_LDLIBS += -fuse-ld=gold
dansAndroid.mk
. - Les programmes compilés avec
-fPIE
nécessitent le nouveauGDB
pour le débogage, y compris les binaires dans les images système Android 4.1 (niveau d'API 16). - L'outil
binutils
2.21ld
contient les correctifs rétroportés à partir de la version 2.22 :- Correction de
ld --gc-sections
, qui conservait à tort des références zombies aux bibliothèques externes (en savoir plus). - Correction de la commande ARM
strip
pour conserver les membresp_align
etp_flags
d'origine dans la sectionGNU_RELRO
, s'ils sont valides. Sans ce correctif, les programmes créés avec-fPIE
ne 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_now
par défaut :- Ajout de
--noexecstack
à l'assembleur et de-z noexecstack
à l'éditeur de liens qui fournit une protection NX contre les attaques par dépassement de tampon en activant le bit NX sur la pile et sur le tas de mémoire. - Ajout de
-z relro
et de-z now
à l'éditeur de liens pour renforcer les sections de données internes après l'association et ainsi éviter les failles de sécurité dues à une corruption de la mémoire (en savoir plus : 1, 2). - Vous pouvez désactiver ces fonctionnalités à l'aide des options suivantes :
- Désactivez la protection NX en définissant l'option
--execstack
pour l'assembleur et-z execstack
pour l'éditeur de liens. - Désactivez le renforcement des données internes en définissant les options
-z norelro
et-z lazy
pour l'éditeur de liens. - Désactivez ces protections dans le fichier NDK
jni/Android.mk
en définissant les options suivantes :LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Pour en savoir plus, consultez
docs/ANDROID-MK.html
. - 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-gnu
pour l'ajuster àR_MIPS_TLS_LDM
(en savoir plus). - Correction des erreurs de segmentation de l'outil
ld
lors de l'utilisation de--gc-sections
(en savoir plus). - Correction du problème de comptage de
GOT_PAGE
pour MIPS (en savoir plus). - Correction du lien de suivi du symbole d'avertissement pour
mips_elf_count_got_symbols
. - Correction du lien de suivi du symbole d'avertissement pour
mips_elf_allocate_lazy_stub
. - Déplacement de MIPS
.dynamic
vers le segment de données afin qu'il soit accessible en écriture. - Remplacement des valeurs codées en dur pour les symboles par des tailles de segment correctes pour MIPS.
- Suppression de l'option
-mno-shared
des options par défaut de la chaîne d'outils MIPS. L'option par défaut pour la chaîne d'outils Android est-fPIC
(ou-fpic
si compatible). Si vous ne spécifiez pas-mshared
,-fpic
,-fPIC
,-fpie
ou-fPIE
de manière explicite, le compilateur MIPS ajoute-mno-shared
, qui désactive le code indépendant de la position (PIC, position-independent code). Le compilateur a été corrigé de façon à ne pas ajouter-mno-shared
dans ce cas. - Correction des noms de package incorrects dans les exemples
hello-jni
ettwo-libs
afin que le projettests
sous-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
gdbserver
detoolchain/<arch-os-ver>/prebuilt/gdbserver
versprebuilt/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++/include
et delib
verssources/cxx-stl/gnu-libstdc++/4.6
en cas de compilation avec GCC 4.6, ou verssources/cxx-stl/gnu-libstdc++/4.4.3
en cas de compilation avec GCC 4.4.3. - Déplacement de
libbfd.a
et delibintl.a
delib/
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.sh
pour générer une nouvelle chaîne d'outils hébergée par Linux qui génère les exécutables Win32 et Win64. - Amélioration de la vitesse de
download-toolchain-sources.sh
grâce à l'utilisation de la commandeclone
, la commandecheckout
n'étant utilisée que pour les répertoires nécessaires à la création des binaires de la chaîne d'outils NDK. - Ajout des scripts
build-host-gcc.sh
etbuild-host-gdb.sh
. - Ajout de
tests/check-release.sh
pour vérifier le contenu d'un répertoire d'installation NDK donné ou d'un package NDK existant. - Réécriture des tests autonomes
tests/standalone/run.sh
.
- Ajout de
- Suppression de l'en-tête
if_dl.h
de toutes les plates-formes et architectures. Les élémentsAF_LINK
etsockaddr_dl
qu'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.html
dans le package NDK.Par défaut, le code est généré pour les appareils ARM. Pour créer des builds compatibles avec les plates-formes MIPS, vous pouvez ajouter
mips
à la définition deAPP_ABI
dans votre fichierApplication.mk
. Par exemple, la ligne suivante indique àndk-build
de compiler votre code pour trois ABI distinctes :APP_ABI := armeabi armeabi-v7a mips
À moins d'utiliser des sources d'assemblage propres à l'architecture, telles que du code assembleur ARM, vous n'avez normalement pas besoin de modifier vos fichiers
Android.mk
pour compiler du code machine MIPS. - Vous pouvez créer une chaîne d'outils MIPS autonome à l'aide de l'option
--arch=mips
lorsque vous 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 baseb
vers 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.sh
de 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.cmd
pour garantir le bon fonctionnement dendk-build.cmd
mê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_COMMANDS
surtrue
dans 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.h
pour éviter les problèmes d'exactitude sur certains appareils ARM multicœurs. Recréez vos sources non modifiées avec cette version du NDK. Ce problème devrait avoir complètement disparu. Pour en savoir plus, consultezdocs/ANDROID-ATOMICS.html
. - Rétablissement de
binutils
2.19 pour corriger les problèmes de débogage qui se produisaient dans NDK r7 (qui était passé àbinutils
2.20.1). - Correction de
ndk-build
sous Linux 32 bits. Suite à une erreur de packaging, une version 64 bits de l'exécutableawk
avait été placée sousprebuilt/linux-x86/bin
dans NDK r7. - Correction du build Windows natif (
ndk-build.cmd
). Les autres modes de compilation ne sont pas concernés. Les corrections apportées sont les suivantes :- Suppression d'un bug de boucle infinie/débordement de pile qui se produisait lors d'une tentative d'appel de
ndk-build.cmd
à partir d'un répertoire qui ne figurait pas à la racine du chemin d'accès au projet (mais, par exemple, dans l'un de ses sous-répertoires). - Correction du problème faisant que les fichiers de dépendances générés automatiquement étaient ignorés. Cela signifie que la mise à jour d'un en-tête ne déclenchait pas la recompilation des sources qui l'incluaient.
- Correction d'un problème faisant que les caractères spéciaux autres que les espaces et les guillemets dans les fichiers ou les chemins d'accès n'étaient pas correctement traités.
- 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_shared
pour créer une association avec la version de la bibliothèque partagée, ou-lstdc++
pour la version statique.Pour en savoir plus sur ce correctif, consultez
docs/STANDALONE-TOOLCHAIN.html
. - Correction de
gnustl_shared
sur Cygwin. L'éditeur de liens signalait 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_FEATURES
sur'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-gdb
fonctionne désormais correctement lorsque votre application dispose de services privés qui s'exécutent dans des processus indépendants. Il débogue le processus principal de l'application au lieu du premier processus listé 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_MODE
et compilait toujours certains fichiers sources (mais pas tous) en instructions 32 bits. STLport
: actualisation des sources pour qu'elles correspondent à la version de la plate-forme Android. Cette mise à jour corrige quelques bugs mineurs :- Correction de l'instanciation d'un type incomplet
- Correction d'une faute de frappe mineure : "==" au lieu de "="
- Utilisation de
memmove
au lieu dememcpy
dansstring::assign
- Amélioration de la gestion de
IsNANorINF
,IsINF
,IsNegNAN
, etc.
Pour en savoir plus, consultez le journal de commit.
STLport
: suppression de cinq initialiseurs statiques inutiles de la bibliothèque.- Les bibliothèques GNU libstdc++ pour armeabi-v7a étaient compilées par erreur pour armeabi. Cette modification n'avait aucun impact sur l'exactitude, mais l'utilisation de la bonne ABI devrait améliorer légèrement les performances.
- La bibliothèque d'aide
cpu-features
a été mise à jour pour indiquer trois fonctionnalités de processeur x86 facultatives (SSSE3
,MOVBE
etPOPCNT
). Pour en savoir plus, consultezdocs/CPU-FEATURES.html
. docs/NDK-BUILD.html
a été mis à jour afin d'indiquerNDK_APPLICATION_MK
au lieu deNDK_APP_APPLICATION_MK
pour la sélection d'un fichierApplication.mk
personnalisé.- Cygwin :
ndk-build
ne crée plus de fichier "NUL" vide dans le répertoire actuel lorsqu'il est appelé. - Cygwin : amélioration de la détection automatique des dépendances. Dans la version précédente, elle ne fonctionnait pas correctement dans les cas suivants :
- lorsque le préfixe du lecteur Cygwin n'était pas
/cygdrive
; - lors de l'utilisation de montages sans lecteur, par exemple lorsque Cygwin convertissait
/home
en\\server\subdir
au lieu deC:\Some\Dir
.
- lorsque le préfixe du lecteur Cygwin n'était pas
- Cygwin :
ndk-build
n'essaie pas d'utiliser les outils Windows natifs sous$NDK/prebuilt/windows/bin
avec certaines versions de Cygwin et/ou GNU Make.
- 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.html
et http://www.khronos.org/openmax/. - Mise à jour de l'API audio native basée sur la norme OpenSL ES 1.0.1 du Khronos Group. Avec le niveau d'API 14, vous pouvez désormais décoder des fichiers audio compressés (par exemple, MP3, AAC ou Vorbis) vers le format PCM. Pour en savoir plus, consultez
docs/opensles/index.html
et http://www.khronos.org/opensles/.
- Ajout 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_CCACHE
surccache
(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. Par exemple :export NDK_CCACHE=ccache
Remarque : CCache n'est pas inclus dans la version du NDK. Vous devez donc l'installer avant de l'utiliser. Pour en savoir plus sur CCache, consultez la page http://ccache.samba.org.
- Ajout de la possibilité de définir
APP_ABI
surall
pour indiquer que vous souhaitez créer vos modules NDK pour toutes les ABI compatibles avec la version du NDK donnée. Cela signifie que l'une des deux lignes suivantes de votre fichierApplication.mk
correspond à cette version :APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Cela fonctionne également si vous définissez
APP_ABI
lorsque 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_FEATURES
dansAndroid.mk
pour vous permettre de déclarer les fonctionnalités C++ (RTTI ou Exceptions) que votre module utilise. Cela garantit que l'association finale fonctionnera correctement si vous disposez de modules prédéfinis qui dépendent de ces fonctionnalités. Pour en savoir plus, consultezdocs/ANDROID-MK.html
etdocs/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_PATH
pour 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.cmd
sur la ligne de commande à partir du chemin d'accès à votre projet. Le script utilise exactement les mêmes arguments que le scriptndk-build
d'origine. Le package NDK Windows est fourni avec ses propres binaires prédéfinis pour GNU Make, Awk et les autres outils requis par le build. Vous n'avez pas besoin d'installer quoi que ce soit d'autre pour obtenir un système de compilation opérationnel.Important :
ndk-gdb
ne fonctionne pas sous Windows. Vous avez donc toujours besoin de Cygwin pour le débogage.Cette fonctionnalité est encore expérimentale. N'hésitez donc pas à l'essayer et à signaler les problèmes sur la base de données des bugs publique ou sur le forum public. Tous les exemples et les tests unitaires fournis avec le NDK peuvent être compilés avec cette fonctionnalité.
- Correction de bugs importants
-
- Les bibliothèques partagées importées sont désormais installées par défaut à l'emplacement d'installation cible (
libs/<abi>
) siAPP_MODULES
n'est pas défini dans votre fichierApplication.mk
. Par exemple, si un module de premier niveaufoo
importe un modulebar
,libfoo.so
etlibbar.so
sont tous deux copiés dans l'emplacement d'installation. Auparavant, seullibfoo.so
était copié, sauf si vous aviez également listébar
dansAPP_MODULES
. Si vous définissezAPP_MODULES
de manière explicite, le comportement reste inchangé. ndk-gdb
fonctionne désormais correctement pour les activités comportant plusieurs catégories dans leurs filtres d'intent MAIN.- Les importations de bibliothèques statiques sont désormais effectivement transitives. Par exemple, si un module de premier niveau
foo
importe la bibliothèque statiquebar
qui importe la bibliothèque statiquezoo
,libfoo.so
est désormais associé à la fois àlibbar.a
et à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.html
mis à jour. - Ajout d'un environnement d'exécution compatible avec C++ nommé
gnustl_shared
et correspondant à la version de bibliothèque partagée de GNU libstdc++ v3 (licence GPLv3). Pour en savoir plus, 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.cpp
etbar.cxx
en tant que sources C++, déclarez ce qui suit :LOCAL_CPP_EXTENSION := .cpp .cxx
- Suppression de nombreux symboles exportés indésirables des bibliothèques système partagées au moment de l'association fournies par le NDK. Ainsi, le code généré avec la chaîne d'outils autonome ne risque pas de dépendre accidentellement d'un symbole d'ABI instable (par exemple, un symbole libgcc.a qui change à chaque modification de la chaîne d'outils utilisée pour créer la plate-forme).
- Actualisation des en-têtes EGL et OpenGLES Khronos pour accepter davantage d'extensions. Notez que cela ne modifie pas les ABI du NDK pour les bibliothèques correspondantes, car chaque extension doit être vérifiée par l'application cliente au moment de l'exécution.
Les extensions disponibles dépendent de votre appareil et des pilotes de GPU, et non de la version de la plate-forme sur laquelle l'appareil s'exécute. Les modifications d'en-tête ajoutent simplement de nouvelles constantes et de nouveaux types afin de faciliter l'utilisation des extensions lorsqu'elles ont été vérifiées par
eglGetProcAddress()
ouglGetProcAddress()
. La liste suivante recense les nouvelles extensions compatibles :- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
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/include
pour les builds x86. Pour en savoir plus, consultez le bug. - Correction des définitions de
ptrdiff_t
etsize_t
dans 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.html
dans le package NDK.Par défaut, le code est généré pour les appareils ARM, mais vous pouvez ajouter x86 à la définition de
APP_ABI
dans votre fichierApplication.mk
pour créer des builds compatibles avec les plates-formes x86. Par exemple, la ligne suivante indique àndk-build
de compiler votre code pour trois ABI distinctes :APP_ABI := armeabi armeabi-v7a x86
À moins d'utiliser des sources d'assemblage ARM, vous n'avez normalement pas besoin de modifier vos fichiers
Android.mk
pour compiler du code machine x86. - Vous pouvez créer une chaîne d'outils x86 autonome à l'aide de l'option
--toolchain=x86-4.4.3
lorsque vous appelezmake-standalone-toolchain.sh
. Pour en savoir plus, consultezdocs/STANDALONE-TOOLCHAIN.html
. - Le nouvel outil
ndk-stack
vous permet de convertir les traces de la pile danslogcat
qui sont générées par du code natif. Il convertit les adresses d'instructions dans un format lisible qui contient des informations telles que la fonction, le fichier source et le numéro de ligne correspondant à chaque bloc de pile. Pour en savoir plus et obtenir un exemple d'utilisation, 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_LIBRARIES
de 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_static
lors de son exécution sur des plates-formes antérieures au niveau d'API 8 (Android 2.2). ndk-gdb
: correction d'un bug qui entraînait une erreur de segmentation lors du débogage d'appareils Android 3.0 ou version ultérieure.<android/input.h>
: deux fonctions introduites dans le niveau d'API 9 (Android 2.3) étaient incorrectes et ont été corrigées. Bien que cela fasse planter l'API source, l'interface binaire du système reste inchangée. Il manquait un paramètrehistory_index
dans les fonctions incorrectes. Les définitions correctes sont les suivantes :float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- Mise à jour du binaire ARM de la bibliothèque C pour le niveau d'API 9 (Android 2.3) afin d'exposer correctement au moment de l'association les nouvelles fonctions ajoutées à ce niveau d'API (par exemple,
pthread_rwlock_init
).
- Améliorations et corrections mineures
-
- Les fichiers objets sont désormais toujours associés dans l'ordre dans lequel ils figurent dans
LOCAL_SRC_FILES
. Ce n'était pas le cas auparavant, car les fichiers étaient regroupés par extensions sources. - En cas d'échec,
import-module
affiche désormais la liste des répertoires concernés par la recherche. Cela vous permet de vérifier que la définition deNDK_MODULE_PATH
utilisée par le système de compilation est correcte. - En cas de réussite,
import-module
affiche désormais dans le journal le répertoire où le module a été trouvé (visible 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 shell
et amélioration des messages d'erreur.<pthread.h>
: correction de la définition dePTHREAD_RWLOCK_INITIALIZER
pour le niveau d'API 9 (Android 2.3) ou version ultérieure.- Correction d'un problème faisant qu'un module pouvait s'importer lui-même, créant ainsi une boucle infinie dans GNU Make.
- Correction d'un bug qui entraînait l'échec de la compilation si
LOCAL_ARM_NEON
était défini sur "true" (faut de frappe dansbuild/core/build-binary.mk
). - Correction d'un bug qui empêchait la compilation des fichiers d'assemblage
.s
(les fichiers.S
ne présentaient aucun problème).
- 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++.
- 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=1
dans 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_PATH
de fonctionner correctement lorsqu'elle contenait plusieurs répertoires séparés par un signe deux-points. - Le script
prebuilt-common.sh
contient des correctifs qui permettent de rechercher du code machine 64 bits dans le compilateur, au lieu de se fier à la balise d'hôte, ce qui permet à la chaîne d'outils 32 bits d'effectuer une recompilation correcte sous Snow Leopard. Les scripts de recompilation de la chaîne d'outils sont désormais compatibles avec l'utilisation d'une chaîne d'outils hôte 32 bits. - Une déclaration manquante pour
INET_ADDRSTRLEN
a été ajoutée à<netinet/in.h>
. - Les déclarations manquantes pour
IN6_IS_ADDR_MC_NODELOCAL
etIN6_IS_ADDR_MC_GLOBAL
ont été ajoutées à<netinet/in6.h>
. - "asm" a été remplacé par "__asm__" dans
<asm/byteorder.h>
pour permettre la compilation avec-std=c99
.
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
cpufeatures
pour une meilleure indication du type de processeur (certains appareils indiquaient un processeur ARMv7 alors qu'il s'agissait en fait d'un processeur ARMv6). Nous recommandons aux développeurs qui utilisent cette bibliothèque de recompiler leurs applications, puis de les importer sur Google Play pour bénéficier des améliorations apportées. - Ajout d'une bibliothèque EGL qui vous permet de créer et de gérer des textures et des services OpenGL ES.
- Ajout des applications exemples
native-plasma
etnative-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'ABIarmeabi
existante afin d'inclure ces extensions contenant un ensemble d'instructions pour le processeur :- Instructions pour Thumb-2.
- Instructions pour le FPU du matériel VFP (VFPv3-D16).
- Compatibilité facultative avec les fonctionnalités intrinsèques d'ARM Advanced SIMD (NEON) GCC et VFPv3-D32. Les appareils compatibles sont par exemple Verizon Droid de Motorola, Google Nexus One, etc.
- Ajout de la bibliothèque statique
cpufeatures
(avec sources), qui permet à votre application de détecter les fonctionnalités du processeur de l'appareil hôte lors de l'exécution. Plus précisément, les applications peuvent vérifier la compatibilité avec ARMv7-A, ainsi qu'avec VFPv3-D32 et NEON, puis fournir des chemins de code distincts si nécessaire. - Ajout d'une application exemple,
hello-neon
, qui montre comment vérifier les fonctionnalités du processeur à l'aide de la bibliothè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
.apk
final de votre application. - Pour que vos applications ne soient accessibles aux utilisateurs que si leurs appareils sont capables de les exécuter, Google Play les filtre désormais en fonction des informations de leur ensemble d'instructions. Aucune action n'est requise de votre part pour activer le filtrage. De plus, le système Android vérifie lui aussi votre application au moment de l'installation, qui ne se poursuit que si l'application fournit une bibliothèque compilée pour l'architecture du processeur de l'appareil.
- Ajout de la compatibilité avec Android 2.2, y compris une nouvelle API stable permettant d'accéder aux tampons de pixels des objets
Bitmap
à partir du code natif.
- 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.