Historial de revisión de NDK

En esta página, se brinda información sobre los cambios realizados a las versiones estables lanzadas del NDK. Para descargar la versión estable más reciente del NDK o cualquier versión beta disponible, visita la página de descarga del NDK.

Consulta el Grupo de Google android-ndk-announce para obtener información más completa y suscríbete para recibir anuncios de lanzamientos.

NDK de Android de LTS r27 (julio de 2024)

Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • KitKat dejó de ser compatible (niveles de API 19 y 20).
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Incluye las APIs de Android 13.
  • Se actualizó LLVM a clang-r450784d según el desarrollo de LLVM 14.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Se quitó el ensamblador GNU (GAS). Si compilaste con -fno-integrated-as, deberás quitar esa marca. Consulta las Notas de migración de Clang para obtener consejos para hacer que el ensamblaje sea compatible con LLVM.
  • Se quitó GDB. En su lugar, usa LLDB. Ten en cuenta que ndk-gdb usa LLDB de forma predeterminada, y Android Studio solo es compatible con LLDB.
  • Jelly Bean (niveles de API 16, 17 y 18) ya no es compatible. El SO mínimo compatible con el NDK es KitKat (nivel de API 19).
  • Ya no se admiten dispositivos que no sean Neon. Una cantidad menor de dispositivos muy antiguos no admiten Neon, por lo que la mayoría de las apps no notarán las mejoras en el rendimiento.
  • Se quitó la compatibilidad con la compilación de RenderScript. RenderScript dejó de estar disponible en Android 12. Si no terminaste de migrar las apps de RenderScript, se puede usar NDK de LTS r23.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Se quitó el elemento GNU binutils, con la excepción de GNU Assembler (GAS). En la próxima versión se quitará GAS. Si estás compilando con -fno-integrated-as, informa errores en el caso de que algo te impida quitar esa marca.
  • Ya no se admite GDB. Se quitará GDB de la próxima versión. En su lugar, usa LLDB. Ten en cuenta que ndk-gdb usa LLDB de forma predeterminada.
  • NDK r23 es la última versión que admitirá elementos que no sean compatibles con Neon. A partir de NDK r24, las bibliotecas armeabi-v7a en sysroot se compilarán con Neon. Una cantidad menor de dispositivos muy antiguos no admiten Neon, por lo que la mayoría de las apps no notarán las mejoras en el rendimiento.
  • Jelly Bean (niveles de API 16, 17 y 18) no será compatible en la próxima versión del NDK. El SO mínimo compatible con el NDK para r24 será KitKat (nivel de API 19).
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • El elemento binutils de GNU dejó de estar disponible y se quitará en una próxima versión del NDK. Ten en cuenta que el ensamblador GNU (as) es parte de él. Si estás compilando con -fno-integrated-as, informa errores en el caso de que algo te impida quitar esa marca. Si usas as directamente, utiliza clang en su lugar.
  • Ahora, LLD es el vinculador predeterminado. También se migraron ndk-build y nuestro archivo de la cadena de herramientas de CMake para usar llvm-ar y llvm-strip.
  • ndk-gdb ahora usa lldb como depurador. gdb dejó de estar disponible y se quitará en una versión futura. Para recurrir a gdb, usa la opción --no-lldb. Sin embargo, te sugerimos que informes un error en el que expliques por qué no puedes usar lldb.
  • Ahora se incluye compatibilidad con std::filesystem. Hay dos errores conocidos:
    • Error 1258: es posible que std::filesystem::perm_options::nofollow no se respete en dispositivos antiguos.
    • Error 1260: std::filesystem::canonical funcionará correctamente por error cuando se pase una ruta de acceso inexistente en dispositivos antiguos.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • Ya no se admite Windows de 32 bits. Este cambio no afecta a la gran mayoría de los usuarios. Si todavía necesitas compilar apps del NDK a partir de versiones de Windows de 32 bits, sigue usando NDK r20.

    Si quieres obtener más información sobre este cambio en las Herramientas para desarrolladores de Android, consulta la entrada de blog relacionada.

  • LLD ya está disponible para pruebas. Ahora, AOSP usa LLD de forma predeterminada y sucederá lo mismo con el NDK (se desconoce la fecha). Prueba LLD en tu app incluyendo -fuse-ld=lld durante la vinculación. Ten en cuenta que el error 843 afectará a las compilaciones que usen LLD con binutils strip y objcopy en lugar de llvm-strip y llvm-objcopy.
  • Las rutas de instalación antiguas de la cadena de herramientas se quitarán en las próximas versiones. Estas rutas quedaron obsoletas desde el NDK r19 y ocupan una gran cantidad de espacio en el NDK. Las rutas que se quitarán son las siguientes:
    • platforms
    • sources/cxx-stl
    • sysroot
    • toolchains (excepto toolchains/llvm)
    En general, este cambio debería afectar solamente a los encargados de mantener el sistema de compilación o a los que usan sistemas de compilación que no están actualizados. No se ven afectados los usuarios de ndk-build, los de la cadena de herramientas de CMake ni los de make_standalone_toolchain.py (aunque esa secuencia de comandos dejó de ser necesaria a partir de r19). Si quieres obtener información sobre cómo realizar la migración desde el diseño heredado de la cadena de herramientas, consulta la Guía para encargados de mantener sistemas de compilaciones correspondiente a la versión del NDK que estés utilizando.
  • A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
  • Ahora hay un paquete de aplicaciones de macOS firmado y certificado que se puede descargar desde nuestra wiki y sitio web. Ten en cuenta que, debido a que solo los paquetes pueden usar RPATH y pasar la certificación, el paquete tradicional del NDK para macOS no se puede certificar. El SDK seguirá usando el paquete tradicional, ya que el paquete de la aplicación requiere cambios de diseño que lo harían incompatible con Android Studio. El NDK no se coloca en modo de cuarentena cuando se descarga a través de SDK Manager, por lo que Gatekeeper lo permite. Actualmente, SDK Manager es la forma más confiable de obtener el NDK para macOS.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • LLD ya está disponible para pruebas. Estamos en proceso de establecer LLD como herramienta predeterminada para trabajar en el AOSP. Luego, haremos lo mismo para el NDK (se desconoce la fecha estimada de esta implementación). Prueba LLD en tu app incluyendo -fuse-ld=lld durante la vinculación.
  • A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
  • Se agregaron APIs de Android Q.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • Los desarrolladores deben comenzar a probar sus apps con LLD. Establecimos LLD como herramienta predeterminada para trabajar en el AOSP. Haremos lo mismo para el NDK en su próxima actualización. BFD y Gold desaparecerán una vez que LLD haya completado un ciclo de lanzamiento sin mayores problemas (se estima r21). Prueba LLD en tu app incluyendo -fuse-ld=lld durante la vinculación. Nota: Por el momento, lld no es compatible con símbolos comprimidos en Windows. Error 888. Clang tampoco puede generar símbolos comprimidos en Windows, pero esto puede convertirse en un problema cuando se usan los artefactos diseñados en Darwin o Linux.
  • A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
  • Error 780: Ya no son necesarias las cadenas de herramientas independientes. Clang, binutils, el sysroot y otros elementos de cadenas de herramientas vienen instalados en $NDK/toolchains/llvm/prebuilt/<host-tag> y Clang los encontrará automáticamente. En lugar de crear una cadena de herramientas independientes para API 26 ARM, invoca al compilador directamente desde el NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    . En el caso de r19, la cadena de herramientas independientes también está instalada en la antigua ruta para darles a los sistemas de compilaciones una oportunidad de adaptarse al nuevo diseño. Se quitarán las antiguas rutas en r20. No se quitará la secuencia de comandos make_standalone_toolchain.py. No es necesaria en este momento y presentará una advertencia con la información detallada más arriba, pero la secuencia de comandos continuará activa para preservar los flujos de trabajos existentes. Si estás usando ndk-build, CMake o una cadena de herramientas independientes, no deberías observar ningún cambio en tu flujo de trabajo. Este cambio solo afectará a quienes mantengan los sistemas de compilaciones de terceros, que ahora deberían poder borrar algunos códigos específicos de Android. Para obtener más información, consulta la guía para encargados de mantener sistemas de compilaciones.
  • Se quitó ndk-depends. Creemos que ReLinker es una mejor solución para lidiar con los problemas de carga que afectan a las bibliotecas nativas en versiones antiguas de Android.
  • Error 862: Se quitó la secuencia de comandos del contenedor GCC que solía redireccionar a Clang, ya que funcionaba como un remplazo sencillo.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Se quitó GCC.
  • LLD ya está disponible para pruebas. Estamos en proceso de establecer LLD como herramienta predeterminada para trabajar en el AOSP. Luego, haremos lo mismo para el NDK (se desconoce la fecha estimada de esta implementación). Prueba LLD en tu app incluyendo -fuse-ld=lld durante la vinculación.
  • Se quitaron gnustl, gabi++ y stlport.
  • Se quitó la compatibilidad con ICS (android-14 y android-15). Las apps que utilizan ejecutables ya no necesitan proporcionar un ejecutable PIE y otro no PIE.
  • A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Ya no se admite GCC. Se quitará en la versión r18 del NDK.
  • libc++ ahora es el STL predeterminado para CMake y cadenas de herramientas independientes. Si seleccionaste un STL diferente de forma manual, te recomendamos que migres a libc++. Ten en cuenta que ndk-build todavía no tiene ningún STL predeterminado. Para obtener más información, consulta esta entrada de blog.
  • Dimos de baja gnustl y stlport, y se quitarán en la versión r18 del NDK.
  • Se quitó la compatibilidad con ARMv5 (armeabi), MIPS y MIPS64. Si intentas compilar cualquiera de estas ABI, obtendrás un error.
  • Se quitará la compatibilidad con ICS (android-14 y android-15) en r18.
  • A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • Se quitaron los encabezados dados de baja. Ahora, los encabezados unificados se denominan "Los encabezados". Para obtener sugerencias de migración, consulta las Notas de migración de los encabezados unificados.
  • Ya no se admite GCC. Si bien no se quitará del NDK, dejará de recibir adaptaciones. No se podrá quitar hasta que libc++ sea lo suficientemente estable como para poder usarse de forma predeterminada, ya que algunas partes de gnustl siguen siendo incompatibles con Clang. Se quitará cuando se eliminen otros STL, en r18.
  • libc++ no está incluido en la versión beta y es el STL preferido en el NDK. A partir de r17, libc++ será el STL predeterminado para CMake y las cadenas de herramientas independientes. Si seleccionaste un STL diferente de forma manual, te recomendamos que migres a libc++. Para obtener más información, consulta esta entrada de blog.
  • Se dio de baja la compatibilidad con ARM5 (armeabi), MIPS y MIPS64. Ya no se compilarán de forma predeterminada con ndk-build, pero se podrán seguir compilando si se nombran explícitamente, y se incluirán en "all", "all32" y "all64". Se quitó compatibilidad con estos elementos en r17. Tanto CMake como ndk-build emitirán una advertencia si orientas tu contenido a alguno de estos ABI.
APIs

Se agregaron APIs nativas a Android 8.1. Para obtener más información sobre estas APIs, consulta la Descripción general de las APIs nativas.

Para obtener información adicional sobre las novedades y los cambios de esta actualización, consulta el registro de cambios.

Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Avisos
  • Los encabezados unificados están habilitados de forma predeterminada. Para aprender a usarlos, consulta Encabezados unificados.
  • Nota: Se quitarán los encabezados obsoletos en un próximo lanzamiento. Si tienes algún problema con estos encabezados, infórmanos.

    Para obtener sugerencias de migración, consulta las Notas de migración de los Encabezados unificados.

  • Ya no se admite GCC. Aún no se quitó del NDK, pero ya no recibe adaptaciones. No se podrá quitar hasta que libc++ sea lo suficientemente estable como para poder usarse de forma predeterminada, ya que algunas partes de gnustl siguen siendo incompatibles con Clang.
  • Android 2.3 (android-9) ya no es compatible. En este momento, el nivel mínimo de API admitido por el NDK es Android 4.0 (android-14). Si tu APP_PLATFORM tiene una configuración inferior a android-14, se usará android-14.
  • CMake en el NDK ahora es compatible con la compilación de código ensamblado escrito en YASM para ejecutarse en arquitecturas x86 y x86-64. Para obtener más información, consulta el Cómo compilar código ensamblado.
APIs

Se agregaron APIs nativas a Android 8.0. Para obtener más información sobre estas APIs, consulta la Descripción general de las APIs nativas.

Para obtener información adicional sobre las novedades y los cambios de esta actualización, consulta el registro de cambios.

Registro de cambios
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Encabezados unificados: Esta versión introduce encabezados de plataforma que están sincronizados y se mantienen actualizados con la plataforma Android. Las correcciones de errores exclusivas para encabezados ahora afectan a todos los niveles de API. La introducción de encabezados unificados corrige inconsistencias en versiones anteriores del NDK, como las siguientes:
    • Los encabezados en M y N eran, de hecho, encabezados para L.
    • Las declaraciones de funciones en los encabezados no coincidían con sus niveles de plataforma. Por lo tanto, declaraban funciones inexistentes o no declaraban las disponibles.
    • Varios de los antiguos niveles de API tenían constantes que faltaban o eran incorrectas, que se encontraban en niveles de API más recientes.

    Estos nuevos encabezados unificados no están habilitados de forma predeterminada. Para aprender a habilitar y usar estos encabezados, consulta Encabezados unificados.

  • Baja de GCC: Este lanzamiento ya no es compatible con GCC. No se quitará GCC del NDK, pero dejará de recibir adaptaciones. No se podrá quitar GCC hasta que libc++ sea lo suficientemente estable como para poder usarse de forma predeterminada, ya que algunas partes de gnustl siguen siendo incompatibles con Clang.

Para obtener información adicional sobre las novedades y los cambios de esta actualización, consulta el registro de cambios.

Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • Ya no se admite GCC. Si bien no se quitará del NDK, dejará de recibir adaptaciones. No se podrá quitar hasta que libc++ sea lo suficientemente estable como para poder usarse de forma predeterminada, ya que algunas partes de gnustl siguen siendo incompatibles con Clang. Es posible que se quite después de ese momento.
  • Se agregó simpleperf, un generador de perfiles de CPU para Android.
r13b
NDK
  • El valor predeterminado de NDK_TOOLCHAIN_VERSION ahora es Clang.
  • Se actualizó libc++ a la versión r263688.
  • Se restableció a una versión estable. Esto debería quitar una serie de errores, pero todavía necesitamos borrar libandroid_support antes de recomendarlo como predeterminado.
  • Ahora, make-standalone-toolchain.sh es solo un wrapper de la versión de Python de la herramienta. Hay algunas diferencias de comportamiento. Para obtener más información, consulta el mensaje de confirmación.
  • Se quitaron algunas bibliotecas de ABI no compatibles (mips64r2, mips32r6, mips32r2 y x32). Es posible que todavía haya algunas versiones rezagadas.
  • Se resolvieron los problemas con crtbegin_static.o que provocaron la falta de atexit en el momento del vínculo al compilar un archivo ejecutable estático para ARM android-21+: Error 132
  • Se agregó el archivo del conjunto de herramientas de CMake en build/cmake/android.toolchain.cmake.
Problemas conocidos
  • Este registro no está pensado para ser una lista completa de todos los errores destacados.
  • No funcionan los conjuntos de herramientas independientes que utilizan libc++ y GCC. Parece ser un error en GCC. Para obtener más información, consulta el mensaje de confirmación.
  • Aún no se expusieron las bibliotecas y los encabezados biónicos para Marshmallow y N, a pesar de la presencia de android-24. Esas plataformas siguen siendo las bibliotecas y los encabezados Lollipop (no una regresión de r11).
  • No están presentes las herramientas de RenderScript (esto no es una regresión de r11): Error 7.
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • El comando ndk-build tiene como predeterminado el uso de Clang en r13. Quitaremos GCC en una versión posterior.
  • La secuencia de comandos make-standalone-toolchain.sh se quitará en r13. Asegúrate de que make_standalone_toolchain.py se adapte a tus necesidades.
  • Informa los problemas en GitHub.
r12b
  • Se corrigió ndk-gdb.py. (Error 118)
  • Se actualizó NdkCameraMetadataTags.h para que ya no contenga un valor de enumeración no válido.
  • Se corrigió un error en ndk-build que generaba advertencias falsas de bibliotecas estáticas que usaban libc++. Para obtener más información sobre este cambio, consulta los comentarios aquí.
  • Se actualizaron los encabezados de OpenSLES para android-24.
NDK
  • Se quitó la compatibilidad con la ABI de armeabi-v7a-hard. Para obtener más información, consulta esta explicación.
  • Se quitaron los sysroots de niveles de plataforma pre-GB. Quitamos la compatibilidad con ellos en r11, pero no los quitamos.
  • La administración de excepciones con el uso de c++_shared en ARM32 ahora funciona casi por completo. El desenredador ahora estará conectado a cada objeto vinculado en lugar de a libc++ mismo. Para obtener más información sobre esta administración de excepciones, consulta Problemas conocidos.
  • Se recortaron los indicadores predeterminados del compilador. (Error 27).
  • Se agregó una implementación Python de cadenas de herramientas independientes: build/tools/make_standalone_toolchain.py.
    • Los usuarios de Windows ya no necesitan Cygwin para usar esta función.
    • Quitaremos la variante de bash en r13. Prueba la nueva ahora.
  • Se habilitó -fno-limit-debug-info de manera predeterminada para compilaciones de depuración de Clang. Este cambio debe mejorar la eliminación de errores con LLDB.
  • --build-id ahora está habilitado de forma predeterminada.
    • El ID de compilación ahora aparecerá en los informes de fallas por error en código nativo para que puedas identificar fácilmente la versión de tu código que funcionaba.
  • NDK_USE_CYGPATH no debe generar más problemas con libgcc. (Error 195486 de Android)
  • Las opciones -Wl, --warn-shared-textrel y -Wl,--fatal-warnings ahora están habilitadas de forma predeterminada. Si compartiste reubicaciones de texto, tu app no se podrá cargar en Android 6.0 (API nivel 23) o versiones posteriores. Las reubicaciones de texto nunca estuvieron permitidas para apps de 64 bits.
  • Los encabezados compilados previamente deben funcionar mejor. (Error 14 y Error 16)
  • Se quitaron las bibliotecas de STL ARM (no thumb) inalcanzables.
  • Se agregó compatibilidad con Vulkan a android-24.
  • Se agregó la API de Choreographer a android-24.
  • Se agregaron APIs de libcamera2 para dispositivos que admiten la función INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED o posterior. Para obtener más información, consulta las Características de cámara.
Clang
  • Se actualizó Clang a 3.8svn (r256229, compilación 2812033).
    • Los archivos ejecutables clang.exe y clang++.exe en el paquete de Windows de 32 bits son, de hecho, de 64 bits. El archivo ejecutable de 32 bits se llama clang_32.exe.
  • __thread debería funcionar bien esta vez.
GCC
  • Se sincronizó con el GCC de Chrome en google/gcc-4_9 r227810.
  • Se incluyó portabilidad a versiones anteriores del parche suavizante de cobertura de ToT (r231296).
  • Se corrigió libatomic para que no use ifuncs. (Error 31)
Binutils
  • Se silenciaron los mensajes de información "Erratum 843419 found and fixed".
  • Se agregó la opción --long-plt para corregir el error de vinculador interno que se produce cuando se vinculan objetos binarios arm32 de gran tamaño.
  • Se corrigió el tiempo de ejecución incorrecto para AArch64. Esto hacía que las direcciones de salto se calcularan de forma incorrecta para DSO de tamaño muy amplio.
  • Se agregó la opción predeterminada --no-apply-dynamic para solucionar un error del vinculador dinámico para versiones anteriores de Android.
  • El NDK r11 KI para dynamic_cast no funciona con Clang. Se corrigió x86, stlport_static, y se realizaron otras optimizaciones.
GDB
  • Se actualizó a GDB 7.11. Para obtener más información, consulta la página de Noticias sobre GDB.
  • Se realizaron algunas correcciones de errores para ndk-gdb.py.
Problemas conocidos
  • ASAN x86 aún no funciona. Para obtener más información, consulta el análisis sobre esta lista de cambios.
  • El desenredo de excepción con c++_shared sigue sin funcionar con ARM en Android 2.3 (API nivel 9) o Android 4.0 (API nivel 14).
  • A pesar de la presencia de android-24, aún no se expusieron las bibliotecas ni los encabezados de Bionic para Android 6.0 (API nivel 23) y Android 7.0 (API nivel 24). Esas plataformas siguen siendo las bibliotecas y los encabezados de Android 5.0 (nivel de API 21) (esto no es una regresión de r11).
  • No están presentes las herramientas de RenderScript (esto no es una regresión de r11). (Error 7)
  • Este registro de cambios no está pensado para ser una lista completa de todos los errores destacados.
Descargas
  • Las descargas de esta versión están disponibles aquí.
Anuncios
  • El comando ndk-build tendrá como predeterminado el uso de Clang en una próxima actualización. Se quitará GCC en una próxima versión.
  • Se quitará la secuencia de comandos make-standalone-toolchain.sh en una próxima versión. Si usas esta secuencia de comandos, planifica la migración a make_standalone_toolchain.py lo antes posible.
NDK
  • Quitamos la compatibilidad con la ABI de armeabi-v7a-hard. Consulta la explicación en la documentación.
  • Se quitaron todos los sysroots de niveles de plataforma anteriores a Android 2.3 (nivel de API 9). Quitamos la compatibilidad con ellos en el NDK r11, pero no los eliminamos.
  • Se actualizó el control de excepciones cuando se usa c++_shared en ARM32 para que casi funcione por completo (consulta los Problemas conocidos). El desenredador ahora estará conectado a cada objeto vinculado en lugar de a libc++ mismo.
  • Se recortaron los indicadores predeterminados del compilador (Error de NDK 27). Consulta los detalles de esta actualización en Cambio 207721.
  • Se agregó una implementación Python de cadenas de herramientas independientes en build/tools/make_standalone_toolchain.py. En Windows, ya no necesitas Cygwin para usar esta función. Ten en cuenta que quitaremos la clase bash en una próxima versión. Por lo tanto, prueba la nueva ahora.
  • Se configuraron las compilaciones de depuración de Clang para que la opción -fno-limit-debug-info esté habilitada de forma predeterminada. Este cambio permite que el proceso de depuración sea más fluido con LLDB.
  • Se habilitó el --build-id como opción predeterminada. Debido a esta opción, el identificador ahora aparecerá en los informes de fallas por error en código nativo para que puedas identificar fácilmente la versión de tu código que se estaba ejecutando.
  • Se corrigió un problema de NDK_USE_CYGPATH para que ya no haya inconvenientes relacionados con libgcc. (Error 195486)
  • Se habilitaron las siguientes opciones como predeterminadas: -Wl,--warn-shared-textrel y -Wl,--fatal-warnings. Si has compartido reubicaciones de texto, tu app no se puede cargar en Android 6.0 (API nivel 23) ni versiones en posteriores. Ten en cuenta que nunca se permitió esta configuración para apps de 64 bits.
  • Se corrigieron algunos problemas para mejorar el funcionamiento de encabezados precompilados. (Error 14 del NDK y Error 16 del NDK)
  • Se quitaron las bibliotecas de STL ARM (no thumb) inalcanzables.
  • Se agregó compatibilidad con Vulkan a android-24.
  • Se agregó la API de Choreographer a android-24.
  • Se agregaron API de libcamera2 para dispositivos que admiten la función nivel INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED o una versión posterior. Para obtener más información, consulta la referencia de CameraCharacteristics.
Clang
  • Se actualizó Clang a 3.8svn (r256229, compilación 2812033). Los archivos ejecutables clang.exe y clang++.exe en el paquete de Windows de 32 bits son, de hecho, de 64 bits. El archivo ejecutable de 32 bits se llama clang_32.exe.
  • Se corrigió __thread para que funcione correctamente esta vez.
GCC
  • Se sincronizó el compilador con el GCC del Sistema operativo Chrome (google/gcc-4_9 r227810).
  • Se incluyó portabilidad a versiones anteriores del parche suavizante de cobertura de ToT (r231296).
  • Se corrigió libatomic para que no use ifuncs. (Error 31 del NDK)
Binutils
  • Se silenciaron los mensajes de información "Erratum 843419 found and fixed".
  • Se agregó la opción --long-plt para corregir el error de vinculador interno que se produce cuando se vinculan objetos binarios arm32 de gran tamaño.
  • Se corrigieron stubs de tiempo de ejecución incorrectos para AArch64. Esto hacía que las direcciones de salto se calcularan de forma incorrecta para DSO de tamaño muy amplio.
  • Se agregó la opción predeterminada --no-apply-dynamic para solucionar un error del vinculador dinámico en versiones anteriores de Android.
  • Se corrigió un problema conocido en el NDK r11 que impedía que dynamic_cast funcionara con Clang, x86 y stlport_static, y se realizaron otras optimizaciones.
GDB
  • Se actualizó GDB a la versión 7.11. Para obtener más información sobre esta versión, consulta Noticias de GDB.
  • Se corrigieron algunos errores en la secuencia de comandos ndk-gdb.py.
Problemas conocidos
  • No funciona Address Sanitizer x86 (ASAN). Para obtener más información, consulta el Error 186276.
  • El desenredo de excepción con c++_shared no funciona con ARM en Android 2.3 (API nivel 9) o Android 4.0 (API nivel 14).
  • A pesar de la presencia de android-24, aún no se expusieron las bibliotecas y los encabezados de Bionic para Android 6.0 (API nivel 23) y versiones posteriores. Esas plataformas aún conservan las bibliotecas y los encabezados de Android 5.0 (nivel de API 21), lo que concuerda con el NDK r11.
  • No aparecen las herramientas de RenderScript, lo que concuerda con el NDK r11. (Error de NDK 7)
  • En el archivo de encabezado NdkCameraMetadataTags.h, el valor enum de la etiqueta de metadatos de la cámara ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP se incluyó por accidente y se quitará en la próxima actualización. En su lugar, usa el valor ACAMERA_STATISTICS_LENS_SHADING_MAP.
Cambios
  • Se aplicaron correcciones adicionales a la secuencia de comandos ndk-gdb.py.
  • Se agregó un argumento de nombre de paquete opcional a la opción --attach del comando ndk-gdb. (Error 13)
  • Se corrigieron rutas de conjuntos de cadenas no válidos correspondiente a Windows de 32 bits. (Error 45)
  • Se corrigió la ruta relativa para el comando ndk-which. (Error 29)
  • Se corrigió el uso de cygpath para el compilador de libgcc. (Error de Android 195486)
NDK
  • Avisos importantes
    • Migramos nuestro rastreador de errores a GitHub.
  • Cambios
    • Se corrigió ndk-gdb.py. Se había revertido por completo en r11.
    • Se corrigió ndk-gdb para Mac.
    • Se agregaron más accesos directos de nivel superior para herramientas de líneas de comando:
      • ndk-depends.
      • ndk-gdb.
      • ndk-stack.
      • ndk-which. Comando no disponible en versiones anteriores.
    • Se corrigieron cadenas de herramientas independientes para libc ++, a las que les faltaba __cxxabi_config.h.
    • Se corrigió la documentación de ayuda de --toolchain en make-standalone-toolchain.sh.
Clang
  • Errata
    • Al contrario de lo que informamos en las Notas de la versión r11, __thread no funciona. Esto se debe a que a la versión de Clang que distribuimos le faltaba una corrección de errores relacionada con la compatibilidad de TLS emulada.
Clang
  • Avisos importantes
    • Te recomendamos que migres a Clang.
      • Si tienes problemas, informa aquí los errores específicos de Clang en el NDK. Para informar cualquier inconveniente por problemas más generales que estés teniendo, sigue las instrucciones de esta página.
    • Se actualizó Clang a la versión 3.8svn (r243773, compilación 2481030).
      • Esta es una versión pura de Clang.
      • El paquete del NDK descargable para Windows de 64 bits contiene la versión de 32 bits.
  • Elementos agregados
    • Clang ahora es compatible con TLS emulada.
      • El compilador ahora admite __thread por medio de la emulación de TLS de ELF con datos de subproceso pthread específicos.
      • thread_local para C++11 funciona en algunos casos, pero no para los datos que tienen destructores no triviales, dado que en esos casos se necesita compatibilidad con libc. Esta limitación no se aplica cuando se ejecuta Android 6.0 (API nivel 23) o una versión posterior.
      • La TLS emulada aún no funciona con Aarch64 cuando se accede a las variables desde una biblioteca compartida.
GCC
  • Anuncios importantes
    • Se dio de baja GCC en el NDK para dar paso a Clang.
      • No se actualizará en el NDK a 5.x ni se aceptarán adaptaciones que no sean críticas.
      • El mantenimiento de errores internos y de compilación en 4.9 se llevará a cabo caso por caso.
  • Eliminaciones
    • Se quitó GCC 4.8. Ahora se usará GCC 4.9.
  • Otros cambios
    • Se sincronizó google/gcc-4_9 con r224707. Anteriormente, se había hecho con r214835.
NDK
  • Avisos importantes
    • Ya no se incluyen las muestras en el paquete del NDK. En su lugar, están disponibles en GitHub.
    • Ya no se incluye la documentación en el paquete del NDK. En su lugar, está disponible en el sitio web para desarrolladores de Android.
  • Elementos agregados
    • Se agregó una API de seguimiento nativo a android-23.
    • Se agregó una API de multinetwork nativa a android-23.
    • Se habilitaron libc, m y dl para incluir símbolos de distintas versiones, a partir del nivel de API 21.
    • Se agregaron bibliotecas y encabezados Vulkan a la API nivel N.
  • Eliminaciones
    • Se quitó la compatibilidad con _WCHAR_IS_8BIT.
    • Se quitó sed.
    • Se quitó mclinker.
    • Se quitó Perl.
    • Se quitaron todos los símbolos de las versiones libc, m, y dl del NDK que las versiones de plataforma no admitían.
    • mips64r2 ahora es parcialmente compatible. Más adelante, dejará de serlo por completo.
  • Otros cambios
    • Se cambiaron las cadenas de herramientas independientes de ARM para que arm7 sea el valor predeterminado.
      • Para restablecer el comportamiento anterior, puedes especificar la opción -target como armv5te-linux-androideabi.
    • Se modificó el sistema de compilación para usar -isystem para inclusiones de plataforma.
      • Las advertencias ya no rompen las compilaciones de apps.
    • Se corrigió una falla aleatoria que se producía cuando un objeto binario arrojaba excepciones a través de gabi++ (Error 179410).
    • Se cambió el espacio de nombres intercalado de libc++ a std::__ndk1 para evitar errores de ODR con el libc++ de la plataforma.
    • Ahora todas las bibliotecas de libc++ están compiladas en la ABI de libc++.
    • Se estableció APP_PLATFORM como predeterminado de Gingerbread.
      • Se brindará compatibilidad con Froyo y versiones anteriores en un lanzamiento futuro.
  • Se actualizó la struct _Unwind_Exception de gabi++ para 64 bits.
  • Se agregaron las siguientes funciones a cpufeatures:
    • Detección de SSE4.1 y SSE4.2.
    • Detección de funciones de CPU en x86_64.
  • Se actualizó libc++abi para brindar compatibilidad con r231075.
  • Se actualizó byteswap.h, endian.h, sys/procfs.h, sys/ucontext.h, sys/user.h y uchar.h desde ToT Bionic.
  • Se sincronizó sys/cdefs.h en todos los niveles de API.
  • Se corrigió fegetenv and fesetenv para arm.
  • Se corrigió el end pointer de tamaño/alineación de crtend_* para mips64 y x86_64.
Binutils
  • Elementos agregados
    • Se agregó una nueva opción: --pic-veneer.
  • Eliminaciones
    • El paquete para Windows de 32 bits ya no contiene ld.gold. Puedes obtenerlo en el paquete de 64 bits.
  • Cambios
    • Se unificó la fuente de binutils entre Android y ChromiumOS. Para obtener más información sobre este cambio, consulta los comentarios aquí.
    • Se mejoró la fiabilidad de Gold para aarch64. Usa -fuse-ld=gold en el tiempo de vinculación para usar gold en lugar de bfd. Es posible que se establezca esta opción como predeterminada en la próxima versión.
    • Se mejoró el tiempo de vinculación para binarios enormes de Gold ARM backend (en un 50% para el navegador Chrome depurable).
GDB
  • Eliminaciones
    • Se reemplazó ndk-gdb por ndk-gdb.py.
  • Cambios
    • Se actualizó gdb a la versión 7.10.
    • Se mejoró el rendimiento.
    • Se mejoraron los mensajes de error.
    • Se corrigieron las rutas de acceso relativas de los proyectos.
    • Ctrl-C ya no finaliza los procesos en segundo plano de gdbserver.
    • Se mejoró la compatibilidad con Windows.
YASM
  • Cambios
    • Se actualizó YASM a la versión 1.3.0.
Problemas conocidos
  • Por el momento, no funciona el ASAN de x86. Para obtener más información, consulta la conversación aquí.
  • La combinación de Clang, x86, stlport_static y niveles de optimización superiores a -O0 provoca fallas de prueba con dynamic_cast. Para obtener más información, consulta los comentarios aquí.
  • El control de excepciones suele fallar con c++_shared en ARM32. Esto se debe a la falta de compatibilidad entre el desenredador de LLVM que usa libc++abi para ARM32 y libgcc. Este comportamiento no es una regresión de r10e.
Descargas
  • Las descargas de esta versión están disponibles aquí.
Cambios importantes:
  • Se integró la solución alternativa para Cortex-A53 Erratum 843419 en el vinculador aarch64-linux-android-4.9. Para obtener más información al respecto, consulta Solución alternativa para cortex-a53 erratum 843419.
  • Se agregó Clang 3.6. Ahora, NDK_TOOLCHAIN_VERSION=clang elige esa versión de forma predeterminada.
  • Se quitó Clang 3.4.
  • Se quitó GCC 4.6.
  • Se implementó la compatibilidad con varios subprocesos en ld.gold para todas las arquitecturas. Ahora se puede vincular con o sin esta compatibilidad. La opción predeterminada es la segunda.
    • Para compilar con varios subprocesos, usa la opción --threads.
    • De lo contrario, usa --no-threads.
  • Se actualizó GDB/gdbserver a la versión 7.7 para todas las arquitecturas.
  • Se quitó el paquete del NDK de Darwin para 32 bits.
Correcciones de errores importantes:
  • Se solucionó un error que se producía cuando había bucles de OpenMP fuera del subproceso principal.
  • Se corrigió un error interno del compilador (ICE) de GCC 4.9 que se producía cuando el usuario declaraba #pragma GCC optimize ("O0"), pero el nivel de optimización especificado en la línea de comandos era diferente. pragma tiene prioridad.
  • Se solucionó un problema que producía una falla con el siguiente mensaje de error:
    in add_stores, at var-tracking.c:6000
    
  • Se implementó una solución alternativa para un problema de Clang 3.5 en el que la vectorización automática de LLVM generaba llvm.cttz.v2i64(), una instrucción sin equivalente en el conjunto de instrucciones de ARM.
Otras correcciones de errores:
  • Se implementaron las siguientes mejoras en encabezados y bibliotecas:
    • Se corrigió PROPERTY_* en media/NdkMediaDrm.h.
    • Se corrigió sys/ucontext.h para mips64.
    • Se dio de baja la comprobación de versión de Clang para __builtin_isnan y __builtin_isinf.
    • Se agregaron android-21/arch-mips/usr/include/asm/reg.h y android-21/arch-mips64/usr/include/asm/reg.h.
  • Se corrigió una advertencia falsa de límites de arreglos que GCC 4.9 generaba para x86 y se volvieron a habilitar las advertencias que esa versión mostraba para ARM. La advertencia para ARM ya se había inhabilitado de forma incondicional.
  • Se corrigió Clang 3.5 para que mips y mips64 creen una sección .gcc_except_table que admita escritura, de modo que coincida con el comportamiento de GCC. Este cambio permite evitar la siguiente advertencia de vinculador:
    .../ld: warning: creating a DT_TEXTREL in a shared object
    
  • Se adaptó una solución para errores de compiler-rt que producían fallas cuando se compilaba Clang para mips64. Para obtener más información, consulta el error 20098 de LLVM.
  • Se corrigieron fallas de Clang 3.5 que se producían en comentarios ajenos a ASCII. (Error 81440)
  • Se corrigió stlport collate::compare para mostrar -1 y 1. Antes, mostraba números firmados de forma arbitraria.
  • Se corrigió ndk-gdb para las ABI de 64 bits. (Error 118300)
  • Se corrigió la falla que producía la muestra de HelloComputeNDK para RenderScript en Android 4.4 (nivel de API 19). Si deseas obtener más información, consulta esta página.
  • Se corrigió libc++ __wrap_iter para GCC. Para obtener más información, consulta el error 22355 de LLVM.
  • Se corrigió la compatibilidad de .asm para la ABI x86_64.
  • Se implementó una solución alternativa para el problema de stlport en GCC 4.8. (Error 127773)
  • Se quitó el separador de directorio final \\ de la ruta de acceso de los proyectos en Windows. (Error 160584)
  • Se corrigió un error no rule to make target que ocurría al compilar un solo archivo .c ejecutando el comando ndk-build.cmd desde gradle. (Error 66937)
  • Se agregaron las bibliotecas libatomic.a y libgomp.a que faltaban en las siguientes cadenas de herramientas de host:
    • aarch64-linux-android-4.9
    • mips64el-linux-android-4.9
    • mipsel-linux-android-4.9
    • x86_64-4.9
Otros cambios:
  • Se agregó ld.gold para aarch64. El vinculador predeterminado sigue siendo ld.bfd. Para habilitar ld.gold de forma explícita, agrega -fuse-ld=gold a la variable LOCAL_LDFLAGS o APP_LDFLAGS.
  • Se compilaron las cadenas de herramientas MIPS y MIPS64 con binutils-2.25, que brinda una mejor compatibilidad con R6.
  • Se estableció -fstandalone-debug (información de depuración completa) como opción predeterminada de Clang.
  • Se reemplazó -fstack-protector por -fstack-protector-strong para las cadenas de herramientas de ARM, AArch64, X86 y X86_64 de GCC 4.9, Clang 3.5 y Clang 3.6.
  • Se agregó el cambio de línea de comandos --package a ndk-gdb para permitir que el sistema de compilación anule el nombre del paquete. (Error 56189)
  • Se dio de baja -mno-ldc1-stc1 para MIPS. Es posible que esta opción no funcione con las nuevas opciones -fpxx y -mno-odd-spreg, o con la ABI de FPXX.
  • Se agregó la detección MIPS MSA y R6 a cpu-features.
Cambios importantes:
  • Se estableció GCC 4.8 como predeterminado para todos los ABI de 32 bits. Se dio de baja GCC 4.6 y se quitará en la próxima versión. Para restablecer el comportamiento anterior, agrega NDK_TOOLCHAIN_VERSION=4.6 a ndk-build o --toolchain=arm-linux-androideabi-4.6 cuando ejecutes make-standalone-toolchain.sh en la línea de comandos. GCC 4.9 sigue siendo el predeterminado de los ABI de 64 bits.
  • Se evitó que todas las cadenas de herramientas x86[_64] agregaran -mstackrealign de forma predeterminada. La cadena de herramientas del NDK asume una alineación de pila de 16 bytes. Las herramientas y opciones predeterminadas fuerzan esta regla. Un usuario que escribe código ensamblador debe asegurarse de preservar la alineación de pila, y verificar que otros compiladores también cumplan con esta regla. (Error 38496 de GCC)
  • Se agregó la funcionalidad de Address Sanitizer para brindar compatibilidad a Clang 3.5 con ARM y las ABI x86. Si quieres obtener más información sobre este cambio, consulta el proyecto Address Sanitizer.
  • Se agregó el requisito para que, a partir del nivel de API 21, se use -fPIE -pie cuando se compile. En nivel 16 o versiones posteriores, ndk-build usa PIE cuando compila. Este cambio tiene algunas implicancias, que se especifican en el Error 888 (vista previa para desarrolladores). Estas implicancias no se aplican a bibliotecas compartidas.
Correcciones de errores importantes:
  • Se implementaron más correcciones relacionadas con A53 Errata #835769 en el vinculador aarch64-linux-android-4.9. Como parte de esto, GCC presenta una nueva opción, --fix-cortex-a53-835769, cuando se especifica -mfix-cortex-a53-835769 (habilitado de forma predeterminada). Para obtener más información, consulta este mensaje de binutils y este otro.
  • Se documentó una corrección para la falta de respuesta sscanf/vsscanf de libc++ que se producía en el nivel de API 21. Se implementó la mejora en r10c. (Error 77988)
  • Se corrigió una falla de AutoFDO (-fauto-profile) que se producía en GCC 4.9 cuando se especificaba -Os. (Error 77571)
Otras correcciones de errores:
  • Se implementaron las siguientes mejoras en encabezados y bibliotecas:
    • Se agregó posix_memalign al nivel de API 16. Además, se agregó un prototipo en stdlib.h para los niveles de API 16 a 19. (Error 77861)
    • Se corrigió stdatomic.h para que incluya <atomic> solo en C++11.
    • Se modificaron los siguientes encabezados para uso independiente: sys/user.h y gl2ext.h, dlext.h, fts.h, sgidefs.h para el nivel de API 21.
    • Se modificó sys/user.h para cambiar el nombre de mxcsr_mask por mxcr_mask y cambiar el tipo de datos para u_ar0
    • de unsigned long a struct user_regs_struct*.
    • Se cambió el tipo de valor que se muestra para sysconf() de int a long.
  • Se corrigió el control de thumb de ndk-build para LOCAL_ARM_MODE. En r10d, ndk-build agrega LOCAL_LDFLAGS+=-mthumb de forma predeterminada, salvo que se aplique alguna de estas condiciones:
    • Configuraste LOCAL_ARM_MODE igual que arm.
    • Estás haciendo una compilación de depuración (con opciones como APP_OPTIM=debug y AndroidManifest.xml que contienen android:debuggable="true"), en la que el modo ARM es el predeterminado a fin de mantener la compatibilidad con cadenas de herramientas anteriores. (Error 74040)
  • Se corrigió LOCAL_SRC_FILES en ndk-build para usar las rutas de acceso absolutas de Windows. (Error 74333)
  • Se quitó el código específico de bash de ndk-gdb. (Error 73338)
  • Se eliminó el código específico de bash de make-standalone-toolchain.sh. (Error 74145)
  • Se revisó la documentación en relación con una corrección para dependencias transitivas System.loadLibrary(). (Error 41790)
  • Se corrigió un problema que impedía que los paquetes de 64 bits se extrajesen en Ubuntu 14.04 y OS X 10.10 (Yosemite). (Error 78148)
  • Se corrigió un error con LOCAL_PCH para mejorar la compatibilidad con Clang. (Error 77575)
  • Se aclaró la advertencia "requires executable stack" de ld.gold. (Error 79115)
Cambios importantes:
  • Se implementaron los siguientes cambios a la estructura de descarga:
    • Cada paquete ahora contiene los encabezados, las bibliotecas y las herramientas de 32 y 64 bits para su plataforma respectiva.
    • Ya no es necesario descargar por separado las bibliotecas STL que contienen información de depuración.
  • Todo lo que antes se llamaba Android-L ahora lleva la designación de la versión oficial: android-21.
  • Para actualizar GCC 4.9, se cambió el nombre a la rama google del repositorio de GCC. Entre las grandes diferencias de la versión ascendente de GCC 4.9, se incluyen las siguientes:
    • La opción -O2 ahora activa la vectorización, sin división de bucles, pero con un desenrollado más agresivo.
    • Mejoras para FDO y LIPO
    • Para obtener información más detallada, consulta la sección Correcciones de errores importantes que aparece más abajo.

  • Se agregó compatibilidad con Clang 3.5 a todos los hosts: NDK_TOOLCHAIN_VERSION=clang ahora elige esta versión. Ten en cuenta lo siguiente:
    • Ahora, ARM y x86 usan el ensamblador integrado de forma predeterminada. Si esto genera problemas, usa -fno-integrated-as como solución alternativa.
    • Clang 3.5 genera más advertencias para marcas sin usar, como la opción -finline-functions que GCC admite.
    • Cuando migres desde proyectos que usen GCC, puedes usar -Wno-invalid-command-line-argument y -Wno-unused-command-line-argument para ignorar marcas sin usar hasta que decidas qué hacer con ellas a largo plazo.

  • Ahora es posible ingresar al modo de depuración de ART en dispositivos Android 5.0 usando ART como máquina virtual; para ello, se debe especificar la opción art-on. Para obtener más información, consulta prebuilt/common/gdb/common.setup en el directorio que contiene el NDK.
  • Se quitó la compatibilidad con Clang 3.3.
  • Se dio de baja GCC 4.6 y posiblemente se quite en versiones futuras.
  • Se actualizó mclinker a 2.8 con compatibilidad para Identical Code Folding ("ICF"). Especifica ICF usando la opción --icf.
  • Se amplió la compatibilidad de arm_neon.h a x86 y x86_64 para cubrir aproximadamente un 93% de los elementos intrínsecos de NEON. Para obtener más información sobre la compatibilidad con NEON:
    • Ve a la Guía para desarrolladores de NDK (docs/Programmers_Guide/html/) y consulta Arquitecturas y CPU > NEON.
    • Examina la muestra actualizada de hello-neon en samples/.
    • Consulta la guía de Intel para brindar portabilidad de ARM NEON a Intel SSE.
  • Se documentó la compatibilidad con _FORTIFY_SOURCE en headers/libs/android-21, que aparecía en r10 (cuando android-21 aún se llamaba Android-L), pero no tenía documentación.
Correcciones de errores importantes:
Otras correcciones de errores:
  • Se implementaron las siguientes mejoras en encabezados y bibliotecas de android-21:
    • Se agregaron más claves de código de TV: android/keycodes.h
    • Se agregaron más constantes y seis nuevas funciones de sensores a android/sensor.h: ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount, ASensor_getFifoReservedEventCount, ASensor_getStringType, ASensor_getReportingMode y ASensor_isWakeUpSensor.
    • Se corrigió stdatomic.h para mejorar la compatibilidad con GCC 4.6 y admitir el encabezado <atomic>.
    • Se agregó sys/ucontext.h y sys/user.h a todos los niveles de API. El encabezado signal.h ahora incluye <sys/ucontext.h>. Puedes quitar cualquier definición existente de struct ucontext.
    • Se agregó posix_memalign a los niveles de API 17, 18 y 19.
    • Se agregaron las siguientes funciones a todas las arquitecturas: android_set_abort_message, posix_fadvise, posix_fadvise64, pthread_gettid_np.
    • Se agregaron los permisos obligatorios a la muestra native-media/AndroidManifest.xml. (Error 106640)
    • Se agregó clock_nanosleep y clock_settime al nivel de API 21. (Error 77372)
    • Se quitaron los siguientes símbolos de todas las arquitecturas: 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 y dlmalloc.
    • Se quitaron las siguientes funciones de las arquitecturas de 64 bits: basename_r, dirname_r, __isthreaded, _flush_cache (mips64).
    • Se quitó la siguiente función de las arquitecturas de 32 bits: __signalfd4.
    • Se cambió el tipo del tercer argumento de size_t a int en las siguientes funciones: strtoll_l, strtoull_l, wcstoll_l y wcstoull_l.
    • Se restauraron las siguientes funciones en la arquitectura de 64 bits: arc4random, arc4random_buf y arc4random_uniform.
    • Se revirtieron cxa_* y los operadores new y delete a libstdc++.so. Este cambio restablece el comportamiento de r9d. Las versiones anteriores de r10 contenían archivos de marcación de posición.
  • Se restableció la compatibilidad con MXU en GCC 4.8 y 4.9 para mips. Esta compatibilidad no existía en r10 ni en r10b debido a que esas versiones de GCC se habían compilado con binutils-2.24, que no admitía MXU. Ahora sí lo admite.
  • Se corrigió --toolchain= en make-standalone-toolchain.sh para que ahora sea compatible con el uso de un sufijo que especifique una versión de Clang.
  • Se corrigieron las funciones strtod() de libc++/armeabi.
  • Se corrigió a la documentación del NDK en docs/.
Otros cambios:
  • Se mejoró cpu-features para detectar compatibilidad con ARMv8 en los siguientes conjuntos de instrucciones: AES, CRC32, SHA2, SHA1 y PMULL/PMULL2 de 64 bits. (Error 106360)
  • Se modificó ndk-build para usar *-gcc-ar, que está disponible en GCC 4.8, GCC 4.9 y Clang. Clang lo especifica en lugar de *-ar. Esta configuración mejora la compatibilidad con LTO.
  • Se quitaron los encabezados include-fixed/linux/a.out.h y include-fixed/linux/compiler.h del compilador GCC. (Error 73728)
  • Se corrigió un error asociado a -flto con GCC 4.8 en Mac OS X. El mensaje de error decía lo siguiente:
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • Se corrigió un error de ortografía en build-binary.mk.. (Error 76992)
Problemas conocidos importantes:
  • Especificar -Os (-fauto-profile) en GCC4.9 podría provocar fallas. (Error 77571)
Aviso importante:
  • Debido a la restricción de tamaño de 512 MB en los paquetes descargables, los siguientes elementos de 32 bits no se encuentran en los paquetes de descarga del NDK de 32 bits. En su lugar, están en los de 64 bits:
    • Encabezados de Android-L
    • GCC 4.9
  • Actualmente, la única compatibilidad de RenderScript proporcionada por el NDK es para RenderScript de 32 bits con Android 4.4 (nivel de API 19). No se puedes compilar HelloComputeNDK (la única muestra de RenderScript) con ninguna otra combinación de Renderscript (32 o 64 bits) y la versión Android.
  • Para compilar native-code, debes utilizar un paquete de NDK de 64 bits, que es donde se encuentran todos los encabezados de Android-L.
Correcciones de errores importantes:
  • Se corrigió gdb 7.6 en GCC 4.8/4.9. (Errores 74112 y 74371)
  • Se corrigió GCC 4.8/4.9 para x86, por lo que ya no habilitan -msse4.2 y -mpopcnt de forma predeterminada. (Error 73843).
Otras correcciones de errores:
  • Se quitó stdio.h de los directorios include-fixed/ en todas las versiones de GCC. (Error 73728)
  • Se quitaron los archivos de encabezados duplicados de los paquetes de Windows en los directorios platforms/android-L/arch-*/usr/include/linux/netfilter*/. (Error 73704).
  • Se corrigió un problema que impedía a Clang compilar HelloComputeNDK.
  • Se corrigió atexit. (Error 66595)
  • Se hicieron varias correcciones a los documentos en docs/ y sources/third_party/googletest/README.NDK. (Error 74069).
  • Se hicieron las siguientes correcciones a los encabezados de Android L:
    1. Se agregaron las siguientes funciones a ctype.h y wchar.h: dn_expand(), grantpt(), inet_nsap_addr(), inet_nsap_ntoa(), insque(), nsdispatch(), posix_openpt(), __pthread_cleanup_pop(), __pthread_cleanup_push(), remque(), setfsgid(), setfsuid(), splice(), tee(), twalk() (error 73719) y 42 funciones *_l().
    2. Se cambió el nombre de cmsg_nxthdr a __cmsg_nxthdr.
    3. Se quitó __libc_malloc_dispatch.
    4. Se cambió el prototipo ptrace() a long ptrace(int, ...);.
    5. Se quitó sha1.h.
    6. Se amplió android_dlextinfo a android/dlext.h.
    7. Se agregaron anotaciones a __NDK_FPABI__ para funciones que reciben o muestran valores de doble tipo o flotantes en stdlib.h, time.h, wchar.h y complex.h.
Otros cambios:
  • Se actualizaron mipsel-linux-android-4.9 y mips64el-linux-android-4.9, con la implementación de un nuevo diseño de directorio multilib y la compatibilidad con gdb-7.7
  • Se mejoró cpu-features para que detecte más funciones arm64. (Lista de cambios 100339).
Cambios importantes:
  • Se agregaron 3 nuevas ABI de 64 bits: arm64-v8a, x86_64 y mips64.
  • Ten en cuenta lo siguiente:
    • GCC 4.9 es el compilador predeterminado para ABI de 64 bits. La versión actual de Clang es 3.4. NDK_TOOLCHAIN_VERSION=clang podría no funcionar con arm64-v8a y mips64.
    • Android L es el primer nivel compatible con 64 bits. Ten en cuenta que este nivel de API es temporario y solo para la vista previa de L. Otro número de nivel reemplazará a este cuando se lance L.
    • Ahora, esta actualización incluye configuraciones all32 y all64 para APP_ABI.
      • APP_ABI=all32 es igual a APP_ABI=armeabi,armeabi-v7a,x86,mips.
      • APP_ABI=all64 es igual a APP_ABI=arm64-v8a,x86_64,mips64.
      • APP_ABI=all selecciona todas las ABI.
    • El nuevo libstdc++ de GNU en Android L contiene todos los elementos <tr1/cmath>. Antes de definir tu propia función matemática, a fin de evitar errores de "definiciones múltiples" del vinculador, consulta _GLIBCXX_USE_C99_MATH_TR1 para ver si ya existe una función con ese nombre.
    • Se actualizó la biblioteca de cpu-features library para el kernel de ARMv8. Es posible que las bibliotecas vigentes no detecten NEON en la plataforma de ARMv8. Vuelve a compilar tu código con la nueva versión.
  • Se agregó un nuevo directorio de API platforms/android-L/. Incluye lo siguiente:
    • Se actualizaron los encabezados de Bionic, que no se habían cambiado desde los niveles de API 3 (Cupcake) a 19 (KitKat). Esta nueva versión, para el nivel L, debe sincronizarse con AOSP.
    • Nuevas API multimedia y una muestra de native-codec.
    • Un encabezado Android.h actualizado para SLES/OpenSLES, que brinda compatibilidad con el formato de audio de punto flotante de precisión simple en AudioPlayer.
    • GLES 3.1 y extensiones de AEP para libGLESv3.so.
    • Se actualizaron los encabezados GLES2 y GLES3 a las versiones oficiales más recientes de Khronos.
  • Se agregaron compiladores de GCC 4.9 a los ABI de 32 y 64 bits. GCC 4.9 es el (único) compilador predeterminado para ABI de 64 bits, como se mencionó anteriormente. Para ABI de 32 bits, debes habilitar GCC 4.9 de forma explícita, ya que GCC 4.6 sigue siendo la versión predeterminada.
    • Para ndk-build, habilita la compilación de GCC 4.9 de 32 bits ya sea agregando NDK_TOOLCHAIN_VERSION=4.9 a Application.mk o exportándolo como una variable de entorno desde la línea de comandos.
    • Para una cadena de herramientas independiente, usa la opción --toolchain= en la secuencia de comandos make-standalone-toolchain.sh. Por ejemplo: --toolchain=arm-linux-androideabi-4.9.
  • Se actualizó GDB a la versión 7.6 en GCC 4.8/4.9 y x86*. Como GDB todavía está disponible en la versión GDB-7.3.x de GCC 4.6 (la configuración predeterminada para ARM y MIPS), debes establecer NDK_TOOLCHAIN_VERSION=4.8 o 4.9 para habilitar ndk-gdb para seleccionar GDB 7.6.
  • Se agregó la opción de compilación -mssse3 para proporcionar compatibilidad con SSSE3, y se estableció como predeterminada para ABI x86 (actualizada desde SSE3). La imagen que lanzó Google no contiene instrucciones sobre SSSE3.
  • Se actualizó GCC 4.8 a 4.8.3.
  • Se mejoró la compatibilidad con ARM libc++ EH cambiando de gabi++ a libc++abi. Para obtener información detallada, consulta la sección "Compatibilidad con C++" de la documentación. Ten en cuenta lo siguiente:
    • Todas las pruebas de configuración regional ahora pasan a Clang 3.4 y GCC 4.8. Para obtener más información, consulta la sección "Compatibilidad con C++" de la documentación.
    • Las bibliotecas libc+++ para X86 y MIPS libc+++ siguen usando gabi++.
    • GCC 4.7 y versiones posteriores ahora pueden usar <atomic>.
    • Debes agregar -fno-strict-aliasing si usas <list>, ya que __list_imp::_end_ infringe las reglas de TBAA. (Error 61571).
    • A partir de GCC 4.6, LIBCXX_FORCE_REBUILD:=true ya no vuelve a compilar a libc++. Para hacerlo, necesitarás otro compilador. Aún no se probó Clang 3.3.
  • mclinker está en versión 2.7, e incluye compatibilidad con aarch64 en Linux.
  • Se agregó compatibilidad con encabezados precompilados que se hayan especificado con LOCAL_PCH. (Error 25412).
Correcciones de errores importantes:
  • Se corrigió libc++ para que ahora compile std::feof, etc. (Error 66668).
  • Se corrigió una llamada a la biblioteca atómica de Clang 3.3/3.4 que causaba fallas en algunas de las pruebas de libc++ para la ABI de armeabi.
  • Se corrigieron fallas de Clang 3.4 que se producían en la lectura de los encabezados precompilados. (Error 66657).
  • Se corrigió la aserción -O3 de Clang 3.3/3.4 en:
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!". (Error 57381)
  • Se corrigió la siguiente falla de Clang 3.3/3.4:
  • 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. (Error 66950).
Otras correcciones de errores:
  • Se corrigieron encabezados:
    • Se corrigió ssize_t de 32 bits para que sea int en lugar de long int.
    • Se corrigieron WCHAR_MIN y WCHAR_MAX para que tengan los signos correctos según la arquitectura en la que se ejecuten:
      • X86/MIPS: firmado.
      • ARM: sin firmar.
      • Para forzar X86/MIPS a la opción predeterminada sin firmas, usa -D__WCHAR_UNSIGNED__.
      • Para forzar wchar_t y que sea de 16 bits, usa -fshort-wchar.
    • Se quitaron símbolos inexistentes de libc.so de 32 bits y se agregaron pread64, pwrite64 y ftruncate64 para el nivel de API 12 o superior de Android. (Error 69319). Para obtener más información, consulta el mensaje que acompaña la lista de cambios 94137 de AOSP.
  • Se corrigió una advertencia de GCC sobre la redefinición de putchar. El mensaje de advertencia dice lo siguiente:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (Lista de cambios 91185).
  • Se corrigió make-standalone-toolchain.sh --stl=libc++ para que suceda lo siguiente:
    • Copie cxxabi.h. (Error 68001).
    • Se ejecuta en directorios que no sean el de instalación del NDK. (Errores 67690 y 68647).
  • Se corrigió GCC/Windows para citar argumentos solo cuando sea necesario para procesos de reproducción en programas externos. Este cambio disminuye la probabilidad de exceder el límite de longitud de 32K.
  • Se corrigió un problema que hacía imposible ajustar la variable de entorno de APP_PLATFORM.
  • Se corrigió la implementación de IsSystemLibrary() en crazy_linker para que use strrchr() en lugar de strchr() para encontrar el verdadero nombre de base de la ruta de acceso a la biblioteca.
  • Se corrigió la incapacidad de native-audio de compilar en el modo de depuración.
  • Se corrigió la incapacidad de gdb para imprimir números extremos en coma flotante. (Error 69203).
  • Se corrigió la incapacidad de Clang 3.4 de compilar con -Wl,-shared (a diferencia de -shared, que no tenía errores). El problema era que Clang agregaba -pie para Android si no existía -shared ni -static. Este comportamiento incorrecto provocaba que el vinculador indicara que -shared y -pie no podían coexistir.
Otros cambios:
  • Se agregó arm_neon.h a la cadena de herramientas de x86 para que ahora emule cerca del 47% de NEON. Aún no se admiten los tipos de 64 bits. Para obtener más información, consulta la sección sobre la compatibilidad intrínseca de ARM Neon en la documentación de x86.
  • Optimización de ARM/GOT_PREL portado (presente en GCC 4.6 compilado desde la rama de Google de GCC) a ARM GCC 4.8/4.9. Esta optimización a veces reduce el número de instrucciones cuando se accede a variables globales. Como ejemplo, consulta la secuencia de comandos build.sh en $NDK/tests/build/b14811006-GOT_PREL-optimization/.
  • Se agregó la versión ARM para STL gabi++, stlport y libc++. Ahora todos tienen tanto esta versión como el modo Thumb.
  • Ahora se puede llamar a la secuencia de comandos make-standalone-toolchain.sh con --toolchain=x86_64-linux-android-4.9, que equivale a --toolchain=x86_64-4.9.
Cambios importantes:
  • Se agregó compatibilidad con el compilador Clang 3.4. La opción NDK_TOOLCHAIN_VERSION=clang ahora elige Clang 3.4. GCC 4.6 sigue siendo el compilador predeterminado.
  • Se agregó APP_ABI=armeabi-v7a-hard, con opción multilib adicional -mfloat-abi=hard. Estas opciones se utilizan con ARM GCC 4.6/4.8 y Clang 3.3/3.4 (que utilizan el ensamblador, el vinculador y las bibliotecas de 4.8). Cuando uses estas opciones, ten en cuenta los siguientes cambios:
    • Cuando ejecutes la secuencia de comandos ndk-build, agrega las siguientes opciones para armeabi-v7a:
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      . Se copia la biblioteca compilada a libs/armeabi-v7a. Para que Make se comporte según lo esperado, no puedes especificar tanto armeabi-v7a como armeabi-v7a-hard como objetivos de Make (es decir, en la línea APP_ABI=). Si lo haces, se ignorará una opción. Ten en cuenta que APP_ABI=all sigue siendo igual a armeabi armeabi-v7a x86 mips.
    • La secuencia de comandos make-standalone-toolchain.sh copia bibliotecas adicionales en los directorios /hard. Agrega las marcas CFLAGS y LFLAGS anteriores a tu archivo Make para permitir que GCC o Clang se vinculen con las bibliotecas en /hard.
  • Agrega el ensamblador yasm, así como las funciones experimentales LOCAL_ASMFLAGS y EXPORT_ASMFLAGS para x86. La secuencia de comandos ndk-build usa prebuilts/*/bin/yasm* para compilar LOCAL_SRC_FILES que tienen la extensión .asm.
  • Se actualizó MClinker a 2.6.0, lo que brinda compatibilidad con -gc-sections.
  • Se agregó compatibilidad experimental con libc++ (ascendente r201101). Para usar esta nueva función, sigue estos pasos:
    • Agrea APP_STL := c++_static o APP_STL := c++_shared en Application.mk. Puedes volver a compilar desde la fuente mediante LIBCXX_FORCE_REBUILD := true
    • Ejecuta make-standalone-toolchain.sh --stl=libc++ para crear una cadena de herramientas independiente con encabezados y bibliotecas libc++.
    Para obtener más información, consulta CPLUSPLUS-SUPPORT.html. (Error 36496)
Correcciones de errores importantes:
  • Se corrigió un lanzamiento no detectado de un controlador de excepción inesperado para el ARM EABI de GCC 4.6/4.8. (Error 59392 de GCC)
  • Se corrigió GCC 4.8 para que ahora resuelva correctamente la especialización parcial de una plantilla con un argumento dependiente. (Error 59052 de GCC)
  • Se agregaron más módulos para precompilar en Python (error 59902):
    • Mac OS X: zlib, bz2, _curses, _curses_panel, _hashlib y _ssl
    • Linux: zlib, nis, crypt, _curses y _curses_panel
  • Se corrigió el event_getmsg_helper de x86 y MIPS gdbserver.
  • Se corrigieron varios problemas de la cadena de herramientas del NDK de RenderScript, incluidos errores de compatibilidad entre dispositivos antiguos y reflexión de C++.

Otras correcciones de errores:
  • Correcciones de encabezados:
    • Se corrigió un #include <sys/types.h> faltante en android/asset_manager.h para el nivel de API 13 o superior de Android. (Error 64988)
    • Se corrigió un #include faltante en android/rect_manager.h para la API nivel 14 o superior de Android.
    • Se agregó JNICALL a JNI_OnLoad y JNI_OnUnload en jni.h. Ten en cuenta que JNICALL se define como __NDK_FPABI__. Para obtener más información, consulta sys/cdefs.h.
    • Se actualizaron los siguientes encabezados para que se puedan incluir sin necesidad de agregar manualmente sus dependencias (error 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
    • Se agregó sys/cachectl.h para todas las arquitecturas. Los desarrolladores de MIPS ahora pueden incluir este encabezado en lugar de escribir #ifdef __mips__.
    • Se corrigió platforms/android-18/include/android/input.h agregando __NDK_FPABI__ a las funciones que tomaban o mostraban valores flotantes o dobles.
    • Se corrigió struct stat de MIPS, que se había establecido de forma incorrecta como su equivalente de 64 bits para la API nivel 12 o posterior de Android. Esta configuración incorrecta fue una regresión que se introdujo en la versión r9c.
    • Se definieron __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE y __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE para la API nivel 9 y versiones anteriores.
    • Se agregaron scalbln, scalblnf y scalblnl a x86 libm.so para el nivel de API 18 y versiones posteriores.
    • Se corrigió un error de ortografía en sources/android/support/include/iconv.h. (Error 63806)
  • Se corrigió gabi++ std::unexpected() para que llame a std::terminate() y se pueda ejecutar un controlador std::terminate() definido por el usuario.
  • Se corrigió gabi++ para detectar std::nullptr.
  • Se corrigieron muestras de Teapot y MoreTeapots:
    • Se corrigió un problema con chips Tegra 2 y 3 cambiando variables especulares por precisión de medios. Los valores de potencia especular ahora pueden ser inferiores a 1.0.
    • Se cambiaron las muestras para que, cuando se presione el botón de volumen, se restablezca el modo envolvente y se invalide SYSTEM_UI_FLAG_IMMERSIVE_STICKY. La rotación de pantalla no activa onSystemUiVisibilityChange y, por lo tanto, no restablece el modo envolvente.
  • Se corrigió la secuencia de comandos ndk-build para agregar -rpath-link=$SYSROOT/usr/lib y -rpath-link=$TARGET_OUT para poder usar ld.bfd con el objetivo de vincular archivos ejecutables. (Error 64266)
  • Se quitó -Bsymbolic de todas las compilaciones de STL.
  • Se corrigió ndk-gdb-py.cmd configurando SHELL como una variable de entorno en lugar de transmitirlo a python.exe, que ignora la configuración. (Error 63054)
  • Se corrigió la secuencia de comandos make-standalone-toolchain.sh para que la opción --stl=stlport copie los encabezados de gabi++ en lugar de realizar symlinks entre ellos. Los shells de cmd.exe y MinGW no entienden estos symlinks que crea cygwin.
Otros cambios:
  • Se aplicaron permisos de ejecución a todas las secuencias de comandos *cmd que anteriormente se debían usar solo en el shell cmd.exe, en caso de que los desarrolladores prefieran usar ndk-build.cmd en cygwin en lugar de la secuencia de comandos ndk-build recomendada.
  • Se mejoró la velocidad de la secuencia de comandos make-standalone-toolchain.sh usando la acción de mover en lugar de la de copiar si el directorio de destino especificado no existe.

Esta versión solo incluye correcciones de errores.

Correcciones de errores importantes:
  • Se corrigió un problema con el ARM de GCC 4.8, en el que el puntero de pila se restablecía muy pronto. Este problema impedía que el puntero del marco accediera de forma fiable a una variable en el marco de la pila. (Error 58854 de GCC)
  • Se corrigió un problema con GCC 4.8 libstdc++, en el que un error en std::nth_element estaba causando la generación de código que producía una falla aleatoria de segmento. (Error 62910)
  • Se corrigió ICE de GCC 4.8 en cc1/cc1plus con -fuse-ld=mcld para que no aparezca el siguiente error:
    cc1: internal compiler error: in common_handle_option, at
    opts.c:1774
  • Se corrigió la compatibilidad de -mhard-float para las funciones matemáticas __builtin. Para obtener información continua sobre correcciones de -mhard-float con STL, consulta el error 61784.
Otras correcciones de errores:
  • Correcciones de encabezados:
    • Se cambió el prototipo de poll a poll(struct pollfd *, nfds_t, int); en poll.h.
    • Se agregó utimensat a libc.so para la API nivel 12 y la API nivel 19 de Android. Ahora se incluyen esas bibliotecas para todos los niveles desde la API nivel de 12 hasta la API nivel 19 de Android.
    • Se agregó futimens en libc.so para la API nivel 19 de Android.
    • Se agregaron clock_settime() y clock_nanosleep() faltantes a time.h para la API nivel 8 o superior de Android.
    • Se agregaron CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, y CLOCK_BOOTTIME_ALARM en time.h..
    • Se quitaron CLOCK_REALTIME_HR y CLOCK_MONOTONIC_HR. obsoletos.
  • En muestras de Teapot, MoreTeapots y source/android/ndk_helper:
    • Se cambiaron para que ahora usen un abi de hard-float para armeabi-v7a.
    • Se actualizaron para que usen el modo envolvente en la API nivel 19 y versiones posteriores.
    • Se corrigió un problema con Check_ReleaseStringUTFChars en /system/lib/libdvm.so que causaba fallas en dispositivos x86.
  • Se corrigieron fallas de ndk-build que se producían en cygwin cuando se hacía referencia al paquete del NDK mediante un symlink.
  • Se corrigieron fallas de ndk-build.cmd que se producen en las ventanas cmd.exe cuando LOCAL_SRC_FILES contiene rutas de acceso absolutas. (Error 69992)
  • Se corrigió la secuencia de comandos ndk-stack para que continúe funcionando incluso cuando no puede analizar un marco debido a la imposibilidad de encontrar una rutina, un nombre de archivo o un número de línea. En cualquiera de estos casos, se muestra ??.
  • Se corrigió la pila ndk-stack para objetivos Windows-x64_64 de modo que ya no coincida erróneamente una línea de marco con una línea de la sección stack: que no contenga pc, eip ni ip. Por ejemplo:
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • Se corrigió gabi++ para que no ocurra lo siguiente:
    • No utiliza malloc() para asignar objetos C++ thread-local.
    • Evita los bloqueos en gabi++ en los casos en que libc.debug.malloc no es cero en las versiones de la plataforma Android userdebug/eng.
Otros cambios:
  • Se agregó LOCAL_EXPORT_LDFLAGS.
  • Se agregó la configuración NDK_PROJECT_PATH=null para su uso en un sistema de compilación integrado donde las opciones se pasan explícitamente a ndk-build. Con esta configuración, ndk-build no hace ningún intento de buscar NDK_PROJECT_PATH.. Esta configuración también evita que las variables deriven las configuraciones predeterminadas de NDK_PROJECT_PATH. Como resultado, ahora se deben especificar explícitamente las siguientes variables (con sus valores predeterminados, si existen): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (opcional, predeterminado a 0) y otras APP_* contenidas en Application.mk.
  • Ahora se puede enumerar APP_ABI en una lista de valores delimitados con coma. Por ejemplo:
    APP_ABI := "armeabi,armeabi-v7a"
  • Se incluyó la capacidad de reconstruir todo STL con información de depuración en un paquete opcional separado, llamado android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, con la opción -g. Esta opción ayuda a la secuencia de comandos ndk-stack a proporcionar un mejor volcado de pila a través de STL. Este cambio no debe afectar el código/tamaño del archivo final.
  • Se mejoraron las muestras de hello-jni para informar APP_ABI en la compilación.
  • Se usó la herramienta ar en modo Determinista (opción -D) para compilar bibliotecas estáticas. (Error 60705)
Cambios importantes:
  • Se actualizó include/android/*h y math.h para todos los niveles de API hasta el 18, incluida la adición de los niveles 13, 15, 16 y 17 de Android. Para obtener más información sobre las APIs agregadas, consulta los mensajes de confirmación relacionados con los cambios 68012 y 68014. (Errores 47150, 58528 y 38423)
  • Se agregó compatibilidad con la API nivel 19, incluida la vinculación con RenderScript.
  • Se agregó compatibilidad con -mhard-float en la ABI de armeabi-v7a existente. Para obtener más información y consultar las restricciones actuales de Clang, consulta tests/device/hard-float/jni/Android.mk.
  • Se migró de GNU Compiler Collection (GCC) 4.8 a 4.8.2 y se agregó compatibilidad con los colores de diagnóstico. Para habilitar los colores de diagnóstico, configura -fdiagnostics-color=auto, -fdiagnostics-color=always, o exporta GCC_COLORS como se muestra a continuación:
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    . Para obtener más información, visita GCC Language Independent Options.
  • Se agregaron dos nuevos ejemplos para demostrar las funciones de OpenGL ES 3.0: Teapot y MoreTeapots. Estas muestras se ejecutan en dispositivos con Android 4.1 (nivel de API 16) y versiones posteriores.
  • Se dio de baja la compatibilidad con GCC 4.7 y Clang 3.2, que se quitará en la próxima versión.
Correcciones de errores importantes:
  • Se corrigió el problema en el que thumb2 de ARM GCC 4.6 no generaba tablas de salto relativo de 16 bits. (Error de GCC)
  • Se corrigió un error interno del compilador (ICE) de GCC 4.8 en g++.dg/cpp0x/lambda/lambda-defarg3.C. (Cambio 62770, error de GCC)
  • Se corrigió un problema con los archivos *-gdb.exe de Windows de 32 bits que no se ejecutaban. (Error 58975)
  • Se corrigió ICE de GCC 4.8 durante la compilación de bibliotecas listadas. Este es el mensaje de error:
    internal compiler error: verify_flow_info failed
    (Error 58916, Error GCC).
  • Se modificó la compilación de GDB/ARM para omitir los datos de ARM.exidx para desenrollar en código de prólogo y se agregó un comando (set arm exidx-unwinding) para controlar el desenrollado de pila basado en exidx. (Error 55826)
  • Se corrigió el problema del compilador Clang 3.3 MIPS donde los registros HI y LO se reutilizan incorrectamente.
  • Se corrigió un problema de ICE de MIPS 4.7 en dbx_reg_number. Este es el mensaje de error:
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (Parche de GCC).
Otras correcciones de errores:
  • Correcciones de encabezados
    • Se corrigió el ARM WCHAR_MIN y WCHAR_MAX para que no esté firmado de acuerdo con las especificaciones (las versiones X86/MIPS están firmadas). Define _WCHAR_IS_ALWAYS_SIGNED para restablecer el comportamiento anterior. (Error 57749)
    • Se corrigió include/netinet/tcp.h para que contenga el estado de enumeración TCP_INFO. (Error 38881)
    • Se corrigió la macro _C_LABEL_STRING de la macro cdefs_elh.h para dejar de generar advertencias en la cadena de herramientas de GCC 4.8 cuando se usa el modo c++11. (Errores 58135 y 58652)
    • Se quitaron las funciones inexistentes imaxabs y imaxdiv del encabezado inttypes.h.
    • Se corrigió un problema con los valores mostrados de pthread_exit() y pthread_self(). (Error 60686)
    • Se agregó la función mkdtemp() faltante, que ya existe en el encabezado stdlib.h de bionic.
  • Se corrigió un problema de compilación de samples/gles3jni con Clang en la API nivel 11 de Android.
  • Se corrigió MCLinker para permitir múltiples casos de las siguientes opciones: -gc-sections y --eh-frame-hdr.
  • Se corrigió MCLinker para aceptar la opción --no-warn-mismatch.
  • Se modificó la opción cpu-features para no asumir que todos los dispositivos VFPv4 son compatibles con IDIV. Ahora, esta opción solo agrega IDIV a los dispositivos incluidos en una lista blanca, como Nexus 4. (Error 57637)
  • Se corrigió un problema con errores de registro incorrectos android_native_app_glue.c en las operaciones de predistribución de eventos.
  • Se corrigieron todas las operaciones de finalización de gabi++ y unexpected_handler para que puedan usarse en subprocesos de forma segura.
  • Se corrigieron varios problemas con la opción -integrated-as de Clang para que pueda pasar las pruebas para ssax-instructions y fenv.
  • Se arregló el compilador GCC 4.6/4.7/4.8 para pasar la opción del vinculador --eh-frame-hdr incluso para archivos ejecutables estáticos. Para obtener más información, consulta el parche de GCC.
  • Se corrigió el apóstrofe adicional de CPU-ARCH-ABIS.html. Para obtener más información, consulta NDK-DEPENDS.html. (Error 60142)
  • Se corrigieron las comillas adicionales en el resultado de ndk-build en Windows. (Error 60649)
  • Se corrigió Clang 3.3 para que pueda compilar operaciones atómicas integradas de ARM, como __atomic_fetch_add, __atomic_fetch_sub y __atomic_fetch_or.
  • Se corrigió el ICE de Clang 3.3 ICE con vfprintf personalizado. (Error de Clang)
Otros cambios:
  • Se habilitó OpenMP para todas las versiones de GCC. Para utilizar esta función, agrega las siguientes marcas a la configuración de tu compilación:
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    Para ver ejemplos de código, consulta tests/device/test-openmp
  • Se redujo significativamente el tamaño de ld.mcld (1.5 MB comparado con 3.5 MB de ld.bfd y 7.5 MB de ld.gold), lo que generó una mejora de velocidad de aproximadamente el 20%.
  • Se agregó LOCAL_CONLYFLAGS y APP_CONLYFLAGS para especificar las opciones aplicables solo a C, pero no a C++. Los elementos LOCAL_CFLAGS y APP_CFLAGS existentes también se usan para la compilación C++ (para evitar el problema de especificar la mayoría de las opciones dos veces), por lo que opciones como -std=gnu99 pueden fallar en compilaciones de g++ con una advertencia y en compilaciones de clang++ con un error.
  • Se agregaron funciones de ayudante de arreglo de gabi++.
  • Se modificaron las compilaciones de GCC para que todos los archivos libgcc.a se compilen con -funwind-tables para permitir que la pila se desenrolle más allá de los puntos previamente bloqueados, como __aeabi_idiv0.
  • Se agregó compatibilidad con Ingenic MXU en MIPS GCC4.6/4.7/4.8 con la nueva opción -mmxu.
  • Se extendió -mldc1-sdc1 de MIPS GCC4.6/4.7/4.8 para controlar ldxc1/sdxc1 también.
  • Se agregó crazy linker. Para obtener más información, consulta sources/android/crazy_linker/README.TXT.
  • Se corrigió bitmap-plasma para dibujar a pantalla completa en lugar de en un área de 200 x 200 píxeles.
  • Se redujeron los tamaños de las cadenas de herramientas de Linux y Darwin en un 25% mediante la creación de vínculos simbólicos a archivos idénticos.
Cambios importantes:
  • Se agregó compatibilidad con Android 4.3 (nivel de API 18) Para obtener más información, consulta STABLE-APIS.html y ejemplos de códigos nuevos en samples/gles3jni/README.
  • Se agregaron encabezados y bibliotecas para OpenGL ES 3.0, que es compatible con Android 4.3 (API nivel 18) y versiones posteriores.
  • Se agregó el compilador GNU Compiler Collection (GCC) 4.8 al NDK. Dado que GCC 4.6 sigue siendo la opción predeterminada, debes habilitar esta opción de forma explícita:
    • Para compilaciones de ndk-build, exporta NDK_TOOLCHAIN_VERSION=4.8 o agrégalo a Application.mk.
    • Para compilaciones independientes, usa la opción --toolchain= en make-standalone-toolchain.sh. Por ejemplo:
      --toolchain=arm-linux-androideabi-4.8

    Nota: La opción -Wunused-local-typedefs está habilitada por -Wall. Asegúrate de agregar __attribute__((unused)) si usas afirmaciones en tiempo de compilación como sources/cxx-stl/stlport/stlport/stl/config/features.h, línea #311. Para obtener más información, consulta Cambio 55460

    Nota: En la versión GCC 4.7 y en las posteriores, los compiladores ARM generan código de acceso no alineado de forma predeterminada para los objetivos de compilación de ARMv6 y versiones posteriores. Es posible que debas agregar la opción de compilación -mno-unaligned-access para compilar núcleos que no admitan esta función.

  • Se agregó compatibilidad con Clang 3.3. La opción de compilación NDK_TOOLCHAIN_VERSION=clang ahora elige Clang 3.3 de forma predeterminada.

    Nota: Tanto GCC 4.4.3 como Clang 3.1 están obsoletas y se quitarán de la próxima versión del NDK.

  • Se actualizó GNU Project Debugger (GDB) para brindar compatibilidad con Python 2.7.5.
  • Se agregó MCLinker para admitir hosts de Windows. Dado que ld.gold es el valor predeterminado cuando está disponible, debes agregar -fuse-ld=mcld en LOCAL_LDFLAGS o APP_LDFLAGS para habilitar MCLinker.
  • Se agregó la herramienta ndk-depends que imprime las dependencias de la biblioteca ELF. Para obtener más información, consulta NDK-DEPENDS.html. (Error 53486)
Correcciones de errores importantes:
  • Se corrigió el problema de control de eventos potenciales en android_native_app_glue. (Error 41755)
  • Se corrigió la compilación de ARM/GCC-4.7 con el objetivo de generar suficiente alineación para las instrucciones de carga y almacenamiento de NEON VST y VLD (error 57271 de GCC).
  • Se corrigió un error interno del compilador (ICE) de GCC 4.4.3/4.6/4.7 para un valor de índice negativo constante en un literal de string. (Error 54623)
  • Se corrigió un fallo de segmentación de GCC 4.7 para la inicialización constante con una dirección de objeto. (Error 56508)
  • Se corrigió una falla de segmentación de ARM de GCC 4.6 para los valores de -O cuando se usa Boost 1.52.0. (Error 42891)
  • Se corrigieron libc.so y libc.a para admitir la función wait4(). (Error 19854)
  • Se actualizaron los archivos x86 libc.so y libc.a para incluir la función clone().
  • Se corrigió el error LOCAL_SHORT_COMMANDS en el que el archivo linker.list está vacío o no se usa.
  • Se corrigió la compilación de MIPS de GCC en Mac OS para usar directivas CFI, sin las cuales ld.mcld --eh-frame-hdr suele fallar.
  • Se corrigió el error interno del compilador Clang 3.2 X86/MIPS en llvm/lib/VMCore/Value.cpp. (Cambio 59021)
  • Se corrigió el fallo del ensamblador GCC 4.7 de Windows de 64 bits. (Error: out of memory allocating 4294967280 bytes)
  • Se actualizó la secuencia de comandos ndk-gdb para que las acciones --start o --launch esperen al servidor de depuración de GNU a fin de que pueda alcanzar de forma más fiable las interrupciones establecidas en la ruta de ejecución (como las de código JNI). (Error 41278)

    Nota: Esta función requiere jdb y genera advertencias sobre las interrupciones pendientes. Especifica la opción --nowait para restaurar el comportamiento anterior.

  • Se corrigió una falla de GDB que se producía cuando la lista de bibliotecas estaba vacía.
  • Se corrigió una falla de GDB que se producía cuando se usaba un comando stepi después de una instrucción Thumb bx pc o blx pc. (Error 56962 y error 36149)
  • Se corrigió gdbserver de MIPS para que busque DT_MIPS_RLD_MAP en lugar de DT_DEBUG. (Error 56586)
  • Se corrigió una dependencia circular en la secuencia de comandos ndk-build, por ejemplo: si A->B y B->B, entonces se quitó B de la compilación. (Error 56690)
Otras correcciones de errores:
  • Se corrigió la secuencia de comandos ndk-build para permitirte especificar una versión de Clang como opción de línea de comandos (p. ej., NDK_TOOLCHAIN_VERSION=clang3.2). Anteriormente, solo se especificaba la versión como una variable de entorno trabajada.
  • Se corrigió el tamaño de gabi++ de _Unwind_Exception para que sea 24 para los objetivos de compilación de MIPS cuando se usa el compilador Clang. (Cambio 54141)
  • Se corrigió la secuencia de comandos de ndk-build para garantizar que se quiten las bibliotecas compiladas de los proyectos que incluyan bibliotecas estáticas precompiladas cuando se usa el comando ndk-build clean. (Cambio 54461 y cambio 54480).
  • Se modificó la opción NDK_ANALYZE=1 para que sea menos detallada.
  • Se corrigió gnu-libstdc++/Android.mk para incluir una ruta backward/ para las compilaciones que usan retrocompatibilidad. (Error 53404)
  • Se corrigió un problema por el que stlport new a veces mostraba valores aleatorios.
  • Se corrigió ndk-gdb para que coincida con el orden de CPU_ABIS, no con APP_ABIS. (Error 54033)
  • Se corrigió un problema por el que la compilación de 64 bits del NDK en Mac OS X elegía la ruta equivocada para el compilador. (Error 53769)
  • Se corrigieron scripts de compilación para detectar Windows Vista de 64 bits. (Error 54485)
  • Se corrigió el error ntonl/swap32 de x86: invalid 'asm': operand number out of range. (Error 54465 y cambio 57242).
  • Se corrigió ld.gold para combinar literales de strings.
  • Se corrigió ld.gold para controlar la alineación de símbolos grandes.
  • Se actualizó ld.gold para habilitar la opción --sort-section=name.
  • Se corrigió GCC 4.4.3/4.6/4.7 para suprimir la opción -export-dynamic en los programas vinculados estáticamente. GCC ya no agrega una sección .interp para programas vinculados estáticamente.
  • Se corrigió el error de compilación stlport de GCC 4.4.3 sobre typedef inconsistente de _Unwind_Control_Block. (Error 54426)
  • Se corrigieron secuencias de comandos awk para controlar archivos AndroidManifest.xml creados en Windows que pueden contener caracteres finales \r y causar errores de compilación. (Error 42548)
  • Se corrigió make-standalone-toolchain.sh para sondear el directorio prebuilts/ para detectar si el host es de 32 bits o de 64 bits.
  • Se corrigió la opción -integrated-as de Clang 3.2.
  • Se corrigieron los datos del controlador pr1 y pr2 del modelo compacto ARM EHABI de Clang 3.2.
  • Se agregó la opción -mllvm -arm-enable-ehabi de Clang para corregir el siguiente error:
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • Se corrigió una falla de compilación que se producía cuando no había ningún elemento uses-sdk en el manifiesto de la aplicación. (Error 57015)
Otros cambios:
  • Correcciones de encabezados
    • Se modificaron los encabezados para que __set_errno sea una función intercalada, ya que __set_errno dejó de estar disponible en errno.h y libc.so ya no lo exporta.
    • Se modificó elf.h para incluir stdint.h. (Error 55443)
    • Se corrigió sys/un.h para que se pueda incluir independientemente de otros encabezados. (Error 53646)
    • Se corrigió toda la familia de API de MotionEvent_getHistorical para tomar const AInputEvent* motion_event. (Error 55873)
    • Se corrigió malloc_usable_size para que tome const void*. (Error 55725)
    • Se corrigió stdint.h para mejorar la compatibilidad con C99. (Cambio 46821)
    • Se modificó wchar.h para no redefinir WCHAR_MAX ni WCHAR_MIN.
    • Se corrigió la declaración <inttypes.h> para las macros PRI y SCN relacionadas con el puntero. (Error 57218)
    • Se cambió el encabezado sys/cdefs.h a fin de que __WCHAR_TYPE__ sea de 32 bits para niveles de API inferiores a 9, lo que significa que wchat_t es de 32 bits para todos los niveles de API. Para restaurar el comportamiento anterior, define la variable booleana _WCHAR_IS_8BIT. (Error 57267)
  • Se agregó más formateo en docs/ del NDK y se implementaron correcciones de documentación miscelánea.
  • Se agregó compatibilidad con una técnica de archivos estrechos cuando se compilan bibliotecas estáticas. (Error 40303)
  • Se actualizó la secuencia de comandos make-standalone-toolchain.sh para admitir la biblioteca stlport además de gnustl cuando especificas la opción --stl=stlport. Para obtener más información, consulta STANDALONE-TOOLCHAIN.html.
  • Se actualizó la secuencia de comandos make-standalone-toolchain.sh para que la opción --llvm-version= cree las secuencias de comandos $TOOLCHAIN_PREFIX-clang y $TOOLCHAIN_PREFIX-clang++, además de clang y clang++, para evitar el uso de las definiciones de clang y clang++ del host por accidente.
  • Se agregaron dos marcas para volver a habilitar dos optimizaciones en Clang de forma ascendente, pero inhabilitadas en el NDK para una mejor compatibilidad con el código compilado por GCC:
    • Se agregó una marca -fcxx-missing-return-semantics para volver a habilitar las semánticas de retorno faltantes en Clang 3.2+. Normalmente, todas las rutas de acceso deben terminar con una declaración de retorno para una función de retorno de valor. Si este no es el caso, clang inserta una instrucción indefinida (o trap en modo de depuración) en la ruta sin una declaración de retorno. Si estás seguro de que tu código es correcto, utiliza esta función experimental para permitir que el optimizador aproveche el comportamiento indefinido. Si no estás seguro, no la uses. El emisor puede seguir recibiendo un valor aleatorio incorrecto, pero el optimizador no lo explotará y hará que su código sea más difícil de depurar.
    • Se agregó una marca -fglobal-ctor-const-promotion para volver a habilitar la promoción de variables globales con constructor estático para que sean constantes. Con esta función experimental, el pase de optimización de variables globales de LLVM intenta evaluar las variables con constructores estáticos y promoverlas a constantes globales. Si bien esta optimización es correcta, puede causar alguna incompatibilidad con el código compilado por GCC. Por ejemplo, el código podría hacer const_cast para convertir la constante en mutable y modificarla. En GCC, la variable está en el modo de lectura y escritura, y el código se ejecuta por accidente. En Clang, la variable const está en la memoria de solo lectura y puede causar que tu aplicación falle.
  • Se agregó -mldc1-sdc1 a los compiladores MIPS GCC y Clang. De manera predeterminada, los compiladores alinean correctamente los objetos de 8 bytes y emiten las instrucciones ldc1 y sdc1 para moverlos. Si tu app usa un asignador personalizado que no siempre se alinea con el límite de 8 bytes de un objeto nuevo de la misma forma que el asignador predeterminado, es posible que falle debido a operaciones ldc1 y sdc1 en la memoria no alineada. En este caso, usa la marca -mno-ldc1-sdc1 como solución alternativa.
  • Se redujo la gravedad del evento de advertencia a información si APP_PLATFORM_LEVEL es mayor que APP_MIN_PLATFORM_LEVEL. APP_PLATFORM_LEVEL puede ser inferior a APP_PLATFORM en jni/Application.mk porque el NDK no tiene encabezados para todos los niveles. En este caso, el nivel real se desplaza hacia abajo. La android:minSdkVersion especifica el APP_MIN_PLATFORM_LEVEL en el manifiesto de tu aplicación. (Error 39752)
  • Se agregaron los métodos android_getCpuIdArm() y android_setCpuArm() a cpu-features.c. Esta adición permite una recuperación más fácil de la información de la CPUID ARM. (Error 53689)
  • Se modificó ndk-build para usar as/ld de GCC 4.7 para las compilaciones de Clang.

    Nota: En GCC 4.7, se cambió el nombre de monotonic_clock y is_monotonic a steady_clock y is_steady, respectivamente.

  • Se agregaron las siguientes advertencias nuevas a la secuencia de comandos ndk-build:
    • Se agregaron advertencias si LOCAL_LDLIBS/LDFLAGS se usa en módulos de bibliotecas estáticas.
    • Se agregó un aviso si una configuración no tiene ningún módulo para compilar.
    • Se agregó una advertencia para las bibliotecas que no son del sistema y que se utilizan en LOCAL_LDLIBS/LDFLAGS de una biblioteca compartida o módulos ejecutables.
  • Se actualizaron las secuencias de comandos de compilación de modo que, si APP_MODULES no está definido y solo se enumeran las bibliotecas estáticas en Android.mk, la secuencia de comandos fuerce todas las compilaciones. (Error 53502)
  • Se actualizó ndk-build para ser compatible con rutas de acceso absolutas en LOCAL_SRC_FILES.
  • Se quitaron los archivos ejecutables *-gdbtui, que son duplicados de los archivos ejecutables *-gdb con la opción -tui habilitada.
  • Se actualizaron las secuencias de comandos de compilación para advertirte cuando el frontend del compilador Edison Design Group (EDG) vuelve a activar _STLP_HAS_INCLUDE_NEXT. (Error 53646)
  • Se agregó la variable de entorno NDK_LIBS_OUT para permitir la anulación de la ruta de acceso a libraries/gdbserver desde el valor predeterminado $PROJECT/libs. Para obtener más información, consulta OVERVIEW.html.
  • Se cambió la secuencia de comandos ndk-build predeterminada para compilar código con protección de string de formato -Wformat -Werror=format-security. Puedes configurar LOCAL_DISABLE_FORMAT_STRING_CHECKS=true para inhabilitarla. Para obtener más información, consulta ANDROID-MK.html.
  • Se agregó compatibilidad con STL pretty-print en ndk-gdb-py. Para obtener más información, consulta NDK-GDB.html.
  • Se agregaron pruebas basadas en marcos de trabajo de googletest.
  • Se agregó una notificación a la secuencia de comandos de compilación de la cadena de herramientas que te avisa si el shell actual no es bash.
Cambios importantes:
  • Se agregó un conjunto de cadenas de herramientas de host de 64 bits (sufijo del nombre de paquete *-x86_64.*). Para obtener más información, consulta CHANGES.HTML y NDK-BUILD.html.
  • Se agregó el compilador Clang 3.2. GCC 4.6 sigue siendo la versión predeterminada. Para obtener información sobre el uso del compilador Clang, consulta CHANGES.HTML.
  • Se agregó un analizador de código estático para hosts de Linux/Mac OS X. Para obtener información sobre el uso del analizador, consulta CHANGES.HTML.
  • Se agregó MCLinker para hosts Linux/Mac OS X como una función experimental. El vinculador ld.gold es el predeterminado cuando está disponible, por lo que debes habilitarlo explícitamente. Para obtener más información, consulta CHANGES.HTML.
  • Se actualizó ndk-build a fin de usar la ordenación topológica para las dependencias de los módulos, lo que significa que la compilación ajusta automáticamente el orden de las bibliotecas especificadas en LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES y LOCAL_SHARED_LIBRARIES. Para obtener más información, consulta CHANGES.HTML. (Error 39378)
Correcciones de errores importantes:
  • Se corrigió la secuencia de comandos de compilación para compilar todas las cadenas de herramientas en -O2. Las cadenas de herramientas de las versiones anteriores se compilaron incorrectamente sin optimización.
  • Se corrigió la secuencia de comandos que compila incondicionalmente Clang/llvm para Mac OS X en 64 bits.
  • Se corrigió el error interno del compilador GCC 4.6/4.7: gen_thumb_movhi_clobber at config/arm/arm.md:5832. (Error 52732)
  • Se corrigió el problema de compilación en el que GCC/ARM 4.6/4.7 no logra vincular el código utilizando funciones atómicas incorporadas de 64 bits. (Error 41297)
  • Se corrigieron los errores de desajuste en el uso de DIV del vinculador de GCC 4.7. (Error de Sourceware)
  • Se corrigió el error build_data_member_initialization, at cp/semantics.c:5790 del compilador interno de GCC 4.7.
  • Se corrigió el error redirect_eh_edge_1, at tree-eh.c:2214 del compilador interno de GCC 4.7. (Error 52909)
  • Se corrigió un segfault de GCC 4.7. (Error de GCC)
  • Se corrigió la resolución del reloj <chrono> y se habilitó steady_clock. (Error 39680)
  • Se corrigió la cadena de herramientas para habilitar _GLIBCXX_HAS_GTHREADS para GCC 4.7 libstdc++. (Error 41770 y error 41859)
  • Se corrigió el problema en el que el código MXX/SSE de X86 no se vinculaba debido a la falta de posix_memalign. (Cambio 51872)
  • Se corrigió la falla de segmentación de GCC4.7/X86 en i386.c, función distance_non_agu_define_in_bb(). (Cambio 50383)
  • Se corrigió GCC4.7/X86 para restaurar el comportamiento anterior de cmov. (Error de GCC)
  • Se corrigió el control del valor NULL que se muestra de setlocale() en libstdc++/GCC4.7. (Error 46718)
  • Se corrigió la referencia indefinida del tiempo de ejecución de ld.gold a __exidx_start y __exidx_start_end. (Cambio 52134)
  • Se corrigió el error del compilador interno de Clang 3.1 cuando se usaba la biblioteca de Eigen. (Error 41246)
  • Se corrigió el error interno del compilador Clang 3.1 que incluía <chrono> en modo C++11. (Error 39600)
  • Se corrigió el error interno del compilador Clang 3.1 que se producía cuando se generaba un código objeto para una llamada de método a un rvalue uniforme inicializado. (Error 41387)
  • Se corrigió la realineación de pila de Clang 3.1/X86. (Cambio 52154)
  • Se corrigió el problema con el GNU Debugger (GDB) SIGILL cuando se depuraba en Android 4.1.2. (Error 40941)
  • Se corrigió el problema por el que GDB no podía establecer los puntos de interrupción en source:line cuando los símbolos contenían rutas de acceso a archivos largas e indirectas. (Error 42448)
  • Se corrigió read_program_header de GBD para ejecutables MIPS PIE. (Cambio 49592)
  • Se corrigió una falla de segmentación STLport en uncaught_exception(). (Cambio 50236)
  • Se corrigió el error de bus STLport en el control de excepciones debido al acceso no alineado de DW_EH_PE_udata2, DW_EH_PE_udata4 y DW_EH_PE_udata8.
  • Se corrigió el problema de recurrencia infinita de Gabi++ con el operador nothrow new[]. (Error 52833)
  • Se corrigió el desplazamiento incorrecto de Gabi++ en el puntero del controlador de excepciones. (Cambio 53446)
  • Se quitó Gabi+++ redundante sin el objeto de excepción (Cambio 53447)
Otras correcciones de errores:
  • Se corrigieron los encabezados del NDK:
    • Se quitaron las definiciones redundantes de size_t, ssize_t y ptrdiff_t.
    • Se corrigió el encabezado fenv.h de MIPS y ARM.
    • Se corrigió stddef.h para no redefinir offsetof, debido a que ya existe en la cadena de herramientas.
    • Se corrigió elf.h para que contenga Elf32_auxv_t y Elf64_auxv_t. (Error 38441)
    • Se corrigieron las definiciones de C++ de #ifdef en el archivo de encabezado OpenSLES_AndroidConfiguration.h. (Error 53163)
  • Se corrigió STLport para que anule los cambios después de un error de memoria en lugar de salir silenciosamente.
  • Se corrigieron los encabezados de Gabi++ y el sistema para poder compilar con el nivel de API 8 y los niveles inferiores.
  • Se corrigió cpufeatures para no analizar /proc/self/auxv. (Error 43055)
  • Se corrigió ld.gold para no depender de la libstdc++ del host ni de las plataformas Windows, para no depender de la biblioteca libgcc_sjlj_1.dll.
  • Se corrigió Clang 3.1, que emite una lista de registros inconsistente en .vsave y hace que falle el ensamblador. (Cambio 49930)
  • Se corrigió Clang 3.1 para poder compilar libgabi++ y pasar las pruebas de test-stlport para los objetivos de compilación de MIPS. (Cambio 51961)
  • Se corrigió Clang 3.1 para habilitar únicamente la excepción predeterminada para C++, no para C.
  • Se corrigieron varios problemas en Clang 3.1 para pasar la mayoría de las pruebas de excepción de GNU.
  • Se corrigieron las secuencias de comandos clang y clang++ en el compilador independiente del NDK para detectar -cc1 y no especificar -target cuando se encuentre.
  • Se corrigió ndk-build para observar NDK_APP_OUT establecido en Application.mk.
  • Se corrigieron libc.so y lib.a de X86, a los que les faltaban las funciones sigsetjmp y siglongjmp ya declaradas en setjmp.h. (Error 19851)
  • Se agregó un parche a GCC 4.4.3/4.6/4.7 libstdc+++ para que funcione con Clang en C++ 11. (Error de Clang)
  • Se corrigió la ruta cygwin en el argumento pasado a HOST_AWK.
  • Se corrigió una advertencia de secuencia de comandos ndk-build en Windows cuando se ejecuta desde el directorio JNI del proyecto. (Error 40192)
  • Se corrigió el problema por el que la secuencia de comandos ndk-build no se compilaba si el archivo Make tiene un espacio en blanco al final en la definición LOCAL_PATH. (Error 42841)
Otros cambios:
  • Se habilitó la compatibilidad con subprocesos en la cadena de herramientas GCC/MIPS.
  • Se actualizaron los ayudantes de control de excepciones de GCC __cxa_begin_cleanup y __cxa_type_match para tener visibilidad de forma predeterminada desde la visibilidad oculta anterior en libstdc++ de GNU. Para obtener más información, consulta CHANGES.HTML.
  • Se actualizaron las secuencias de comandos de compilación para que las bibliotecas estáticas Gabi++ y STLport se compilen ahora con visibilidad oculta excepto para los ayudantes de control de excepciones.
  • Se actualizó la compilación para que STLport pueda compilarse para ARM en modo Thumb.
  • Se agregó compatibilidad con std::set_new_handler en Gabi++. (Error 52805)
  • Se habilitó la llamada del sistema FUTEX en GNU libstdc++.
  • Se actualizó ndk-build para que ya no copie la biblioteca estática precompilada en el directorio obj/local/<abi>/ de un proyecto. (Error 40302)
  • Se quitó __ARM_ARCH_5*__ de la secuencia de comandos toolchains/*/setup.mk de ARM. (Error 21132)
  • Se compilaron bibliotecas adicionales de GNU libstdc++ en miniatura para ARM.
  • Se habilitaron las instrucciones madd/msub/nmadd/nmsub/recip/rsqrt del punto flotante de MIPS con FPU de 32 bits.
  • Se habilitó el optimizador de bucle de grafito en GCC 4.6 y 4.7 para permitir más optimizaciones: -fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all y -ftree-loop-linear. (Información)
  • Se habilitó polly para hosts de Clang 3.1 en Linux y Max OS X de 32 bits, que analiza y optimiza el acceso a la memoria. (Información)
  • Se habilitó -flto en GCC 4.7 y 4.6, Clang 3.2 y Clang 3.1 en Linux (Clang LTO a través de LLVMgold.so). Los objetivos del compilador MIPS no son compatibles porque ld.gold no está disponible.
  • Se habilitó --plugin y --plugin-opt para ld.gold en GCC 4.6/4.7.
  • Se habilitó --text-reorder para ld.gold en GCC 4.7.
  • Se configuró libstdc++ de GNU con _GLIBCXX_USE_C99_MATH, que no define la secuencia de comandos isinf en el encabezado biónico. Para obtener más información, consulta CHANGES.html.
  • Se agregó APP_LDFLAGS a las secuencias de comandos de compilación. Para obtener más información, consulta ANDROID-MK.html.
  • Se actualizaron las secuencias de comandos de compilación para permitir que NDK_LOG=0 inhabilite NDK_LOG.
  • Se actualizaron las secuencias de comandos de compilación para permitir que NDK_HOST_32BIT=0 inhabilite la cadena de herramientas de 32 bits del entorno del desarrollador del host.
  • Se cambiaron las marcas predeterminadas de GCC/X86 -march= y -mtune= de pentiumpro y generic a i686 y atom.
  • Se mejoraron las secuencias de comandos para compilar cadenas de herramientas:
    • Se corrigió una condición de carrera en build-gcc.sh para el tipo de compilación mingw que impedía una cantidad significativa de procesamiento de compilación en paralelo.
    • Se actualizaron build-gabi++.sh y build-stlport.sh para que ahora puedan ejecutarse desde el paquete del NDK. (Error 52835)
    • Se corrigió run-tests.sh en la colección de utilidades MSys.
    • Se mejoró la cadena de herramientas de host de 64 bits y la compatibilidad para la compilación de Canadian Cross.
    • Se actualizó la secuencia de comandos build-mingw64-toolchain.sh a una versión más reciente.
    • Se agregó la opción para compilar libgnustl_static.a y stlport_static.a sin visibilidad oculta.
Cambios importantes:
  • Se agregó el GNU Compiler Collection (GCC) 4.7 al NDK. El compilador GCC 4.6 sigue siendo el predeterminado, por lo que debes habilitar explícitamente la nueva versión de la siguiente manera:
    • Para ndk-build, exporta la variable NDK_TOOLCHAIN_VERSION=4.7 o agrégala a Application.mk.
    • Para compilaciones independientes, agrega la opción --toolchain= a make-standalone-toolchain.sh, por ejemplo:
      --toolchain=arm-linux-androideabi-4.7

    Nota: Esta función es experimental. Pruébala e informa cualquier error.

  • Se agregó compatibilidad con la excepción stlport a través de gabi++. Ten en cuenta que el nuevo gabi++ depende de dlopen y el código relacionado. Eso implica lo siguiente:
    • Ya no puedes compilar un ejecutable estático con la opción -static ni incluir libstlport_static.a mediante APP_STL := stlport_static. (Aún puedes usar la opción -static con una cadena de herramientas independiente). La compilación de un ejecutable dinámico mediante include $(BUILD_EXECUTABLE) sigue funcionando porque el compilador agrega automáticamente la opción -ldl.
    • Si tu proyecto se vincula con -nostdlib y {-Wl,- no-undefined}, debes incluir manualmente la opción -ldl.
    Para obtener más información, consulta CPLUSPLUS-SUPPORT.html.

    Nota: Esta función es experimental y se ejecuta mejor con los compiladores GCC 4.6/4.7 que con GCC 4.4.3 o Clang 3.1. Pruébala e informa cualquier error.

  • Se agregó una opción -mstack-protector-guard= para x86 a fin de elegir entre una ruta predeterminada global que sea compatible con la biblioteca de Android C (biónica) anterior y una nueva ruta tls (%gs:20) para -fstack-protector, -fstack-protector-all y -fstack-protector-strong con los compiladores GCC 4.6 y versiones posteriores.

    Nota: La configuración -mstack-protector-guard en sí misma no habilita ninguna opción -fstack-protector*.

  • Se agregó la función android_setCpu() a sources/android/cpufeatures/cpu-features.c para su uso cuando la detección automática a través de /proc no sea posible en Android 4.1 y versiones posteriores. (Error 164154 de Chromium)
Correcciones de errores importantes:
  • Se corrigió la recompilación innecesaria de archivos de objetos cuando se usa la secuencia de comandos ndk-build. (Error 39810).
  • Se corrigió un fallo del vinculador con la versión del NDK 8c para Mac OS X 10.6.x que producía el siguiente error:
    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib
    . Se produjo este problema debido a la compilación en Mac OS X 10.7, que generó objetos binarios que no eran compatibles con Mac OS 10.6.x ni el NDK.
  • Se quitaron las opciones -x c++ de la secuencia de comandos de compilación independiente Clang++. (Error 39089)
  • Se corrigieron errores que se producían con la opción NDK_TOOLCHAIN_VERSION=clang3.1 en Cygwin. (Error 39585)
  • Se corrigió la secuencia de comandos make-standalone-toolchain.sh para permitir la generación de una cadena de herramientas independiente utilizando los entornos Cygwin o MinGW. La cadena de herramientas resultante puede utilizarse en entornos Cygwin, MinGW o CMD.exe. (Error 39915 y error 39585)
  • Se agregó la opción faltante SL_IID_ANDROIDBUFFERQUEUESOURCE en compilaciones android-14 para ARM y X86. (Error 40625)
  • Se corrigió la detección de CPU x86 para la función ANDROID_CPU_X86_FEATURE_MOVBE. (Error 39317)
  • Se corrigió un problema que impedía que la biblioteca de plantillas estándar (STL) usara fuentes C++ que no tenían una extensión de archivo .cpp.
  • Se corrigió el error interno del compilador GCC 4.6 ARM reload1.c:1061. (Error 20862)
  • Se corrigió el error del compilador interno de GCC 4.4.3 ARM emit-rtl.c:1954. (Error 22336)
  • Se corrigió el error del compilador interno de GCC 4.4.3 ARM postreload.c:396. (Error 22345)
  • Se corrigió el problema de omisión de las funciones Lambda de GCC 4.6/4.7. (Error 35933)
Otras correcciones de errores:
  • Correcciones del archivo de encabezado del NDK:
    • Se corrigieron __WINT_TYPE__ y wint_t para que sean del mismo tipo.
    • Se corrigió un error de ortografía en android/bitmap.h. (Error 15134)
    • Se corrigió un error de ortografía en errno.h.
    • Se agregó la comprobación de la presencia de __STDC_VERSION__ en sys/cdefs.h. (Error 14627)
    • Se reorganizaron los encabezados en byteswap.h y dirent.h.
    • Se corrigió limits.h para que incluya page.h, que proporciona la configuración PAGE_SIZE. (Error 39983)
    • Se corrigió el tipo de datos que se muestra de glGetAttribLocation() y glGetUniformLocation() de int a GLint.
    • Se corrigió la constante __BYTE_ORDER para compilaciones de x86. (Error 39824)
  • Se corrigió la secuencia de comandos ndk-build para no reemplazar -Os con -O2 para las compilaciones de ARM.
  • Se corrigieron las secuencias de comandos de compilación para permitir la sobrescritura de la configuración de HOST_AWK, HOST_SED y HOST_MAKE.
  • Se corrigió el problema de ld.gold en compilaciones de fsck_msdos que vinculan objetos creados por el compilador Intel C/C++ (ICC).
  • Se corrigió la compatibilidad de ARM EHABI en Clang para ajustarse a las especificaciones.
  • Se corrigió el GNU Debugger (GDB) para acortar el tiempo empleado en recorrer el mapa de vínculos del objetivo durante los eventos de solib. (Error 38402)
  • Se corrigió la falta del archivo libgcc.a durante la vinculación de bibliotecas compartidas.
Otros cambios:
  • Se adaptaron funciones atómicas de 64 bits para ARM a GCC 4.6.
  • Se agregó documentación para la latencia de salida de audio, junto con otra documentación y correcciones.
  • Se corrigió la depuración de compilaciones con Clang de manera que las funciones que no se pueden evitar ahora emitan una señal SIGILL para rutas sin una sentencia return.
  • Se actualizó make-standalone-toolchain.sh para aceptar el sufijo -clang3.1, que es equivalente a agregar --llvm-version=3.1 a la cadena de herramientas de GCC 4.6.
  • Se actualizó la URL del informe de errores de GCC y Clang a https://source.android.com/source/report-bugs.html.
  • Se agregó compatibilidad con ARM ELF a llvm-objdump.
  • Se quitó la advertencia de tratar los resultados de c como c++ para compilaciones de Clang.
  • Se actualizó la compilación para que solo se compile la versión de 32 bits de libiberty.a y se coloque en lib32/.
Cambios importantes:
  • Se agregó el compilador Clang 3.1 al NDK. El GNU Compiler Collection (GCC) 4.6 sigue siendo el predeterminado, por lo que debes habilitar explícitamente la opción del compilador Clang como se indica a continuación:
    • Para ndk-build, exporta NDK_TOOLCHAIN_VERSION=clang3.1 o agrega esta configuración de variable de entorno a Application.mk.
    • Para compilaciones independientes, agrega --llvm-version=3.1 a make-standalone-toolchain.sh y reemplaza CC y CXX en tu archivo Make por <tool-path>/bin/clang y <tool-path>/bin/clang++. Consulta STANDALONE-TOOLCHAIN.html para obtener información.

    Nota: Esta función es experimental. Pruébala e informa cualquier error.

  • Se agregó el vinculador Gold ld.gold para la cadena de herramientas de Windows. Este vinculador también es el predeterminado para ARM y X86 en todos los hosts. Puedes anularlo para usar el vinculador ld.bfd agregando LOCAL_LDFLAGS += -fuse-ld=bfd a Android.mk o pasando -fuse-ld=bfd a la línea de comandos g++/clang++ que realiza la vinculación.
  • Se agregaron comprobaciones de espacios en la ruta de acceso del NDK a las secuencias de comandos ndk-build[.cmd] y ndk-gdb para evitar errores de compilación difíciles de diagnosticar.
  • Se realizaron los siguientes cambios en el control del nivel de API:
    • Se modificó la lógica de compilación para que los proyectos que especifiquen android-10 mediante android-13 en APP_PLATFORM, project.properties o default.properties se vinculen con android-9 en lugar de con android-14.
    • Se actualizó la compilación para que los ejecutables que usan android-16 (Jelly Bean) o versiones posteriores se compilen con la opción -fPIE para ejecutables independientes de la posición (PIE). Una nueva opción APP_PIE te permite controlar este comportamiento. Consulta APPLICATION-MK.html para obtener información.

      Nota: Todos los niveles de API superiores a 14 siguen vinculados con platforms/android-14 y no se agregaron nuevos platforms/android-N.

    • Se modificó ndk-build para proporcionar advertencias si el nivel de API ajustado es mayor que android:minSdkVersion en el AndroidManifest.xml del proyecto.
  • Se actualizó la biblioteca de ayuda cpu-features para incluir más funciones específicas de ARM. Consulta sources/android/cpufeatures/cpu-features.h para obtener información.
  • Se modificó el doble largo en la plataforma X86 para que sea de 8 bytes. Este tipo de datos ahora tiene el mismo tamaño que un doble, pero se sigue tratando como un tipo distinto.
  • Se actualizó la compilación para APP_ABI=armeabi-v7a:
    • Se modificó este tipo de compilación para pasar el parámetro -march=armv7-a al vinculador. Este cambio garantiza que las bibliotecas específicas de v7 y crt*.o se vinculen correctamente.
    • Se agregó -mfpu=vfpv3-d16 a ndk-build en lugar de la opción -mfpu=vfp que se usaba en las versiones anteriores.
Correcciones de errores importantes:
  • Se corrigió un problema por el que la ejecución de make-standalone-toolchain.sh con privilegios de administrador hacía que la cadena de herramientas independiente fuera inaccesible para algunos usuarios. (Error 35279)
    • Todos los archivos y ejecutables del paquete de lanzamiento del NDK están configurados para tener permisos de lectura y ejecución.
    • Ahora se conserva la propiedad/grupo de libstdc++.a cuando se copia.
  • Se quitó el elemento \r redundante del precompilado de Windows echo.exe. El elemento \r redundante hacía que gdb.setup fallara en el GNU Debugger (GDB) porque por error se convertía en parte de la ruta de acceso. (Error 36054)
  • Se corrigieron las compilaciones paralelas de Windows que a veces fallaban debido a problemas de tiempos en la implementación de host-mkdir. (Error 25875)
  • Se corrigió el elemento libstdc++ del GNU de GCC 4.4.3 para que no combine nombres typeinfo de forma predeterminada. Para obtener más información, consulta toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo. (Error 22165)
  • Se corrigió el problema en el contexto null en cp/mangle.c::write_unscoped_name de GCC 4.6 por el que GCC podía fallar cuando el contexto era null y se había descodificado en TREE_CODE.
  • Se corrigió la falla de GCC 4.4.3 en las definiciones de tipo específicas de ARM NEON para los números de punto flotantes. (Error 34613)
  • Se corrigió la implementación interna de _IteWrapper::operator*() de STLport en la que se mostraba una ubicación de pila inactiva que contenía el valor descodificado y causaba fallas en el tiempo de ejecución. (Error 38630)
  • Correcciones específicas de ARM:
    • Se corrigió g++ de ARM GCC 4.4.3/4.6 para que no advierta que se cambió la decoración de <va_list> en GCC 4.4. La solución alternativa del conmutador -Wno-psabi para evitar esta advertencia ya no es necesaria.
    • Se corrigió un problema que se producía cuando un proyecto con los sufijos .arm o .neon en LOCAL_SRC_FILES también usaba APP_STL. Con APP_STL, la secuencia de comandos ndk-build busca archivos C++ en LOCAL_SRC_FILES antes de agregar rutas de acceso header/lib de STL a la compilación. Se modificó ndk-build para filtrar los sufijos .arm y .neon antes de la búsqueda; de lo contrario, los elementos en LOCAL_SRC_FILES como myfile.cpp.arm.neon no se compilarán como código C++.
    • Se corrigió binutils-2.21/ld.bfd para poder vincular objetos de binutils antiguos sin tag_FP_arch, ya que estaba generando mensajes de error de falla de aserción en Binutils de GNU. (Error 35209)
    • Se quitó la advertencia de Atributo 44, objeto EABI desconocido, que se producía cuando binutils-2.19/ld vinculaba un objeto precompilado con otro binutils-2.21 más nuevo.
    • Se corrigió un problema en la compilación de stdc++ de GNU con -mthumb y -march=armv7-a, modificando make-standalone-toolchain.sh para propagar headers/libs en el subdirectorio armv7-a/thumb. (Error 35616)
    • Se corrigió un error del tipo unresolvable R_ARM_THM_CALL relocation. (Error 35342)
    • Se corrigió el error interno del compilador en reload1.c:3633, causado por el backend de ARM que esperaba el tipo de operando equivocado cuando la señal se extendía desde char. (Error 50099 de GCC)
    • Se corrigió el error interno del compilador con la cantidad de desplazamiento negativo. (Error de GCC)
  • Se corrigió -fstack-protector para x86, que es también es el valor predeterminado para la ABI x86 de destino de ndk-build.
  • Correcciones específicas para MIPS:
    • Se corrigió la endianidad de STLport configurando _STLP_LITTLE_ENDIAN en 1 cuando se compila libstlport_* de MIPS.
    • Se corrigió un error de __builtin_unreachable de GCC que se producía cuando se compilaba LLVM. (Error 54369 de GCC)
    • Se proporcionó portabilidad a versiones anteriores para corregir procesos de compilación de cc1 que consumían el 100% de CPU. (Error 50380 de GCC)
  • Correcciones específicas para GNU Debugger:
    • Se inhabilitó la compatibilidad con Python en gdb-7.x al momento de la compilación; de lo contrario, la función de configuración de gdb-7.x puede recoger cualquier versión de Python disponible en el host y compilar gdb con una dependencia cableada de una versión específica de este lenguaje. (Error 36120)
    • Se corrigió ndk-gdb cuando APP_ABI contiene all y no coincide con ninguna de las arquitecturas conocidas. (Error 35392)
    • Se corrigió la compatibilidad de nombres de ruta de Windows manteniendo el carácter : cuando parece que podría ser parte de una ruta de Windows que empieza con una letra de unidad. (Error 12843 de GDB)
    • Se corrigió la adición de compatibilidad de interrupciones de hardware para ARM en gdbserver. (Error de GDB)
    • Se agregó la corrección para solo leer el solibs actual cuando el vinculador es consistente. Este cambio acelera el control de eventos en solib. (Error 37677)
    • Se agregó la corrección para realizar varios intentos de encontrar interrupciones en solib. GDB ahora vuelve a intentar implementar enable_break() durante cada llamada a svr4_current_sos() hasta que tenga éxito. (Cambio 43563)
    • Se solucionó un problema por el que gdb no se detenía en las interrupciones ubicadas en las bibliotecas dlopen-ed. (Error 34856)
    • Se corrigió SIGILL en el vinculador dinámico cuando se llamaba a dlopen(), en el sistema donde /system/bin/linker está desprovisto de símbolos y rtld_db_dlactivity() se implementa como Thumb, debido a que no se preserva el LSB de sym_addr. (Error 37147)
Otras correcciones de errores:
  • Se corrigieron los encabezados del NDK:
    • Se corrigió el código arch-mips/include/asm/* que se quitó por error del kernel original. (Cambio 43335)
    • Se sustituyeron los datos de los miembros de la estructura __unused por __linux_unused en linux/sysctl.h y linux/icmp.h para evitar conflictos con #define __unused en sys/cdefs.h.
    • Se corrigió fenv.h para las funciones de C adjuntas con __BEGIN_DECLS y __END_DECLS.
    • Se quitaron las funciones no implementadas en malloc.h.
    • Se corrigió la definición stdint.h de uint64_t para compiladores ANSI. (Error 1952)
    • Se corrigieron las macros del preprocesador en <arch>/include/machine/*.
    • Se reemplazó link.h para MIPS por una nueva versión compatible con todas las plataformas.
    • Se quitó linux-unistd.h.
    • Mueve las macros específicas de GLibc LONG_LONG_MIN, LONG_LONG_MAX y ULONG_LONG_MAX de <pthread.h> a <limits.h>.
  • Se corrigió un desbordamiento de búfer en ndk-stack-parser.
  • Se corrigió _STLP_USE_EXCEPTIONS, cuando no está definido, para omitir todas las declaraciones y usos de __Named_exception. La compilación y el uso de la configuración de __Named_exception solo se produce cuando STLport está autorizado a usar excepciones.
  • Se corrigió la compilación de paquetes del NDK exclusivos de Linux sin compilar también código de Windows. Usa la siguiente configuración para realizar este tipo de compilación:
    ./build/tools/make-release.sh --force --systems=linux-x86
    .
  • Se corrigió libc.so para que no exporte atexit() ni __do_handler. Estos símbolos se exportan para las construcciones ARM por la versión de sistema de la biblioteca de C para brindar compatibilidad con bibliotecas nativas heredadas. Los archivos generados por NDK nunca deben hacer referencia a ellos directamente. En cambio, cada biblioteca compartida o ejecutable debe incorporar su propia versión de estos símbolos, proporcionada por crtbegin_*.o.

    Si tu proyecto está vinculado con las opciones de -nostdlib -Wl,--no-undefined, debes proporcionar tu propio __dso_handle porque crtbegin_so.o no está vinculado en este caso. El contenido de __dso_handle no importa, como se muestra en el siguiente código de ejemplo:

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • Se corrigió el decodificador de símbolos para ARM que se usa en objdump para entradas plt para generar un formulario function@plt más legible.
  • Se quitaron los siguientes símbolos, introducidos en libgcc.a de GCC 4.6, desde la biblioteca libc.so de la plataforma X86: __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1 y __aeabi_unwind_cpp_pr2.
  • Se quitaron los elementos .ctors, .dtors y .eh_frame sin usar en crt*_so.S de MIPS.
  • Se actualizó ndk-gdb para que solo se tome la última línea de salida para ndk-build DUMP_XXXX. Este cambio asegura que, si Application.mk o Android.mk imprimen algo con sintaxis $(info ...), esta no se inserte en el resultado de DUMP_XXXX. (Más información)
Otros cambios:
  • Se quitaron los encabezados arch-x86 y arch-mips de platforms/android-[3,4,5,8]. Estos encabezados estaban incompletos, ya que las ABI de X86 y MIPS solo son compatibles con el nivel de API 9 o las versiones posteriores.
  • El c++ simplificado incluye la ruta en paquetes independientes, como se muestra a continuación. (Error 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
    .
  • Se corrigió ndk-build para reconocer más extensiones de archivo C++ de forma predeterminada: .cc .cp .cxx .cpp .CPP .c++ .C. Aún puedes usar LOCAL_CPP_EXTENSION para sobrescribir estas configuraciones de extensión.
  • Se solucionó un problema en samples/san-angeles que mostraba una pantalla negra o un fotograma congelado cuando se volvía a ejecutar.
  • Se reemplazaron las APIs obsoletas en muestras del NDK. (Error 20017)
    • hello-gl2 de android-5 a android-7
    • native-activity de android-9 a android-10
    • native-audio de android-9 a android-10
    • native-plasma de android-9 a android-10
  • Se agregó un nuevo desarrollo de la marca para los ejecutables de Android que tienen un esquema más simple en la sección .note.android.ident (definido en crtbegin_static/dynamic.o) para que las herramientas de depuración puedan actuar en consecuencia. La estructura miembro y los valores se definen de la siguiente manera:
    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 */
    }
    .

    Las opciones de marca anteriores en la sección .note.ABI-tag dejaron de estar disponibles.

  • Se agregó una nueva secuencia de comandos run-tests-all.sh que llama a run-tests.sh y standalone/run.sh con varias condiciones. La secuencia de comandos run-tests.sh se ejecuta sin la opción --abi y se mejora para compilar la mayoría de las pruebas para todas las ABI admitidas y ejecutarse en todos los dispositivos conectados.

Las funciones principales de esta publicación son una nueva cadena de herramientas de GNU Compiler Collection (GCC) 4.6 y GNU Debugger (GDB) 7.3.x que agrega compatibilidad de depuración para la imagen de sistema de Android 4.1 (API nivel 16).

Correcciones de errores importantes:
  • Se corrigieron problemas de LOCAL_SHORT_COMMANDS en entornos Windows Cygwin y Mac OS para bibliotecas estáticas. La generación de archivos de lista es más rápida y no se regenera para evitar recompilaciones repetidas de proyectos.
  • Se corrigieron varios problemas en ndk-gdb:
    • Se actualizó la herramienta para pasar las marcas -e, -d y -s a adb de manera más consistente.
    • Se actualizó la herramienta para aceptar nombres de serie de dispositivos que contengan espacios.
    • Se actualizó la herramienta para recuperar la información de /system/bin/link, de modo que gdb en el host puede establecer una interrupción en __dl_rtld_db_dlactivity y estar al tanto de la actividad del vinculador (p. ej., volver a explorar los símbolos solib cuando se llama a dlopen()).
  • Se corrigió ndk-build clean en Windows, que no conseguía quitar ./libs/*/lib*.so.
  • Se corrigió ndk-build.cmd para que muestre un ERRORLEVEL distinto de cero cuando make falle.
  • Se corrigió libc.so para dejar de exportar incorrectamente los símbolos __exidx_start y __exidx_end.
  • Se corrigió SEGV cuando se desenrolla la pila más allá de __libc_init para ARM y MIPS.
Cambios importantes:
  • Se agregó la cadena de herramientas de GCC 4.6 (binutils 2.21 con gold y GDB 7.3.x) para que coexista con la cadena de herramientas de GCC 4.4.3 original (binutils 2.19 y GDB 6.6).
    • GCC 4.6 ahora es la cadena de herramientas predeterminada. Puedes configurar NDK_TOOLCHAIN_VERSION=4.4.3 en Application.mk para seleccionar la original.
    • La compatibilidad con el vinculador gold solo está disponible para arquitecturas ARM y x86 en hosts Linux y Mac OS. La compatibilidad está inhabilitada de forma predeterminada. Agrega LOCAL_LDLIBS += -fuse-ld=gold en Android.mk para habilitarla.
    • Los programas compilados con -fPIE requieren la nueva versión de GDB para depurar, incluso los objetos binarios en imágenes del sistema Android 4.1 (API nivel 16).
    • La herramienta ld 2.21 de binutils contiene correcciones de versiones anteriores a partir de la versión 2.22:
      • Se corrigió ld --gc-sections, que conserva por error referencias zombi a bibliotecas externas. (Más información).
      • Se arregló el comando strip de ARM para preservar los p_align y p_flags originales en la sección GNU_RELRO si son válidos. Sin esta corrección, los programas compilados con -fPIE no podrían depurarse. (Más información)
    • Se inhabilitó la optimización de sincos() para brindar compatibilidad con plataformas más antiguas.
  • Se actualizaron las opciones de compilación para habilitar el bit Never eXecute (NX) y las protecciones relro/bind_now de forma predeterminada:
    • Se agregó --noexecstack al ensamblador y -z noexecstack al vinculador que brinda protección NX contra ataques de desbordamiento de búfer mediante la habilitación del bit NX en la pila y en el montón.
    • Se agregaron -z relro y -z now al vinculador para el endurecimiento de las secciones de datos internos después de la vinculación para protegerse de las vulnerabilidades de seguridad causadas por la corrupción de la memoria. (Más información: 1, 2)
    • Estas funciones se pueden inhabilitar usando las siguientes opciones:
      1. Inhabilita la protección NX configurando la opción --execstack para el ensamblador y -z execstack para el vinculador.
      2. Para inhabilitar el endurecimiento de los datos internos, configura las opciones -z norelro y -z lazy para el vinculador.
      3. Inhabilita estas protecciones en el jni/Android.mk del NDK configurando las siguientes opciones:
        LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
        DISABLE_RELRO=true             # disable "-z relro" and "-z now"
        
        .

      Consulta docs/ANDROID-MK.html para obtener más información.

  • Se agregó un desarrollo de la marca para los ejecutables de Android con la sección .note.ABI-tag (en crtbegin_static/dynamic.o) para que las herramientas de depuración puedan actuar en consecuencia. La estructura miembro y los valores se definen de la siguiente manera:
    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 */
    }
    .
Otras correcciones de errores:
  • Se corrigió la reubicación truncada de mips-linux-gnu para que se ajuste al error de R_MIPS_TLS_LDM. (Más información)
  • Se corrigieron fallas aleatorias de la herramienta ld que se producían cuando se usaba --gc-sections. (Más información)
  • Se corrigió el error de recuento de GOT_PAGE de MIPS (Más información)
  • Se corrigió el vínculo del símbolo de advertencia de seguimiento para mips_elf_count_got_symbols.
  • Se corrigió el vínculo del símbolo de advertencia de seguimiento para mips_elf_allocate_lazy_stub.
  • Se movió el elemento .dynamic de MIPS al segmento de datos, para que admita escritura.
  • Se reemplazaron los valores codificados para los símbolos por los tamaños de segmento correctos de MIPS.
  • Se quitó la opción -mno-shared de los valores predeterminados en la cadena de herramientas de MIPS. El valor predeterminado de la cadena de herramientas de Android es -fPIC (o -fpic si se admite). Si no especifica explícitamente -mshared, -fpic, -fPIC, -fpie ni -fPIE, el compilador MIPS agrega -mno-shared que desactiva PIC. Se corrigió el compilador para que no agregue -mno-shared en este caso.
  • Se corrigieron los nombres de paquetes erróneos en los ejemplos hello-jni y two-libs para que el proyecto tests que contiene se pueda compilar.
Otros cambios:
  • Se cambió la ubicación de los objetos binarios:
    • Se movió el elemento gdbserver de toolchain/<arch-os-ver>/prebuilt/gdbserver a prebuilt/android-<arch>/gdbserver/gdbserver.
    • Se cambió el nombre del prefijo de la cadena de herramientas de x86 de i686-android-linux- a i686-linux-android-.
    • Se movieron sources/cxx-stl/gnu-libstdc++/include y lib a sources/cxx-stl/gnu-libstdc++/4.6 cuando se compiló con GCC 4.6, o se movió sources/cxx-stl/gnu-libstdc++/4.4.3 cuando se compiló con GCC 4.4.3.
    • Se movieron libbfd.a y libintl.a de lib/ a lib32/.
  • Se agregaron y se mejoraron varias secuencias de comandos de cadenas de herramientas de recompilación y prueba del NDK:
    • Se agregó build-mingw64-toolchain.sh para generar una nueva cadena de herramientas alojada en Linux que genere ejecutables Win32 y Win64.
    • Se mejoró la velocidad de download-toolchain-sources.sh con el comando clone y solo se usa checkout para los directorios que se necesitan para compilar los objetos binarios de la cadena de herramientas del NDK.
    • Se agregaron secuencias de comandos build-host-gcc.sh y build-host-gdb.sh.
    • Se agregó tests/check-release.sh para comprobar el contenido de un determinado directorio de instalación del NDK o un paquete del NDK existente.
    • Se reescribieron las pruebas independientes tests/standalone/run.sh.
  • Se quitó el encabezado if_dl.h de todas las plataformas y arquitecturas. Los elementos AF_LINK y sockaddr_dl que describe son específicos de BSD (es decir, no existen en Linux).

Esta versión del NDK incluye compatibilidad para ABI de MIPS y algunas correcciones adicionales.

Nuevas funciones:
  • Se agregó compatibilidad para ABI de MIPS, que permite generar código máquina que se ejecuta en dispositivos Android compatibles basados en MIPS. Las principales funciones de MIPS incluyen cadenas de herramientas específicas de MIPS, encabezados del sistema, bibliotecas y compatibilidad de depuración. Para obtener más información sobre la compatibilidad con MIPS, consulta docs/CPU-MIPS.html en el paquete del NDK.

    De forma predeterminada, se genera código para los dispositivos basados en ARM. Puedes agregar mips a tu definición de APP_ABI en el archivo Application.mk para compilar plataformas de MIPS. Por ejemplo, la siguiente línea instruye a ndk-build para que compile tu código para tres ABI distintas:

    APP_ABI := armeabi armeabi-v7a mips

    A menos que dependas de fuentes de ensamblado específicas de la arquitectura, como el código de ensamblado de ARM, no deberías tener que tocar tus archivos Android.mk para compilar el código máquina de MIPS.

  • Puedes compilar una cadena de herramientas de MIPS independiente usando la opción --arch=mips cuando llames a make-standalone-toolchain.sh. Consulta docs/STANDALONE-TOOLCHAIN.html para obtener más información.

Nota: Para garantizar que las aplicacionesestén disponibles para los usuarios solo si sus dispositivos son capaces de ejecutarlas, Google Play filtra las aplicaciones basándose en la información del conjunto de instrucciones que se incluye en ella. No es necesario que realices ninguna acción para habilitar el filtrado. Además, el propio sistema Android también revisa tu aplicación al momento de la instalación y permite que esta continúe solo si proporciona una biblioteca compilada para la arquitectura de la CPU del dispositivo.

Correcciones de errores importantes:
  • Se corrigió un error de ortografía en la implementación de GAbi++ en el que el resultado de dynamic_cast<D>(b) del objeto de clase base b a la clase derivada D se ajustaba incorrectamente en la dirección opuesta a la de la clase base. (Error 28721)
  • Se corrigió un error por el cual make-standalone-toolchain.sh no copiaba libsupc++.*.
Otras correcciones de errores:
  • Se corrigió ndk-build.cmd para garantizar que ndk-build.cmd funcione correctamente incluso si el usuario redefinió la variable de entorno SHELL, que se puede cambiar al instalar una variedad de herramientas de desarrollo en entornos de Windows.

Esta versión del NDK incluye una importante corrección para los dispositivos basados en Tegra2, y algunas correcciones y mejoras adicionales:

Correcciones de errores importantes:
  • Se corrigieron los binarios de GNU STL armeabi-v7a para que no fallen en dispositivos que no sean del tipo NEON. Los archivos proporcionados con NDK r7b no estaban configurados correctamente, lo que provocaba fallas en los dispositivos basados en Tegra2 y en otros cuando se intentaba utilizar ciertas funciones de punto flotante (por ejemplo, cosf, sinf y expf).
Cambios importantes:
  • Se agregó compatibilidad con directorios de salida personalizados a través de la variable de entorno NDK_OUT. Cuando se define, esta variable se usa para almacenar todos los archivos intermedios generados, en lugar de $PROJECT_PATH/obj. ndk-gdb también reconoce la variable.
  • Se agregó compatibilidad para compilar módulos con cientos o incluso miles de archivos fuente definiendo LOCAL_SHORT_COMMANDS como true en Android.mk.

    Este cambio obliga al sistema de compilación del NDK a poner la mayoría de las opciones de vinculador o archivador en archivos de lista, como solución para las limitaciones de longitud de la línea de comandos. Consulta docs/ANDROID-MK.html para obtener información.

Otras correcciones de errores:
  • Se corrigió la implementación de android_getCpuCount() en la biblioteca de ayuda cpufeatures. En ciertos dispositivos, donde el sistema habilita dinámicamente los núcleos, la implementación anterior reportaría el número total de núcleos activos en la primera llamada a la función, en lugar del número total de núcleos físicamente disponibles.

Esta versión del NDK incluye correcciones para las versiones nativas de Windows, Cygwin y muchas otras mejoras:

Correcciones de errores importantes:
  • Se actualizó sys/atomics.h para evitar problemas de corrección en algunos dispositivos de varios núcleos basados en ARM. Recompila tus fuentes no modificadas con esta versión del NDK para solucionar el problema. Para obtener más información, lee docs/ANDROID-ATOMICS.html.
  • Se revirtió a binutils 2.19 para corregir errores de depuración que aparecían en el NDK r7 (que cambió a binutils 2.20.1).
  • Se corrigió ndk-build en Linux de 32 bits. Un error de empaquetado puso una versión de 64 bits del ejecutable awk en prebuilt/linux-x86/bin en el NDK r7.
  • Se corrigió la compilación nativa de Windows (ndk-build.cmd). Otros modos de compilación no se vieron afectados. Las correcciones incluyen lo siguiente:
    • Se quitó un error de desbordamiento de pila/bucle infinito que se producía cuando se intentaba llamar a ndk-build.cmd desde un directorio que no estaba en la parte superior de la ruta de acceso de tu proyecto (por ejemplo, en cualquier subdirectorio).
    • Se corrigió un problema mediante el que se ignoraban los archivos de dependencias generados automáticamente. Esto significa que la actualización de un encabezado no desencadena la recompilación de las fuentes que lo incluyen.
    • Se corrigió un problema en el que no se controlaban correctamente los caracteres especiales, que no eran espacios ni comillas, de los archivos o rutas.
  • Se corrigió la cadena de herramientas independiente para que genere los objetos binarios correctos cuando se usa -lstdc++ (es decir, vinculación contra el tiempo de ejecución de C++ libstdc++ en GNU). Debes usar -lgnustl_shared si deseas establecer un vínculo con la versión de la biblioteca compartida o -lstdc++ para la versión estática.

    Consulta docs/STANDALONE-TOOLCHAIN.html para obtener más información sobre esta corrección.

  • Se corrigió gnustl_shared en Cygwin. El vinculador reclamó que no podía encontrar libsupc++.a a pesar de que el archivo estaba en la ubicación correcta.
  • Se corrigió el vínculo de Cygwin C++ cuando no se utiliza ningún tiempo de ejecución específico de C++ a través de APP_STL.
Otros cambios:
  • Cuando tu aplicación use el tiempo de ejecución de GNU libstdc++, el compilador ya no habilitará forzosamente las excepciones y RTTI. Este cambio genera un código más breve.

    Si necesitas estas funciones, debes realizar una de las siguientes acciones:

    • Habilita excepciones o RTTI explícitamente en tus módulos o Application.mk. (Recomendado)
    • Define APP_GNUSTL_FORCE_CPP_FEATURES como 'exceptions', 'rtti' o ambos en Application.mk. Consulta docs/APPLICATION-MK.html para obtener más información.
  • ndk-gdb ahora funciona correctamente cuando tu aplicación tiene servicios privados que se ejecutan en procesos independientes. Depura el proceso principal de la aplicación, en lugar del primer proceso indicado en ps, que suele ser un proceso de servicio.
  • Se corrigió un error poco frecuente por el que NDK r7 no respetaba el valor LOCAL_ARM_MODE y compilaba ciertos archivos de origen (pero no todos) con instrucciones de 32 bits.
  • STLport: Actualiza las fuentes para que coincidan con la versión de la plataforma de Android. Esta actualización corrige algunos errores menores:
    • Se corrigió la instanciación de una clase incompleta.
    • Se corrigió el error ortográfico menor "== "/"=".
    • Se usó memmove en lugar de memcpy en string::assign.
    • Se agregó un mejor control de IsNANorINF, IsINF, IsNegNAN, etc.

    Para obtener detalles completos, consulta el registro de confirmaciones.

  • STLport: Se quitaron 5 inicializadores estáticos innecesarios de la biblioteca.
  • Las bibliotecas de libstdc++ de GNU para armeabi-v7a se compilaron erróneamente para armeabi. Este cambio no tuvo ningún impacto en la corrección, pero el uso de la ABI correcta debería proporcionar un rendimiento ligeramente mejor.
  • Se actualizó la biblioteca de ayuda cpu-features para informar tres características opcionales de CPU x86 (SSSE3, MOVBE y POPCNT). Consulta docs/CPU-FEATURES.html para obtener más información.
  • Se actualizó docs/NDK-BUILD.html para que mencione NDK_APPLICATION_MK en lugar de NDK_APP_APPLICATION_MK para seleccionar un archivo Application.mk personalizado.
  • Cygwin: ndk-build ya no crea un archivo "NUL" vacío en el directorio que se está usando cuando se lo invoca.
  • Cygwin: Se mejoró la detección automática de dependencias. En la versión anterior, no funcionaba correctamente en los siguientes casos:
    • Cuando el prefijo de la unidad de Cygwin no era /cygdrive.
    • Cuando se usaban montajes sin unidad, por ejemplo, cuando Cygwin traducía /home como \\server\subdir en lugar de C:\Some\Dir.
  • Cygwin: ndk-build no intenta usar las herramientas nativas de Windows en $NDK/prebuilt/windows/bin con ciertas versiones de Cygwin y/o GNU Make.

Esta versión del NDK incluye nuevas funciones compatibles con la plataforma Android 4.0, así como muchas otras adiciones y mejoras:

Nuevas funciones
  • Se agregaron APIs oficiales del NDK para Android 4.0 (nivel de API 14), que agregan las siguientes características nativas a la plataforma:
    • Se agregó la API multimedia nativa basada en el estándar OpenMAX AL 1.0.1 de Khronos Group. Los nuevos encabezados <OMXAL/OpenMAXAL.h> y <OMXAL/OpenMAXAL_Android.h> permiten que las aplicaciones que apuntan a la API nivel 14 obtengan resultados multimedia directamente desde el código nativo mediante el uso de una nueva interfaz de cola de búfer específica de Android. Para obtener más información, consulta docs/openmaxal/index.html y http://www.khronos.org/openmax/.
    • Se actualizó la API de audio nativa basada en el estándar OpenSL ES 1.0.1 de Khronos Group. Con la API nivel 14, ahora puedes decodificar audio comprimido (por ejemplo, MP3, AAC, Vorbis) a PCM. Para obtener más información, consulta docs/opensles/index.html y http://www.khronos.org/opensles/.
  • Se agregó compatibilidad con CCache. Para acelerar recompilaciones de gran tamaño, define la variable de entorno NDK_CCACHE como ccache (o la ruta de acceso a tu objeto binario ccache). Cuando se declara, el sistema de compilación del NDK utiliza automáticamente CCache al momento de compilar cualquier archivo fuente. Por ejemplo:
    export NDK_CCACHE=ccache
    
    .

    Nota: CCache no está incluido en la versión del NDK, por lo que debes instalarlo para poder usarlo. Para obtener más información sobre CCache, visita http://ccache.samba.org.

  • Se agregó compatibilidad con la configuración de APP_ABI a all para que puedas indicar que deseas compilar tus módulos del NDK para todas las ABIs compatibles con tu versión específica del NDK. Esto significa que, en esta versión, estas dos líneas en Application.mk son equivalentes:
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    
    .

    Esto también funciona si defines APP_ABI cuando llamas a ndk-build desde la línea de comandos, que es una forma rápida de comprobar que tu proyecto se compile para todas las ABIs compatibles sin cambiar el Application.mk file del proyecto. Por ejemplo:

    ndk-build APP_ABI=all
    
  • Se agregó una variable LOCAL_CPP_FEATURES en Android.mk que te permite declarar qué características de C++ (RTTI o Excepciones) usa tu módulo. Esto garantiza que el vínculo final funcione correctamente si tienes módulos precompilados que dependen de estas funciones. Consulta docs/ANDROID-MK.html y docs/CPLUSPLUS-SUPPORT.html para obtener más información.
  • Las rutas más cortas a los archivos fuente y objeto que se utilizan en los comandos de compilación. Cuando se invoca $NDK/ndk-build desde la ruta de acceso de tu proyecto, las rutas a los archivos fuente, objeto y binarios que se pasan a los comandos de compilación ahora son significativamente más cortas, ya que se pasan en relación con el directorio actual. Esto es útil cuando se crean proyectos con muchos archivos de origen, para evitar límites en la longitud máxima de la línea de comandos admitida por el sistema operativo del host. El comportamiento no cambia si invocas ndk-build desde un subdirectorio del árbol de tu proyecto ni si defines NDK_PROJECT_PATH para que apunte a un directorio específico.
Funciones experimentales
Ahora puedes compilar tus archivos fuente del NDK en Windows sin Cygwin si llamas a la secuencia de comandos ndk-build.cmd desde la línea de comando de la ruta de tu proyecto. La secuencia de comandos toma exactamente los mismos argumentos que la secuencia de comandos ndk-build original. El paquete del NDK de Windows viene con sus propios binarios predefinidos para GNU Make, Awk y otras herramientas requeridas por la compilación. No deberías necesitar instalar nada más para obtener un sistema de compilación que funcione correctamente.

Importante: ndk-gdb no funciona en Windows, por lo que aún necesitas Cygwin para realizar depuraciones.

Esta función todavía es experimental, así que no dudes en probarla y en informarnos los problemas en esta base de datos pública de errores o en el foro público. Todas las muestras y pruebas unitarias enviadas con el NDK se compilan con éxito usando esta función.

Correcciones de errores importantes
  • Las bibliotecas compartidas importadas ahora se instalan de forma predeterminada en la ubicación de instalación de destino (libs/<abi>) si APP_MODULES no está definido en Application.mk. Por ejemplo, si un módulo de nivel superior foo importa un módulo bar, tanto libfoo.so como libbar.so se copian en la ubicación de instalación. Anteriormente, solo se copiaba libfoo.so, a menos que también incluyeras bar en tu APP_MODULES. Si defines APP_MODULES explícitamente, el comportamiento no cambia.
  • ndk-gdb ahora funciona correctamente para actividades con varias categorías en sus filtros de intent PRINCIPALES.
  • Las importaciones de bibliotecas estáticas ahora son propiamente transitivas. Por ejemplo, si un módulo de nivel superior foo importa la biblioteca estática bar que importa la biblioteca estática zoo, libfoo.so se vinculará ahora con libbar.a y libzoo.a.
Otros cambios
  • docs/NATIVE-ACTIVITY.HTML: Se corrigió un error de ortografía. El nivel mínimo de API debe ser 9, no 8, para las actividades nativas.
  • docs/STABLE-APIS.html: Se agregó la documentación faltante que indica a EGL como una API estable compatible, a partir del nivel de API 9.
  • download-toolchain-sources.sh: Se actualizaron para descargar las fuentes de las cadenas de herramientas de android.googlesource.com, que es la nueva ubicación de los servidores del AOSP.
  • Se agregó un nuevo tiempo de ejecución de compatibilidad de C++, llamado gabi++. Hay más información al respecto disponible en el sitio docs/CPLUSPLUS-SUPPORT.html actualizado.
  • Se agregó un nuevo tiempo de ejecución de compatibilidad de C++, llamado gnustl_shared, que corresponde a la versión de biblioteca compartida de GNU libstdc++ v3 (licencia GPLv3). Busca más información en docs/CPLUSPLUS-SUPPORT.html.
  • Se agregó compatibilidad con RTTI en los tiempos de ejecución de STLport C++ (sin compatibilidad para excepciones).
  • Se agregó compatibilidad con varias extensiones de archivo en LOCAL_CPP_EXTENSION. Por ejemplo, para compilar tanto foo.cpp y bar.cxx como fuentes de C++, declara lo siguiente:
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
    .
  • Se quitaron muchos símbolos exportados no deseados de las bibliotecas de sistema compartidas de tiempo de vínculo proporcionadas por el NDK. Esto garantiza que el código generado con la cadena de herramientas independiente no corre el riesgo de depender accidentalmente de un símbolo ABI no estable (por ejemplo, cualquier símbolo libgcc.a que cambie cada vez que se modifica la cadena de herramientas usada para compilar la plataforma).
  • Se actualizaron los encabezados EGL y OpenGLES Khronos para que admitan más extensiones. Ten en cuenta que esto hace que no se cambien las ABI del NDK para las bibliotecas correspondientes, ya que la aplicación cliente debe probar cada extensión en tiempo de ejecución.

    Las extensiones disponibles dependen del dispositivo y de los controladores de la GPU, no de la versión de la plataforma en la que se ejecuta el dispositivo. Los cambios en el encabezado simplemente agregan nuevas constantes y tipos para facilitar el uso de las extensiones cuando se prueban con eglGetProcAddress() o glGetProcAddress(). La siguiente lista describe las nuevas extensiones admitidas:

    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

Esta versión del NDK no incluye ninguna función nueva en comparación con r6. La versión r6b trata los siguientes temas en la versión r6:

Correcciones de errores importantes
  • Se corrigió la compilación cuando APP_ABI="armeabi x86" se usa para compilaciones multiarquitectónicas.
  • Se corrigió la ubicación de binarios de STLport precompilados en el paquete de versión del NDK. Un error en la secuencia de comandos del empaquetado los había colocado en la ubicación equivocada.
  • Se corrigió el uso de atexit() en bibliotecas compartidas con la cadena de herramientas de x86.
  • Se corrigió make-standalone-toolchain.sh --arch=x86. Solía fallar al no copiar los binarios apropiados de GNU libstdc++ a la ubicación correcta.
  • Se corrigieron las advertencias del vinculador de la cadena de herramientas independiente sobre la falta de definición y tamaño del símbolo __dso_handle (solo ARM).
  • Se corrigió el orden de inclusión de $(SYSROOT)/usr/include para compilaciones de x86. Para obtener más información, consulta este error.
  • Se corrigieron las definiciones de ptrdiff_t y size_t en sistemas específicos de x86 cuando se usan con la cadena de herramientas independiente de x86.

Esta versión del NDK incluye compatibilidad para el ABI de x86 y otros cambios menores. Para obtener información detallada que describa los cambios de esta versión, lee el documento CHANGES.HTML que se incluye en el paquete del NDK.

Notas generales:
  • Se agregó compatibilidad para ABI de x86, que te permite generar código máquina que se ejecuta en dispositivos Android compatibles basados en x86. Las principales funciones para x86 incluyen cadenas de herramientas específicas, cabeceras de sistema, bibliotecas y compatibilidad con depuración. Para leer toda la información sobre compatibilidad con x86, consulta docs/CPU-X86.html en el paquete del NDK.

    De forma predeterminada, se genera el código para los dispositivos basados en ARM, pero puedes agregar x86 a tu definición APP_ABI del archivo Application.mk para compilarlo para plataformas de x86. Por ejemplo, la siguiente línea instruye a ndk-build para que compile tu código para tres ABI distintas:

    APP_ABI := armeabi armeabi-v7a x86

    A menos que dependas de fuentes de ensamblado basadas en ARM, no deberías tener que tocar los archivos Android.mk para compilar el código máquina de x86.

  • Puedes compilar una cadena de herramientas independiente de x86 utilizando la opción --toolchain=x86-4.4.3 cuando llames a make-standalone-toolchain.sh. Consulta docs/STANDALONE-TOOLCHAIN.html para obtener más información.
  • La nueva herramienta ndk-stack permite traducir seguimientos de pila de logcat que genera el código nativo. La herramienta traduce las direcciones de instrucción a un formato legible que contiene elementos como la función, el archivo de origen y el número de línea correspondiente a cada marco de pila. Para obtener más información y un ejemplo de uso, consulta docs/NDK-STACK.html.
Otros cambios:
Se quitó
arm-eabi-4.4.0 de la distribución del NDK, ya que estaba obsoleto desde el NDK r5.

Esta versión del NDK no incluye ninguna función nueva en comparación con la r5b. La versión r5c soluciona los siguientes problemas de la versión r5b:

Correcciones de errores importantes:
  • ndk-build: Se corrigió un error poco frecuente que aparecía cuando se intentaba compilar en paralelo proyectos depurables.
  • Se corrigió un error ortográfico que impedía que LOCAL_WHOLE_STATIC_LIBRARIES funcionara correctamente con la nueva cadena de herramientas y se agregó documentación relacionada en docs/ANDROID-MK.html.
  • Se corrigió un error por el que el código vinculado a gnustl_static fallaba cuando se ejecutaba en versiones de plataforma anteriores a la API nivel 8 (Android 2.2).
  • ndk-gdb: Se corrigió un error que causaba una falla de segmentación cuando se depuraban dispositivos Android 3.0 o más recientes.
  • <android/input.h>: Dos funciones que se agregaron en la API nivel 9 (Android 2.3) eran incorrectas y ya están corregidas. Aunque esto rompe la API de origen, la interfaz binaria con el sistema no cambia. A las funciones incorrectas les faltaba un parámetro history_index, y las definiciones correctas se muestran a continuación:
    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
    );
  • Se actualizó el objeto binario de ARM de la biblioteca C para el nivel de API 9 (Android 2.3) para exponer correctamente en el momento del vínculo las nuevas funciones que se añadieron en ese nivel de la API (por ejemplo, pthread_rwlock_init).
Correcciones y mejoras menores:
  • Los archivos de objetos ahora están siempre vinculados en el orden en que aparecen en LOCAL_SRC_FILES. Este no era el caso anterior porque los archivos estaban agrupados por extensiones de origen.
  • Cuando import-module falla, ahora imprime la lista de directorios que se buscaron. Esto es útil para comprobar que la definición NDK_MODULE_PATH usada por el sistema de compilación sea correcta.
  • Cuando import-module se realiza correctamente, ahora imprime el directorio donde se encontró el módulo en el registro (visible con NDK_LOG=1).
  • Se incrementó la velocidad de construcción de las aplicaciones depurables cuando hay un gran número de directorios de inclusión en el proyecto.
  • ndk-gdb: Mejor detección de fallas en adb shell y mejora de los mensajes de error.
  • <pthread.h>: Se corrigió la definición de PTHREAD_RWLOCK_INITIALIZER para la API nivel 9 (Android 2.3) y las versiones superiores.
  • Se corrigió un problema por el que un módulo podía importarse a sí mismo, lo que daba como resultado un bucle infinito en GNU Make.
  • Se corrigió un error que causaba que la compilación fallara si LOCAL_ARM_NEON estaba configurado como verdadero (error ortográfico en build/core/build-binary.mk).
  • Se corrigió un error que impedía la compilación de los archivos de ensamblado de .s (los archivos .S eran correctos).

Esta versión del NDK no incluye ninguna función nueva en comparación con la r5. La versión r5b soluciona los siguientes problemas de la versión r5:

  • Los binarios r5 requerían glibc 2.11, pero los r5b se generan con un conjunto de herramientas especial que apunta a glibc 2.7 o versiones posteriores. Los binarios del conjunto de herramientas de Linux ahora se ejecutan en Ubuntu 8.04 o versiones posteriores.
  • Se corrigió un error del compilador del conjunto de herramientas arm-linux-androideabi-4.4.3. El binario anterior generaba secuencias de instrucciones de Thumb no válidas cuando se trataba de caracteres firmados.
  • Se agregó la documentación que falta para el valor "gnustl_static" de APP_STL, que te permite vincular contra una versión estática de la biblioteca de GNU libstdc++.
  • Se corrigieron los siguientes errores ndk-build:
    • Un error que creó archivos de dependencia inconsistentes cuando se produjo un error de compilación en Windows. Esto impidió una compilación adecuada después de que el error fuera corregido en el código fuente.
    • Un error específico de Cygwin en el que el uso de rutas muy cortas para la instalación de Android NDK o la ruta del proyecto llevó a la generación de archivos de dependencias no válidos. Esto hizo que no se pudieran llevar a cabo compilaciones incrementales.
    • Un error ortográfico que impidió que la biblioteca de cpufeatures funcionara correctamente con la nueva cadena de herramientas del NDK.
    • Las compilaciones en Cygwin son más rápidas, ya que evitan llamadas a cygpath -m desde GNU Make para cada archivo fuente u objeto, lo que causaba problemas con árboles fuente muy grandes. En caso de que esto no funcione correctamente, define NDK_USE_CYGPATH=1 en tu entorno para volver a usar cygpath -m.
    • La instalación de Cygwin ahora notifica al usuario de las rutas de instalación no válidas que contienen espacios. Anteriormente, una ruta no válida generaba un error que informaba una versión incorrecta de GNU Make, incluso si se instalaba la correcta.
  • Se corrigió un error ortográfico que impedía que la variable de entorno NDK_MODULE_PATH funcionara correctamente cuando contenía varios directorios separados por dos puntos.
  • La secuencia de comandos prebuilt-common.sh contiene correcciones para comprobar si el compilador tiene código máquina generado de 64 bits, en lugar de depender de la etiqueta host, que permite a la cadena de herramientas de 32 bits recompilar correctamente en Snow Leopard. La cadena de herramientas recompila secuencias de comandos que ahora también admiten el uso de un conjunto de host de 32 bits.
  • Se agregó a <netinet/in.h> una declaración faltante para INET_ADDRSTRLEN.
  • Se agregaron las declaraciones faltantes para IN6_IS_ADDR_MC_NODELOCAL y IN6_IS_ADDR_MC_GLOBAL a <netinet/in6.h>.
  • Se reemplazó "asm" por "__asm__" en <asm/byteorder.h> para permitir la compilación con -std=c99.

Esta versión del NDK incluye muchas APIs nuevas, la mayoría de las cuales se introducen para admitir el desarrollo de juegos y aplicaciones similares que hacen un uso extensivo del código nativo. Utilizando las APIs, los desarrolladores tienen acceso directo y nativo a eventos, audio, gráficos y gestión de ventanas, activos y almacenamiento. Los desarrolladores también pueden implementar el ciclo de vida de las aplicaciones de Android en código nativo con la ayuda de la nueva clase NativeActivity. Para obtener información detallada sobre los cambios de esta versión, lee el documento CHANGES.HTML incluido en el paquete del NDK descargado.

Notas generales:
  • Se agregó compatibilidad con actividades nativas, lo que te permite implementar el ciclo de vida de la aplicación de Android en código nativo.
  • Se agrega compatibilidad nativa para lo siguiente:
    • Subsistema de entrada (como el teclado y la pantalla táctil).
    • Acceso a los datos de los sensores (acelerómetro, brújula, giroscopio, etc.).
    • API de bucle de eventos para esperar por cosas como eventos de entrada y sensores.
    • Subsistema de superficies y ventanas.
    • APIs de audio basadas en el estándar OpenSL ES que admiten la reproducción y la grabación, así como el control de los efectos de audio de la plataforma.
    • Acceso a activos empaquetados en un archivo .apk.
  • Se incluye una nueva cadena de herramientas (basada en GCC 4.4.3), que genera mejor código, y que ahora también se puede usar como compilador de forma cruzada, para las personas que quieran compilar su material con ./configure && make. Para obtener más detalles, consulta docs/STANDALONE-TOOLCHAIN.html. Los binarios para GCC 4.4.0 siguen estando disponibles, pero se quitaron los de 4.2.1.
  • Se agregó compatibilidad para bibliotecas estáticas y compartidas predefinidas (docs/PREBUILTS.html) y exportaciones e importaciones de módulos a fin de facilitar el uso compartido y la reutilización de módulos de terceros (docs/IMPORT-MODULE.html explica por qué).
  • Se proporciona una implementación predeterminada de C++ STL (basada en STLport) como módulo de ayuda. Puede usarse como una biblioteca estática o compartida (los detalles y ejemplos de uso están en sources/android/stlport/README). Los binarios predefinidos para STLport (estáticos o compartidos) y GNU libstdc++ (solo estáticos) también se proporcionan si eliges compilar contra esas bibliotecas en lugar de la implementación predeterminada de C+++ STL. C++ Exceptions y RTTI no son compatibles con la implementación predeterminada de STL. Para obtener más información, consulta docs/CPLUSPLUS-SUPPORT.HTML.
  • Se incluyen mejoras en la biblioteca de ayuda de cpufeatures, que mejora la generación de informes del tipo de CPU (algunos dispositivos anteriormente informaban una CPU ARMv7 cuando el dispositivo en realidad era un ARMv6). Recomendamos a los desarrolladores que utilicen esta biblioteca para recompilar sus aplicaciones y, a continuación, subirlas a Google Play para beneficiarse de las mejoras.
  • Se agrega una biblioteca EGL que te permite crear y gestionar texturas y servicios de OpenGL ES.
  • Se agregan nuevas aplicaciones de ejemplo, native-plasma y native-activity, para demostrar cómo escribir una actividad nativa.
  • Se incluyen muchas correcciones de errores y otras pequeñas mejoras. Consulta docs/CHANGES.html para una lista más detallada de los cambios.
Notas de r4b:

Se incluyen correcciones para varios problemas en la compilación del NDK y secuencias de comandos de depuración; si estás usando NDK r4, te recomendamos que descargues la compilación del NDK r4b. Para obtener información detallada sobre los cambios de esta versión, lee el documento CHANGES.TXT incluido en el paquete NDK descargado.

Notas generales:
  • Se proporciona un sistema de compilación simplificado a través del nuevo comando de compilación ndk-build.
  • Se agrega compatibilidad para una depuración nativa sencilla del código máquina generado en dispositivos de producción a través del nuevo comando ndk-gdb.
  • Se agrega una nueva ABI específica de Android para arquitecturas de CPU basadas en ARM: armeabi-v7a. La nueva ABI extiende la ABI armeabi existente para que incluya estas extensiones de conjunto de instrucciones de CPU:
    • Instrucciones de Thumb-2
    • Instrucciones de FPU de hardware VFP (VFPv3-D16)
    • Compatibilidad opcional para ARM Advanced SIMD (NEON) GCC intrínseco y VFPv3-D32. Compatible con dispositivos como Verizon Droid de Motorola, Google Nexus One y otros.
  • Se agrega una nueva biblioteca estática cpufeatures (con fuentes) que le permite a tu aplicación detectar las características de la CPU del dispositivo host en tiempo de ejecución. Específicamente, las aplicaciones pueden comprobar la compatibilidad con ARMv7-A, así como con VFPv3-D32 y NEON, y luego proporcionar rutas de código separadas según sea necesario.
  • Se agrega una aplicación de muestra, hello-neon, que ilustra el uso de la biblioteca cpufeatures para comprobar las características de la CPU y luego proporciona una ruta de código optimizada usando instrucciones de NEON si la CPU lo admite.
  • Te permite generar código máquina para uno o ambos conjuntos de instrucciones admitidos por el NDK. Por ejemplo, puedes compilar para las arquitecturas ARMv5 y ARMv7-A al mismo tiempo y tener todo almacenado en la versión final .apk de tu aplicación.
  • Para garantizar que las aplicaciones estén disponibles para los usuarios solo si sus dispositivos son capaces de ejecutarlas, Google Play filtra las aplicaciones basándose en la información del conjunto de instrucciones que se incluye en ella. No es necesario que realices ninguna acción para habilitar el filtrado. Además, el propio sistema Android también revisa tu aplicación en el momento de la instalación y permite que esta continúe solo si proporciona una biblioteca compilada para la arquitectura de la CPU del dispositivo.
  • Se agrega compatibilidad con Android 2.2, incluida una nueva API estable para acceder a los búferes de píxeles de los objetos Bitmap a partir del código nativo.
Notas generales:
  • Se agrega compatibilidad con la biblioteca nativa de OpenGL ES 2.0.
  • Se agrega una aplicación de muestra, hello-gl2, que ilustra el uso del vértice OpenGL ES 2.0 y sombreadores de fragmentos.
  • Los binarios de la cadena de herramientas se han actualizado para esta versión con GCC 4.4.0, que debería generar un código máquina ligeramente más compacto y eficiente que el anterior (4.2.1). El NDK también proporciona los binarios 4.2.1, que puedes usar opcionalmente para compilar tu código máquina.

Originalmente lanzada como "Android 1.6 NDK, versión 1".

Notas generales:
  • Se agrega compatibilidad con la biblioteca nativa de OpenGL ES 1.1.
  • Se agrega una aplicación de muestra, san-angeles, que procesa gráficos en 3D a través de las APIs nativas de OpenGL ES y, a la vez, administra el ciclo de vida de la actividad con un objeto GLSurfaceView.

Originalmente lanzada como "Android 1.5 NDK, versión 1".

Notas generales:
  • Se incluyó compatibilidad con el compilador (GCC) para las instrucciones de ARMv5TE, incluyendo las de Thumb-1.
  • Se agregaron encabezados de sistema para API nativas estables, documentación y aplicaciones de ejemplo.