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 r29 (octubre de 2025)
Registro de cambios- Descargas
-
- Las descargas de esta versión están disponibles aquí.
NDK de Android r28 (febrero de 2025)
Registro de cambios- Descargas
-
- Las descargas de esta versión están disponibles aquí.
NDK de Android r27 LTS (julio de 2024)
Registro de cambios- Descargas
-
- Las descargas de esta versión están disponibles aquí.
NDK de Android de LTS r26 (septiembre de 2023)
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).
NDK de Android de LTS r25 (julio de 2022)
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.
NDK de Android r24 (marzo de 2022)
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.
-
Se quitó el ensamblador GNU (GAS). Si compilaste con
NDK de Android de LTS r23 (agosto de 2021)
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-gdbusa 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).
-
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
NDK de Android r22b (marzo de 2021)
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 usasasdirectamente, utilizaclangen 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::nofollowno se respete en dispositivos antiguos. -
Error 1260:
std::filesystem::canonicalfuncionará correctamente por error cuando se pase una ruta de acceso inexistente en dispositivos antiguos.
-
Error 1258: es posible que
-
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 (
NDK de Android de asistencia a largo plazo r21e (enero de 2021)
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=llddurante 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)
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.
-
NDK de Android r20b (junio de 2019)
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=llddurante 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.
-
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
NDK de Android r19c (enero de 2019)
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=llddurante 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: En el caso de r19, la cadena de herramientas también está instalada en la antigua ruta para darles a los sistemas de compilación una oportunidad de adaptarse al nuevo diseño. Se quitarán las antiguas rutas en r20. No se quitará la secuencia de comandos$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp 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.
-
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
NDK de Android r18b (septiembre de 2018)
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=llddurante 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.
NDK de Android r17c (junio de 2018)
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.
NDK de Android r16b (diciembre de 2017)
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 alibc++. 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.
NDK de Android r15c (julio de 2017)
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.
- 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 tuAPP_PLATFORMtiene una configuración inferior aandroid-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.
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.
- 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.
NDK de Android r14b (marzo de 2017)
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.
- 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:
Para obtener información adicional sobre las novedades y los cambios de esta actualización, consulta el registro de cambios.
NDK de Android r13b (octubre de 2016)
- 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
-
- Se realizaron correcciones adicionales para
__cxa_bad_castfaltantes.
- Se realizaron correcciones adicionales para
- NDK
-
- El valor predeterminado de
NDK_TOOLCHAIN_VERSIONahora 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.shes 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.
- El valor predeterminado de
- 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.
NDK de Android r12b (junio de 2016)
- Descargas
- Las descargas de esta versión están disponibles aquí.
- Anuncios
- El comando
ndk-buildtiene como predeterminado el uso de Clang en r13. Quitaremos GCC en una versión posterior. - La secuencia de comandos
make-standalone-toolchain.shse quitará en r13. Asegúrate de quemake_standalone_toolchain.pyse adapte a tus necesidades. - Informa los problemas en GitHub.
- Se corrigió
ndk-gdb.py. (Error 118) - Se actualizó
NdkCameraMetadataTags.hpara 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).
- Para obtener información completa sobre estas modificaciones, consulta la lista de cambios.
- 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-infode manera predeterminada para compilaciones de depuración de Clang. Este cambio debe mejorar la eliminación de errores con LLDB. --build-idahora 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_CYGPATHno debe generar más problemas con libgcc. (Error 195486 de Android)- Las opciones
-Wl,--warn-shared-textrely-Wl,--fatal-warningsahora 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
libcamera2para dispositivos que admiten la funciónINFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDo 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.exeyclang++.exeen el paquete de Windows de 32 bits son, de hecho, de 64 bits. El archivo ejecutable de 32 bits se llamaclang_32.exe.
- Los archivos ejecutables
- 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-pltpara 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-dynamicpara solucionar un error del vinculador dinámico para versiones anteriores de Android. - El NDK r11 KI para
dynamic_castno 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++_sharedsigue 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.
__thread debería funcionar bien esta vez.
NDK de Android r12 (junio 2016)
- Descargas
- Las descargas de esta versión están disponibles aquí.
- Anuncios
- El comando
ndk-buildtendrá 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.shen una próxima versión. Si usas esta secuencia de comandos, planifica la migración amake_standalone_toolchain.pylo 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-infoesté habilitada de forma predeterminada. Este cambio permite que el proceso de depuración sea más fluido con LLDB. - Se habilitó el
--build-idcomo 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_CYGPATHpara que ya no haya inconvenientes relacionados con libgcc. (Error 195486) - Se habilitaron las siguientes opciones como predeterminadas:
-Wl,--warn-shared-textrely-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_LIMITEDo una versión posterior. Para obtener más información, consulta la referencia deCameraCharacteristics. - Clang
- Se actualizó Clang a 3.8svn (r256229, compilación 2812033). Los archivos ejecutables
clang.exeyclang++.exeen el paquete de Windows de 32 bits son, de hecho, de 64 bits. El archivo ejecutable de 32 bits se llamaclang_32.exe. - Se corrigió
__threadpara 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ó
libatomicpara 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-pltpara 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-dynamicpara 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_castfuncionara 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++_sharedno 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ámaraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAPse incluyó por accidente y se quitará en la próxima actualización. En su lugar, usa el valorACAMERA_STATISTICS_LENS_SHADING_MAP.
NDK de Android r11c (marzo de 2016)
- 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
--attachdel comandondk-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 de Android r11b (marzo de 2016)
- 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-gdbpara 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
--toolchainenmake-standalone-toolchain.sh.
- Se corrigió
- Avisos importantes
- Clang
-
- Errata
- Al contrario de lo que informamos en las Notas de la versión r11,
__threadno 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.
NDK de Android r11 (marzo de 2016)
- 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.
- Te recomendamos que migres a Clang.
- Elementos agregados
- Clang ahora es compatible con TLS emulada.
- El compilador ahora admite
__threadpor medio de la emulación de TLS de ELF con datos de subproceso pthread específicos. thread_localpara 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.
- El compilador ahora admite
- Clang ahora es compatible con TLS emulada.
- Avisos importantes
- 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.
- Se agregó una API de seguimiento nativo a
- 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.
- Se quitó la compatibilidad con
- 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
-targetcomoarmv5te-linux-androideabi.
- Para restablecer el comportamiento anterior, puedes especificar la opción
- Se modificó el sistema de compilación para usar
-isystempara 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::__ndk1para 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_PLATFORMcomo predeterminado de Gingerbread.- Se brindará compatibilidad con Froyo y versiones anteriores en un lanzamiento futuro.
- Se cambiaron las cadenas de herramientas independientes de ARM para que arm7 sea el valor predeterminado.
- Se actualizó la struct
_Unwind_Exceptionde 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.hyuchar.hdesde ToT Bionic. - Se sincronizó
sys/cdefs.hen todos los niveles de API. - Se corrigió
fegetenv and fesetenvpara arm. - Se corrigió el end pointer de tamaño/alineación de
crtend_*para mips64 y x86_64.
- Avisos importantes
- Binutils
-
- Elementos agregados
- Se agregó una nueva opción:
--pic-veneer.
- Se agregó una nueva opción:
- 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=golden 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).
- Elementos agregados
- 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.
- Eliminaciones
- YASM
-
- Cambios
- Se actualizó YASM a la versión 1.3.0.
- Cambios
- 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
-O0provoca fallas de prueba condynamic_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.
NDK de Android r10e (mayo de 2015)
- 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=clangelige 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.goldpara 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.
- Para compilar con varios subprocesos, usa la opción
- 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.
- Se integró la solución alternativa para Cortex-A53 Erratum 843419 en el vinculador
- 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.pragmatiene 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_*enmedia/NdkMediaDrm.h. - Se corrigió
sys/ucontext.hparamips64. - Se dio de baja la comprobación de versión de Clang para
__builtin_isnany__builtin_isinf. - Se agregaron
android-21/arch-mips/usr/include/asm/reg.hyandroid-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
mipsymips64creen una sección.gcc_except_tableque 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-rtque producían fallas cuando se compilaba Clang paramips64. 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::comparepara mostrar-1y1. Antes, mostraba números firmados de forma arbitraria. - Se corrigió
ndk-gdbpara 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_iterpara GCC. Para obtener más información, consulta el error 22355 de LLVM. - Se corrigió la compatibilidad de
.asmpara la ABIx86_64. - Se implementó una solución alternativa para el problema de
stlporten 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 targetque ocurría al compilar un solo archivo.cejecutando el comandondk-build.cmddesdegradle. (Error 66937) - Se agregaron las bibliotecas
libatomic.aylibgomp.aque faltaban en las siguientes cadenas de herramientas de host:aarch64-linux-android-4.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_64-4.9
- Otros cambios:
-
- Se agregó
ld.goldparaaarch64. El vinculador predeterminado sigue siendold.bfd. Para habilitarld.goldde forma explícita, agrega-fuse-ld=golda la variableLOCAL_LDFLAGSoAPP_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-protectorpor-fstack-protector-strongpara 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
--packageandk-gdbpara permitir que el sistema de compilación anule el nombre del paquete. (Error 56189) - Se dio de baja
-mno-ldc1-stc1para MIPS. Es posible que esta opción no funcione con las nuevas opciones-fpxxy-mno-odd-spreg, o con la ABI de FPXX. - Se agregó la detección MIPS MSA y R6 a
cpu-features.
- Se agregó
NDK de Android r10d (diciembre de 2014)
- 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.6a ndk-build o--toolchain=arm-linux-androideabi-4.6cuando ejecutesmake-standalone-toolchain.shen 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
-mstackrealignde 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 -piecuando se compile. En nivel 16 o versiones posteriores, ndk-build usaPIEcuando 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.
- 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
- 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/vsscanfde 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)
- 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,
- Otras correcciones de errores:
-
- Se implementaron las siguientes mejoras en encabezados y bibliotecas:
- Se agregó
posix_memalignal nivel de API 16. Además, se agregó un prototipo enstdlib.hpara los niveles de API 16 a 19. (Error 77861) - Se corrigió
stdatomic.hpara que incluya<atomic>solo en C++11. - Se modificaron los siguientes encabezados para uso independiente:
sys/user.hygl2ext.h,dlext.h,fts.h,sgidefs.hpara el nivel de API 21. - Se modificó
sys/user.hpara cambiar el nombre demxcsr_maskpormxcr_masky cambiar el tipo de datos parau_ar0de - Se cambió el tipo de valor que se muestra para
sysconf()deintalong. - Se corrigió el control de
thumbde ndk-build paraLOCAL_ARM_MODE. En r10d, ndk-build agregaLOCAL_LDFLAGS+=-mthumbde forma predeterminada, salvo que se aplique alguna de estas condiciones: - Configuraste
LOCAL_ARM_MODEigual quearm. - Estás haciendo una compilación de depuración (con opciones como
APP_OPTIM=debugyAndroidManifest.xmlque contienenandroid: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_FILESen 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_PCHpara mejorar la compatibilidad con Clang. (Error 77575) - Se aclaró la advertencia "requires executable stack" de ld.gold. (Error 79115)
unsigned longa struct user_regs_struct*.
NDK de Android r10c (octubre de 2014)
- 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-Lahora lleva la designación de la versión oficial:android-21. - Para actualizar GCC 4.9, se cambió el nombre a la rama
googledel repositorio de GCC. Entre las grandes diferencias de la versión ascendente de GCC 4.9, se incluyen las siguientes: - La opción
-O2ahora activa la vectorización, sin división de bucles, pero con un desenrollado más agresivo. - Mejoras para FDO y LIPO
- Se agregó compatibilidad con Clang 3.5 a todos los hosts:
NDK_TOOLCHAIN_VERSION=clangahora 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-ascomo solución alternativa. - Clang 3.5 genera más advertencias para marcas sin usar, como la opción
-finline-functionsque GCC admite. - 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, consultaprebuilt/common/gdb/common.setupen 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.ha 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-neonensamples/. - Consulta la guía de Intel para brindar portabilidad de ARM NEON a Intel SSE.
- Ve a la Guía para desarrolladores de NDK (
- Se documentó la compatibilidad con
_FORTIFY_SOURCEenheaders/libs/android-21, que aparecía en r10 (cuandoandroid-21aún se llamabaAndroid-L), pero no tenía documentación.
Para obtener información más detallada, consulta la sección Correcciones de errores importantes que aparece más abajo.
Cuando migres desde proyectos que usen GCC, puedes usar
-Wno-invalid-command-line-argumenty-Wno-unused-command-line-argumentpara ignorar marcas sin usar hasta que decidas qué hacer con ellas a largo plazo. - Correcciones de errores importantes:
-
- Se corrigió un error interno del compilador con GCC4.9/aarch64 que causaba el siguiente mensaje de error (error 77564):
- Se corrigió la generación de código incorrecto a partir de GCC4.9/arm. (Error 77567)
- Se corrigió un error interno del compilador con GCC4.9/mips que involucraba el ensamblaje intercalado. (Error 77568)
- Se corrigió un error de código que generaba GCC4.9/arm para
x = (cond) ? y : x. (Error 77569) - Se corrigió GCC4.9/aarch64 y Clang3.5/aarch64 para solucionar Cortex-A53 erratum (835769) de forma predeterminada. Para inhabilitar la solución alternativa, especifica
-mno-fix-cortex-a53-835769.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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_getReportingModeyASensor_isWakeUpSensor. - Se corrigió
stdatomic.hpara mejorar la compatibilidad con GCC 4.6 y admitir el encabezado<atomic>. - Se agregó
sys/ucontext.hysys/user.ha todos los niveles de API. El encabezadosignal.hahora incluye<sys/ucontext.h>. Puedes quitar cualquier definición existente destruct ucontext. - Se agregó
posix_memaligna 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_nanosleepyclock_settimeal 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,__getdents64ydlmalloc. - 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_tainten las siguientes funciones:strtoll_l,strtoull_l,wcstoll_lywcstoull_l. - Se restauraron las siguientes funciones en la arquitectura de 64 bits:
arc4random,arc4random_bufyarc4random_uniform. - Se revirtieron
cxa_*y los operadoresnewydeletealibstdc++.so. Este cambio restablece el comportamiento de r9d. Las versiones anteriores de r10 contenían archivos de marcación de posición.
- Se agregaron más claves de código de TV:
- 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=enmake-standalone-toolchain.shpara 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/.
- Se implementaron las siguientes mejoras en encabezados y bibliotecas de
- Otros cambios:
-
- Se mejoró
cpu-featurespara 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.hyinclude-fixed/linux/compiler.hdel compilador GCC. (Error 73728) - Se corrigió un error asociado a
-fltocon GCC 4.8 en Mac OS X. El mensaje de error decía lo siguiente: - Se corrigió un error de ortografía en
build-binary.mk.. (Error 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Se mejoró
- Problemas conocidos importantes:
-
- Especificar -Os (
-fauto-profile) en GCC4.9 podría provocar fallas. (Error 77571)
- Especificar -Os (
NDK de Android r10b (septiembre de 2014)
- 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:
- Otras correcciones de errores:
-
- Se quitó
stdio.hde los directoriosinclude-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/ysources/third_party/googletest/README.NDK. (Error 74069). - Se hicieron las siguientes correcciones a los encabezados de Android L:
- Se agregaron las siguientes funciones a
ctype.hywchar.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(). - Se cambió el nombre de
cmsg_nxthdra__cmsg_nxthdr. - Se quitó
__libc_malloc_dispatch. - Se cambió el prototipo
ptrace()along ptrace(int, ...);. - Se quitó
sha1.h. - Se amplió
android_dlextinfoaandroid/dlext.h. - Se agregaron anotaciones a
__NDK_FPABI__para funciones que reciben o muestran valores de doble tipo o flotantes enstdlib.h,time.h,wchar.hycomplex.h.
- Se quitó
- Otros cambios:
-
- Se actualizaron
mipsel-linux-android-4.9ymips64el-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-featurespara que detecte más funciones arm64. (Lista de cambios 100339).
- Se actualizaron
NDK de Android r10 (julio de 2014)
- 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=clangpodrí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
all32yall64paraAPP_ABI.APP_ABI=all32es igual aAPP_ABI=armeabi,armeabi-v7a,x86,mips.APP_ABI=all64es igual aAPP_ABI=arm64-v8a,x86_64,mips64.APP_ABI=allselecciona 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_TR1para 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.hactualizado 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.9aApplication.mko 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 comandosmake-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.8o4.9para habilitar ndk-gdb para seleccionar GDB 7.6. - Se agregó la opción de compilación
-mssse3para 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-aliasingsi 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
-O3de Clang 3.3/3.4 en: - Se corrigió la siguiente falla de Clang 3.3/3.4:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef. (Error 57381)): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018. (Error 66950). - Se corrigió libc++ para que ahora compile
- Otras correcciones de errores:
-
- Se corrigieron encabezados:
- Se corrigió
ssize_tde 32 bits para que seainten lugar delong int. - Se corrigieron
WCHAR_MINyWCHAR_MAXpara 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_ty que sea de 16 bits, usa-fshort-wchar. - Se quitaron símbolos inexistentes de
libc.sode 32 bits y se agregaronpread64,pwrite64yftruncate64para 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: - 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 usestrrchr()en lugar destrchr()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-piepara Android si no existía-sharedni-static. Este comportamiento incorrecto provocaba que el vinculador indicara que-sharedy-pieno podían coexistir.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);(Lista de cambios 91185). - Otros cambios:
-
- Se agregó
arm_neon.ha 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.
- Se agregó
NDK de Android r9d (marzo de 2014)
- Cambios importantes:
-
- Se agregó compatibilidad con el compilador Clang 3.4. La opción
NDK_TOOLCHAIN_VERSION=clangahora 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: Se copia la biblioteca compilada aTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a. Para que Make se comporte según lo esperado, no puedes especificar tantoarmeabi-v7acomoarmeabi-v7a-hardcomo objetivos de Make (es decir, en la línea APP_ABI=). Si lo haces, se ignorará una opción. Ten en cuenta queAPP_ABI=allsigue siendo igual aarmeabi armeabi-v7a x86 mips. - La secuencia de comandos
make-standalone-toolchain.shcopia bibliotecas adicionales en los directorios/hard. Agrega las marcasCFLAGSyLFLAGSanteriores 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_ASMFLAGSyEXPORT_ASMFLAGSpara x86. La secuencia de comandosndk-buildusaprebuilts/*/bin/yasm*para compilarLOCAL_SRC_FILESque 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++_staticoAPP_STL := c++_sharedenApplication.mk. Puedes volver a compilar desde la fuente medianteLIBCXX_FORCE_REBUILD := true - Ejecuta
make-standalone-toolchain.sh --stl=libc++para crear una cadena de herramientas independiente con encabezados y bibliotecas libc++.
CPLUSPLUS-SUPPORT.html. (Error 36496) - Agrea
- Se agregó compatibilidad con el compilador Clang 3.4. La opción
- 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,_hashliby_ssl - Linux:
zlib,nis,crypt,_cursesy_curses_panel
- Mac OS X:
- Se corrigió el
event_getmsg_helperde 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 enandroid/asset_manager.hpara el nivel de API 13 o superior de Android. (Error 64988) - Se corrigió un
#includefaltante enandroid/rect_manager.hpara la API nivel 14 o superior de Android. - Se agregó
JNICALLaJNI_OnLoadyJNI_OnUnloadenjni.h. Ten en cuenta queJNICALLse define como__NDK_FPABI__. Para obtener más información, consultasys/cdefs.h. - Se actualizaron los siguientes encabezados para que se puedan incluir sin necesidad de agregar manualmente sus dependencias (error 64679):
- Se agregó
sys/cachectl.hpara 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.hagregando__NDK_FPABI__a las funciones que tomaban o mostraban valores flotantes o dobles. - Se corrigió
struct statde 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_VALUEy__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUEpara la API nivel 9 y versiones anteriores. - Se agregaron
scalbln,scalblnfyscalblnla x86libm.sopara el nivel de API 18 y versiones posteriores. - Se corrigió un error de ortografía en
sources/android/support/include/iconv.h. (Error 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Se corrigió un
- Se corrigió gabi++
std::unexpected()para que llame astd::terminate()y se pueda ejecutar un controladorstd::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 activaonSystemUiVisibilityChangey, por lo tanto, no restablece el modo envolvente.
- Se corrigió la secuencia de comandos
ndk-buildpara agregar-rpath-link=$SYSROOT/usr/liby-rpath-link=$TARGET_OUTpara poder usarld.bfdcon el objetivo de vincular archivos ejecutables. (Error 64266) - Se quitó
-Bsymbolicde todas las compilaciones de STL. - Se corrigió
ndk-gdb-py.cmdconfigurandoSHELLcomo una variable de entorno en lugar de transmitirlo apython.exe, que ignora la configuración. (Error 63054) - Se corrigió la secuencia de comandos
make-standalone-toolchain.shpara que la opción--stl=stlportcopie los encabezados de gabi++ en lugar de realizar symlinks entre ellos. Los shells decmd.exey MinGW no entienden estos symlinks que crea cygwin.
- Correcciones de encabezados:
- Otros cambios:
-
- Se aplicaron permisos de ejecución a todas las secuencias de comandos
*cmdque anteriormente se debían usar solo en el shellcmd.exe, en caso de que los desarrolladores prefieran usarndk-build.cmden cygwin en lugar de la secuencia de comandosndk-buildrecomendada. - Se mejoró la velocidad de la secuencia de comandos
make-standalone-toolchain.shusando la acción de mover en lugar de la de copiar si el directorio de destino especificado no existe.
- Se aplicaron permisos de ejecución a todas las secuencias de comandos
NDK de Android r9c (diciembre de 2013)
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=mcldpara que no aparezca el siguiente error:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Se corrigió la compatibilidad de
-mhard-floatpara las funciones matemáticas__builtin. Para obtener información continua sobre correcciones de-mhard-floatcon STL, consulta el error 61784.
- Otras correcciones de errores:
-
- Correcciones de encabezados:
- Se cambió el prototipo de
pollapoll(struct pollfd *, nfds_t, int);enpoll.h. - Se agregó
utimensatalibc.sopara 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ó
futimensenlibc.sopara la API nivel 19 de Android. - Se agregaron
clock_settime()yclock_nanosleep()faltantes atime.hpara la API nivel 8 o superior de Android. - Se agregaron
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,yCLOCK_BOOTTIME_ALARMentime.h.. - Se quitaron
CLOCK_REALTIME_HRyCLOCK_MONOTONIC_HR.obsoletos.
- Se cambió el prototipo de
- 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_ReleaseStringUTFCharsen/system/lib/libdvm.soque causaba fallas en dispositivos x86.
- Se corrigieron fallas de
ndk-buildque se producían en cygwin cuando se hacía referencia al paquete del NDK mediante un symlink. - Se corrigieron fallas de
ndk-build.cmdque se producen en las ventanascmd.execuandoLOCAL_SRC_FILEScontiene rutas de acceso absolutas. (Error 69992) - Se corrigió la secuencia de comandos
ndk-stackpara 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-stackpara objetivos Windows-x64_64 a fin de que ya no coincida erróneamente una línea de marco con una línea de la secciónstack:que no contengapc,eipniip. 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.
- Correcciones de encabezados:
- Otros cambios:
-
- Se agregó
LOCAL_EXPORT_LDFLAGS. - Se agregó la configuración
NDK_PROJECT_PATH=nullpara su uso en un sistema de compilación integrado donde las opciones se pasan explícitamente andk-build. Con esta configuración,ndk-buildno hace ningún intento de buscarNDK_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 otrasAPP_*contenidas enApplication.mk. - Ahora se puede enumerar
APP_ABIen 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, mediante la opción-g. Esta opción ayuda a la secuencia de comandosndk-stacka 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-jnipara informarAPP_ABIen la compilación. - Se usó la herramienta
aren modo Determinista (opción-D) para compilar bibliotecas estáticas. (Error 60705)
- Se agregó
NDK de Android r9b (octubre de 2013)
- Cambios importantes:
-
- Se actualizó
include/android/*hymath.hpara 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-floaten la ABI de armeabi-v7a existente. Para obtener más información y consultar las restricciones actuales de Clang, consultatests/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 exportaGCC_COLORScomo se muestra a continuación: Para obtener más información, consulta GCC Language Independent Options.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- 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.
- Se actualizó
- Correcciones de errores importantes:
-
- Se corrigió el problema en el que
thumb2de 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.exede 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:
(Error 58916, Error de GCC)internal compiler error: verify_flow_info failed
- Se modificó la compilación de GDB/ARM para omitir los datos de
ARM.exidxpara 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: (Parche de GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Se corrigió el problema en el que
- Otras correcciones de errores:
-
- Correcciones de encabezados
- Se corrigió el ARM
WCHAR_MINyWCHAR_MAXpara que no esté firmado de acuerdo con las especificaciones (las versiones X86/MIPS están firmadas). Define_WCHAR_IS_ALWAYS_SIGNEDpara restablecer el comportamiento anterior. (Error 57749) - Se corrigió
include/netinet/tcp.hpara que contenga el estado de enumeraciónTCP_INFO. (Error 38881) - Se corrigió la macro
_C_LABEL_STRINGde la macrocdefs_elh.hpara 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
imaxabsyimaxdivdel encabezadointtypes.h. - Se corrigió un problema con los valores mostrados de
pthread_exit()ypthread_self(). (Error 60686) - Se agregó la función
mkdtemp()faltante, que ya existe en el encabezadostdlib.hdebionic.
- Se corrigió el ARM
- Se corrigió un problema de compilación de
samples/gles3jnicon Clang en la API nivel 11 de Android. - Se corrigió MCLinker para permitir múltiples casos de las siguientes opciones:
-gc-sectionsy--eh-frame-hdr. - Se corrigió MCLinker para aceptar la opción
--no-warn-mismatch. - Se modificó la opción
cpu-featurespara 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.cen 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-asde Clang para que pueda pasar las pruebas parassax-instructionsyfenv. - Se arregló el compilador GCC 4.6/4.7/4.8 para pasar la opción del vinculador
--eh-frame-hdrincluso 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, consultaNDK-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_suby__atomic_fetch_or. - Se corrigió el ICE de Clang 3.3 ICE con
vfprintfpersonalizado. (Error de Clang)
- Correcciones de encabezados
- 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:
Para ver ejemplos de código, consultaLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp - Se redujo significativamente el tamaño de
ld.mcld(1.5 MB comparado con 3.5 MB deld.bfdy 7.5 MB deld.gold), lo que generó una mejora de velocidad de aproximadamente el 20%. - Se agregó
LOCAL_CONLYFLAGSyAPP_CONLYFLAGSpara especificar las opciones aplicables solo a C, pero no a C++. Los elementosLOCAL_CFLAGSyAPP_CFLAGSexistentes 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=gnu99pueden 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.ase compilen con-funwind-tablespara 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-sdc1de 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-plasmapara 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.
- 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:
NDK de Android r9 (julio de 2013)
- Cambios importantes:
-
- Se agregó compatibilidad con Android 4.3 (nivel de API 18) Para obtener más información, consulta
STABLE-APIS.htmly ejemplos de códigos nuevos ensamples/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, exportaNDK_TOOLCHAIN_VERSION=4.8o agrégalo aApplication.mk. - Para compilaciones independientes, usa la opción
--toolchain=enmake-standalone-toolchain.sh. Por ejemplo:
--toolchain=arm-linux-androideabi-4.8
Nota: La opción
-Wunused-local-typedefsestá habilitada por-Wall. Asegúrate de agregar__attribute__((unused))si usas afirmaciones en tiempo de compilación comosources/cxx-stl/stlport/stlport/stl/config/features.h, línea #311. Para obtener más información, consulta Cambio 55460Nota: 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-accesspara compilar núcleos que no admitan esta función. - Para compilaciones de
- Se agregó compatibilidad con Clang 3.3. La opción de compilación
NDK_TOOLCHAIN_VERSION=clangahora 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.goldes el valor predeterminado cuando está disponible, debes agregar-fuse-ld=mcldenLOCAL_LDFLAGSoAPP_LDFLAGSpara habilitar MCLinker. - Se agregó la herramienta
ndk-dependsque imprime las dependencias de la biblioteca ELF. Para obtener más información, consultaNDK-DEPENDS.html. (Error 53486)
- Se agregó compatibilidad con Android 4.3 (nivel de API 18) Para obtener más información, consulta
- 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
-Ocuando se usa Boost 1.52.0. (Error 42891) - Se corrigieron
libc.soylibc.apara admitir la funciónwait4(). (Error 19854) - Se actualizaron los archivos x86 libc.so y libc.a para incluir la función
clone(). - Se corrigió el error
LOCAL_SHORT_COMMANDSen el que el archivolinker.listestá 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-hdrsuele 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-gdbpara que las acciones--starto--launchesperen 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
--nowaitpara 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
stepidespués de una instrucción Thumbbx pcoblx pc. (Error 56962 y error 36149) - Se corrigió
gdbserverde MIPS para que busqueDT_MIPS_RLD_MAPen lugar deDT_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)
- Se corrigió el problema de control de eventos potenciales en
- Otras correcciones de errores:
-
- Se corrigió la secuencia de comandos
ndk-buildpara 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_Exceptionpara 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-buildpara garantizar que se quiten las bibliotecas compiladas de los proyectos que incluyan bibliotecas estáticas precompiladas cuando se usa el comandondk-build clean. (Cambio 54461 y cambio 54480). - Se modificó la opción
NDK_ANALYZE=1para que sea menos detallada. - Se corrigió
gnu-libstdc++/Android.mkpara incluir una rutabackward/para las compilaciones que usan retrocompatibilidad. (Error 53404) - Se corrigió un problema por el que
stlport newa veces mostraba valores aleatorios. - Se corrigió
ndk-gdbpara que coincida con el orden deCPU_ABIS, no conAPP_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/swap32de x86:invalid 'asm': operand number out of range. (Error 54465 y cambio 57242). - Se corrigió
ld.goldpara combinar literales de strings. - Se corrigió
ld.goldpara controlar la alineación de símbolos grandes. - Se actualizó
ld.goldpara habilitar la opción--sort-section=name. - Se corrigió GCC 4.4.3/4.6/4.7 para suprimir la opción
-export-dynamicen los programas vinculados estáticamente. GCC ya no agrega una sección.interppara programas vinculados estáticamente. - Se corrigió el error de compilación
stlportde GCC 4.4.3 sobretypedefinconsistente de_Unwind_Control_Block. (Error 54426) - Se corrigieron secuencias de comandos
awkpara controlar archivosAndroidManifest.xmlcreados en Windows que pueden contener caracteres finales\ry causar errores de compilación. (Error 42548) - Se corrigió
make-standalone-toolchain.shpara sondear el directorioprebuilts/para detectar si el host es de 32 bits o de 64 bits. - Se corrigió la opción
-integrated-asde Clang 3.2. - Se corrigieron los datos del controlador
pr1ypr2del modelo compacto ARM EHABI de Clang 3.2. - Se agregó la opción
-mllvm -arm-enable-ehabide 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-sdken el manifiesto de la aplicación. (Error 57015)
- Se corrigió la secuencia de comandos
- Otros cambios:
-
- Correcciones de encabezados
- Se modificaron los encabezados para que
__set_errnosea una función intercalada, ya que__set_errnodejó de estar disponible enerrno.hylibc.soya no lo exporta. - Se modificó
elf.hpara incluirstdint.h. (Error 55443) - Se corrigió
sys/un.hpara que se pueda incluir independientemente de otros encabezados. (Error 53646) - Se corrigió toda la familia de API de
MotionEvent_getHistoricalpara tomarconst AInputEvent* motion_event. (Error 55873) - Se corrigió
malloc_usable_sizepara que tomeconst void*. (Error 55725) - Se corrigió stdint.h para mejorar la compatibilidad con C99. (Cambio 46821)
- Se modificó
wchar.hpara no redefinirWCHAR_MAXniWCHAR_MIN. - Se corrigió la declaración
<inttypes.h>para las macrosPRIySCNrelacionadas con el puntero. (Error 57218) - Se cambió el encabezado
sys/cdefs.ha fin de que__WCHAR_TYPE__sea de 32 bits para niveles de API inferiores a 9, lo que significa quewchat_tes de 32 bits para todos los niveles de API. Para restaurar el comportamiento anterior, define la variable booleana_WCHAR_IS_8BIT. (Error 57267)
- Se modificaron los encabezados para que
- 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.shpara admitir la bibliotecastlportademás degnustlcuando especificas la opción--stl=stlport. Para obtener más información, consultaSTANDALONE-TOOLCHAIN.html. - Se actualizó la secuencia de comandos
make-standalone-toolchain.shpara que la opción--llvm-version=cree las secuencias de comandos$TOOLCHAIN_PREFIX-clangy$TOOLCHAIN_PREFIX-clang++, además declangyclang++, 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-semanticspara 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-promotionpara 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 hacerconst_castpara 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ó una marca
- Se agregó
-mldc1-sdc1a los compiladores MIPS GCC y Clang. De manera predeterminada, los compiladores alinean correctamente los objetos de 8 bytes y emiten las instruccionesldc1ysdc1para 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 operacionesldc1ysdc1en la memoria no alineada. En este caso, usa la marca-mno-ldc1-sdc1como solución alternativa. - Se redujo la gravedad del evento de advertencia a información si
APP_PLATFORM_LEVELes mayor queAPP_MIN_PLATFORM_LEVEL.APP_PLATFORM_LEVELpuede ser inferior aAPP_PLATFORMenjni/Application.mkporque el NDK no tiene encabezados para todos los niveles. En este caso, el nivel real se desplaza hacia abajo. Laandroid:minSdkVersionespecifica elAPP_MIN_PLATFORM_LEVELen el manifiesto de tu aplicación. (Error 39752) - Se agregaron los métodos
android_getCpuIdArm()yandroid_setCpuArm()acpu-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-buildpara usaras/ldde GCC 4.7 para las compilaciones de Clang.Nota: En GCC 4.7, se cambió el nombre de
monotonic_clockyis_monotonicasteady_clockyis_steady, respectivamente. - Se agregaron las siguientes advertencias nuevas a la secuencia de comandos
ndk-build:- Se agregaron advertencias si
LOCAL_LDLIBS/LDFLAGSse 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/LDFLAGSde una biblioteca compartida o módulos ejecutables.
- Se agregaron advertencias si
- Se actualizaron las secuencias de comandos de compilación de modo que, si
APP_MODULESno está definido y solo se enumeran las bibliotecas estáticas enAndroid.mk, la secuencia de comandos fuerce todas las compilaciones. (Error 53502) - Se actualizó
ndk-buildpara ser compatible con rutas de acceso absolutas enLOCAL_SRC_FILES. - Se quitaron los archivos ejecutables
*-gdbtui, que son duplicados de los archivos ejecutables*-gdbcon la opción-tuihabilitada. - 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_OUTpara permitir la anulación de la ruta de acceso alibraries/gdbserverdesde el valor predeterminado$PROJECT/libs. Para obtener más información, consultaOVERVIEW.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 configurarLOCAL_DISABLE_FORMAT_STRING_CHECKS=truepara inhabilitarla. Para obtener más información, consultaANDROID-MK.html. - Se agregó compatibilidad con STL pretty-print en
ndk-gdb-py. Para obtener más información, consultaNDK-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.
- Correcciones de encabezados
NDK de Android r8e (marzo de 2013)
- 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, consultaCHANGES.HTMLyNDK-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.goldes el predeterminado cuando está disponible, por lo que debes habilitarlo explícitamente. Para obtener más información, consultaCHANGES.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_LIBRARIESyLOCAL_SHARED_LIBRARIES. Para obtener más información, consultaCHANGES.HTML. (Error 39378)
- Se agregó un conjunto de cadenas de herramientas de host de 64 bits (sufijo del nombre de paquete
- 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:5790del compilador interno de GCC 4.7. - Se corrigió el error
redirect_eh_edge_1, at tree-eh.c:2214del 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_GTHREADSpara 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óndistance_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.golda__exidx_starty__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
rvalueuniforme 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:linecuando los símbolos contenían rutas de acceso a archivos largas e indirectas. (Error 42448) - Se corrigió
read_program_headerde GBD para ejecutables MIPS PIE. (Cambio 49592) - Se corrigió una falla de segmentación
STLportenuncaught_exception(). (Cambio 50236) - Se corrigió el error de bus
STLporten el control de excepciones debido al acceso no alineado deDW_EH_PE_udata2,DW_EH_PE_udata4yDW_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)
- Se corrigió la secuencia de comandos de compilación para compilar todas las cadenas de herramientas en
- Otras correcciones de errores:
-
- Se corrigieron los encabezados del NDK:
- Se quitaron las definiciones redundantes de
size_t,ssize_typtrdiff_t. - Se corrigió el encabezado
fenv.hde MIPS y ARM. - Se corrigió
stddef.hpara no redefiniroffsetof, debido a que ya existe en la cadena de herramientas. - Se corrigió
elf.hpara que contengaElf32_auxv_tyElf64_auxv_t. (Error 38441) - Se corrigieron las definiciones de C++ de
#ifdefen el archivo de encabezadoOpenSLES_AndroidConfiguration.h. (Error 53163)
- Se quitaron las definiciones redundantes de
- Se corrigió
STLportpara 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ó
cpufeaturespara no analizar/proc/self/auxv. (Error 43055) - Se corrigió
ld.goldpara no depender de la libstdc++ del host ni de las plataformas Windows, para no depender de la bibliotecalibgcc_sjlj_1.dll. - Se corrigió Clang 3.1, que emite una lista de registros inconsistente en
.vsavey hace que falle el ensamblador. (Cambio 49930) - Se corrigió Clang 3.1 para poder compilar libgabi++ y pasar las pruebas de
test-stlportpara 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
clangyclang++en el compilador independiente del NDK para detectar-cc1y no especificar-targetcuando se encuentre. - Se corrigió
ndk-buildpara observarNDK_APP_OUTestablecido enApplication.mk. - Se corrigieron
libc.soylib.ade X86, a los que les faltaban las funcionessigsetjmpysiglongjmpya declaradas ensetjmp.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-builden Windows cuando se ejecuta desde el directorio JNI del proyecto. (Error 40192) - Se corrigió el problema por el que la secuencia de comandos
ndk-buildno se compilaba si el archivo Make tiene un espacio en blanco al final en la definiciónLOCAL_PATH. (Error 42841)
- Se corrigieron los encabezados del NDK:
- 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_cleanupy__cxa_type_matchpara tener visibilidad de forma predeterminada desde la visibilidad oculta anterior en libstdc++ de GNU. Para obtener más información, consultaCHANGES.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
STLportpueda compilarse para ARM en modo Thumb. - Se agregó compatibilidad con
std::set_new_handleren Gabi++. (Error 52805) - Se habilitó la llamada del sistema
FUTEXen GNU libstdc++. - Se actualizó
ndk-buildpara que ya no copie la biblioteca estática precompilada en el directorioobj/local/<abi>/de un proyecto. (Error 40302) - Se quitó
__ARM_ARCH_5*__de la secuencia de comandostoolchains/*/setup.mkde ARM. (Error 21132) - Se compilaron bibliotecas adicionales de GNU libstdc++ en miniatura para ARM.
- Se habilitaron las instrucciones
madd/msub/nmadd/nmsub/recip/rsqrtdel 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-ally-ftree-loop-linear. (Información) - Se habilitó
pollypara 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ó
-fltoen 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 porqueld.goldno está disponible. - Se habilitó
--pluginy--plugin-optparald.golden GCC 4.6/4.7. - Se habilitó
--text-reorderparald.golden GCC 4.7. - Se configuró libstdc++ de GNU con
_GLIBCXX_USE_C99_MATH, que no define la secuencia de comandosisinfen el encabezado biónico. Para obtener más información, consultaCHANGES.html. - Se agregó
APP_LDFLAGSa las secuencias de comandos de compilación. Para obtener más información, consultaANDROID-MK.html. - Se actualizaron las secuencias de comandos de compilación para permitir que
NDK_LOG=0inhabiliteNDK_LOG. - Se actualizaron las secuencias de comandos de compilación para permitir que
NDK_HOST_32BIT=0inhabilite la cadena de herramientas de 32 bits del entorno del desarrollador del host. - Se cambiaron las marcas predeterminadas de GCC/X86
-march=y-mtune=depentiumproygenericai686yatom. - Se mejoraron las secuencias de comandos para compilar cadenas de herramientas:
- Se corrigió una condición de carrera en
build-gcc.shpara el tipo de compilaciónmingwque impedía una cantidad significativa de procesamiento de compilación en paralelo. - Se actualizaron
build-gabi++.shybuild-stlport.shpara que ahora puedan ejecutarse desde el paquete del NDK. (Error 52835) - Se corrigió
run-tests.shen la colección de utilidadesMSys. - 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.sha una versión más reciente. - Se agregó la opción para compilar
libgnustl_static.aystlport_static.asin visibilidad oculta.
- Se corrigió una condición de carrera en
NDK de Android r8d (diciembre de 2012)
- 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 variableNDK_TOOLCHAIN_VERSION=4.7o agréguela aApplication.mk. - Para compilaciones independientes, agrega la opción
--toolchain=amake-standalone-toolchain.sh, por ejemplo:--toolchain=arm-linux-androideabi-4.7
Nota: Esta función es experimental. Pruébala e informa cualquier error.
- Para
- Se agregó compatibilidad con la excepción
stlporta través de gabi++. Ten en cuenta que el nuevo gabi++ depende dedlopeny el código relacionado. Eso implica lo siguiente:- Ya no puedes compilar un ejecutable estático con la opción
-staticni incluirlibstlport_static.amedianteAPP_STL := stlport_static. (Aún puedes usar la opción-staticcon una cadena de herramientas independiente). La compilación de un ejecutable dinámico medianteinclude $(BUILD_EXECUTABLE)sigue funcionando porque el compilador agrega automáticamente la opción-ldl. - Si tu proyecto se vincula con
-nostdliby {-Wl,- no-undefined}, debes incluir manualmente la opción-ldl.
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.
- Ya no puedes compilar un ejecutable estático con la opción
- 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-ally-fstack-protector-strongcon los compiladores GCC 4.6 y versiones posteriores.Nota: La configuración
-mstack-protector-guarden sí misma no habilita ninguna opción-fstack-protector*. - Se agregó la función
android_setCpu()asources/android/cpufeatures/cpu-features.cpara su uso cuando la detección automática a través de/procno sea posible en Android 4.1 y versiones posteriores. (Error 164154 de Chromium)
- 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:
- 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:
Ocurrió este problema debido a la compilación en Mac OS X 10.7, que produjo objetos binarios que no eran compatibles con Mac OS 10.6.x ni el NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- 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.1en Cygwin. (Error 39585) - Se corrigió la secuencia de comandos
make-standalone-toolchain.shpara 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_ANDROIDBUFFERQUEUESOURCEen 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)
- Se corrigió la recompilación innecesaria de archivos de objetos cuando se usa la secuencia de comandos
- Otras correcciones de errores:
-
- Correcciones del archivo de encabezado del NDK:
- Se corrigieron
__WINT_TYPE__ywint_tpara 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__ensys/cdefs.h. (Error 14627) - Se reorganizaron los encabezados en
byteswap.hydirent.h. - Se corrigió
limits.hpara que incluyapage.h, que proporciona la configuraciónPAGE_SIZE. (Error 39983) - Se corrigió el tipo de datos que se muestra de
glGetAttribLocation()yglGetUniformLocation()deintaGLint. - Se corrigió la constante
__BYTE_ORDERpara compilaciones de x86. (Error 39824)
- Se corrigieron
- Se corrigió la secuencia de comandos
ndk-buildpara no reemplazar-Oscon-O2para 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_SEDyHOST_MAKE. - Se corrigió el problema de
ld.golden compilaciones defsck_msdosque 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.adurante la vinculación de bibliotecas compartidas.
- Correcciones del archivo de encabezado del NDK:
- 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
SIGILLpara rutas sin una sentencia return. - Se actualizó
make-standalone-toolchain.shpara aceptar el sufijo-clang3.1, que es equivalente a agregar--llvm-version=3.1a 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.ay se coloque enlib32/.
NDK de Android r8c (noviembre de 2012)
- 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, exportaNDK_TOOLCHAIN_VERSION=clang3.1o agrega esta configuración de variable de entorno aApplication.mk. - Para compilaciones independientes, agrega
--llvm-version=3.1amake-standalone-toolchain.shy reemplazaCCyCXXen tu archivo Make por<tool-path>/bin/clangy<tool-path>/bin/clang++. ConsultaSTANDALONE-TOOLCHAIN.htmlpara obtener información.
Nota: Esta función es experimental. Pruébala e informa cualquier error.
- Para
- Se agregó el vinculador Gold
ld.goldpara 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 vinculadorld.bfdagregandoLOCAL_LDFLAGS += -fuse-ld=bfdaAndroid.mko pasando-fuse-ld=bfda 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]yndk-gdbpara 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-10medianteandroid-13enAPP_PLATFORM,project.propertiesodefault.propertiesse vinculen conandroid-9en lugar de conandroid-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
-fPIEpara ejecutables independientes de la posición (PIE). Una nueva opciónAPP_PIEte permite controlar este comportamiento. ConsultaAPPLICATION-MK.htmlpara obtener información.Nota: Todos los niveles de API superiores a 14 siguen vinculados con
platforms/android-14y no se agregaron nuevosplatforms/android-N. - Se modificó
ndk-buildpara proporcionar advertencias si el nivel de API ajustado es mayor queandroid:minSdkVersionen elAndroidManifest.xmldel proyecto.
- Se modificó la lógica de compilación para que los proyectos que especifiquen
- Se actualizó la biblioteca de ayuda
cpu-featurespara incluir más funciones específicas de ARM. Consultasources/android/cpufeatures/cpu-features.hpara 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-aal vinculador. Este cambio garantiza que las bibliotecas específicas de v7 ycrt*.ose vinculen correctamente. - Se agregó
-mfpu=vfpv3-d16andk-builden lugar de la opción-mfpu=vfpque se usaba en las versiones anteriores.
- Se modificó este tipo de compilación para pasar el parámetro
- 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:
- Correcciones de errores importantes:
-
- Se corrigió un problema por el que la ejecución de
make-standalone-toolchain.shcon 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++.acuando se copia.
- Se quitó el elemento
\rredundante del precompilado de Windowsecho.exe. El elemento\rredundante hacía quegdb.setupfallara 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 nombrestypeinfode forma predeterminada. Para obtener más información, consultatoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo. (Error 22165) - Se corrigió el problema en el contexto
nullencp/mangle.c::write_unscoped_namede GCC 4.6 por el que GCC podía fallar cuando el contexto eranully se había descodificado enTREE_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*()deSTLporten 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-psabipara evitar esta advertencia ya no es necesaria. - Se corrigió un problema que se producía cuando un proyecto con los sufijos
.armo.neonenLOCAL_SRC_FILEStambién usabaAPP_STL. ConAPP_STL, la secuencia de comandosndk-buildbusca archivos C++ enLOCAL_SRC_FILESantes de agregar rutas de accesoheader/libde STL a la compilación. Se modificóndk-buildpara filtrar los sufijos.army.neonantes de la búsqueda; de lo contrario, los elementos enLOCAL_SRC_FILEScomomyfile.cpp.arm.neonno se compilarán como código C++. - Se corrigió
binutils-2.21/ld.bfdpara poder vincular objetos de binutils antiguos sintag_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/ldvinculaba un objeto precompilado con otrobinutils-2.21más nuevo. - Se corrigió un problema en la compilación de
stdc++de GNU con-mthumby-march=armv7-a, modificandomake-standalone-toolchain.shpara propagarheaders/libsen el subdirectorioarmv7-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 desdechar. (Error 50099 de GCC) - Se corrigió el error interno del compilador con la cantidad de desplazamiento negativo. (Error de GCC)
- Se corrigió
- Se corrigió
-fstack-protectorpara x86, que es también es el valor predeterminado para la ABI x86 de destino dendk-build. - Correcciones específicas para MIPS:
- Se corrigió la endianidad de
STLportconfigurando_STLP_LITTLE_ENDIANen 1 cuando se compilalibstlport_*de MIPS. - Se corrigió un error de
__builtin_unreachablede 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
cc1que consumían el 100% de CPU. (Error 50380 de GCC)
- Se corrigió la endianidad de
- 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
gdbcon una dependencia cableada de una versión específica de este lenguaje. (Error 36120) - Se corrigió
ndk-gdbcuandoAPP_ABIcontieneally 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
solibsactual cuando el vinculador es consistente. Este cambio acelera el control de eventos ensolib. (Error 37677) - Se agregó la corrección para realizar varios intentos de encontrar interrupciones en
solib. GDB ahora vuelve a intentar implementarenable_break()durante cada llamada asvr4_current_sos()hasta que tenga éxito. (Cambio 43563) - Se solucionó un problema por el que
gdbno se detenía en las interrupciones ubicadas en las bibliotecasdlopen-ed. (Error 34856) - Se corrigió
SIGILLen el vinculador dinámico cuando se llamaba adlopen(), en el sistema donde/system/bin/linkerestá desprovisto de símbolos yrtld_db_dlactivity()se implementa comoThumb, debido a que no se preserva elLSBdesym_addr. (Error 37147)
- 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
- Se corrigió un problema por el que la ejecución de
- 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
__unusedpor__linux_unusedenlinux/sysctl.hylinux/icmp.hpara evitar conflictos con#define __unusedensys/cdefs.h. - Se corrigió
fenv.hpara las funciones de C adjuntas con__BEGIN_DECLSy__END_DECLS. - Se quitaron las funciones no implementadas en
malloc.h. - Se corrigió la definición
stdint.hdeuint64_tpara compiladores ANSI. (Error 1952) - Se corrigieron las macros del preprocesador en
<arch>/include/machine/*. - Se reemplazó
link.hpara 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_MAXyULONG_LONG_MAXde<pthread.h>a<limits.h>.
- Se corrigió el código
- 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_exceptionsolo se produce cuandoSTLportestá 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.sopara que no exporteatexit()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 porcrtbegin_*.o.Si tu proyecto está vinculado con las opciones de
-nostdlib -Wl,--no-undefined, debes proporcionar tu propio__dso_handleporquecrtbegin_so.ono está vinculado en este caso. El contenido de__dso_handleno 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
objdumppara entradaspltpara generar un formulariofunction@pltmás legible. - Se quitaron los siguientes símbolos, introducidos en
libgcc.ade GCC 4.6, desde la bibliotecalibc.sode la plataforma X86:__aeabi_idiv0,__aeabi_ldiv0,__aeabi_unwind_cpp_pr1y__aeabi_unwind_cpp_pr2. - Se quitaron los elementos
.ctors,.dtorsy.eh_framesin usar encrt*_so.Sde MIPS. - Se actualizó
ndk-gdbpara que solo se tome la última línea de salida parandk-buildDUMP_XXXX. Este cambio asegura que, siApplication.mkoAndroid.mkimprimen algo con sintaxis$(info ...), esta no se inserte en el resultado deDUMP_XXXX. (Más información)
- Se corrigieron los encabezados del NDK:
- Otros cambios:
-
- Se quitaron los encabezados
arch-x86yarch-mipsdeplatforms/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-buildpara reconocer más extensiones de archivo C++ de forma predeterminada:.cc .cp .cxx .cpp .CPP .c++ .C. Aún puedes usarLOCAL_CPP_EXTENSIONpara sobrescribir estas configuraciones de extensión. - Se solucionó un problema en
samples/san-angelesque 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-gl2de android-5 a android-7native-activityde android-9 a android-10native-audiode android-9 a android-10native-plasmade 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 encrtbegin_static/dynamic.o) a fin de 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-tagdejaron de estar disponibles. - Se agregó una nueva secuencia de comandos
run-tests-all.shque llama arun-tests.shystandalone/run.shcon varias condiciones. La secuencia de comandosrun-tests.shse ejecuta sin la opción--abiy se mejora para compilar la mayoría de las pruebas para todas las ABI admitidas y ejecutarse en todos los dispositivos conectados.
- Se quitaron los encabezados
NDK de Android r8b (julio de 2012)
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_COMMANDSen 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,-dy-sa 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 quegdben el host puede establecer una interrupción en__dl_rtld_db_dlactivityy estar al tanto de la actividad del vinculador (p. ej., volver a explorar los símbolossolibcuando se llama adlopen()).
- Se actualizó la herramienta para pasar las marcas
- Se corrigió
ndk-build cleanen Windows, que no conseguía quitar./libs/*/lib*.so. - Se corrigió
ndk-build.cmdpara que muestre unERRORLEVELdistinto de cero cuandomakefalle. - Se corrigió
libc.sopara dejar de exportar incorrectamente los símbolos__exidx_starty__exidx_end. - Se corrigió
SEGVcuando se desenrolla la pila más allá de__libc_initpara ARM y MIPS.
- Se corrigieron problemas de
- Cambios importantes:
-
- Se agregó la cadena de herramientas de GCC 4.6 (
binutils2.21 congoldy GDB 7.3.x) para que coexista con la cadena de herramientas de GCC 4.4.3 original (binutils2.19 y GDB 6.6).- GCC 4.6 ahora es la cadena de herramientas predeterminada. Puedes configurar
NDK_TOOLCHAIN_VERSION=4.4.3enApplication.mkpara seleccionar la original. - La compatibilidad con el vinculador
goldsolo está disponible para arquitecturas ARM y x86 en hosts Linux y Mac OS. La compatibilidad está inhabilitada de forma predeterminada. AgregaLOCAL_LDLIBS += -fuse-ld=goldenAndroid.mkpara habilitarla. - Los programas compilados con
-fPIErequieren la nueva versión deGDBpara depurar, incluso los objetos binarios en imágenes del sistema Android 4.1 (API nivel 16). - La herramienta
ld2.21 debinutilscontiene 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
stripde ARM para preservar losp_alignyp_flagsoriginales en la secciónGNU_RELROsi son válidos. Sin esta corrección, los programas compilados con-fPIEno podrían depurarse. (Más información)
- Se corrigió
- Se inhabilitó la optimización de
sincos()para brindar compatibilidad con plataformas más antiguas.
- GCC 4.6 ahora es la cadena de herramientas predeterminada. Puedes configurar
- Se actualizaron las opciones de compilación para habilitar el bit Never eXecute (NX) y las protecciones
relro/bind_nowde forma predeterminada:- Se agregó
--noexecstackal ensamblador y-z noexecstackal 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 relroy-z nowal 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:
- Inhabilita la protección NX configurando la opción
--execstackpara el ensamblador y-z execstackpara el vinculador. - A fin de inhabilitar el endurecimiento de los datos internos, configura las opciones
-z norelroy-z lazypara el vinculador. - Inhabilita estas protecciones en el
jni/Android.mkdel 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.htmlpara obtener más información. - Inhabilita la protección NX configurando la opción
- Se agregó
- Se agregó un desarrollo de la marca para los ejecutables de Android con la sección
.note.ABI-tag(encrtbegin_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 */ }
- Se agregó la cadena de herramientas de GCC 4.6 (
- Otras correcciones de errores:
-
- Se corrigió la reubicación truncada de
mips-linux-gnupara que se ajuste al error deR_MIPS_TLS_LDM. (Más información) - Se corrigieron fallas aleatorias de la herramienta
ldque se producían cuando se usaba--gc-sections. (Más información) - Se corrigió el error de recuento de
GOT_PAGEde 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
.dynamicde 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-sharedde los valores predeterminados en la cadena de herramientas de MIPS. El valor predeterminado de la cadena de herramientas de Android es-fPIC(o-fpicsi se admite). Si no especifica explícitamente-mshared,-fpic,-fPIC,-fpieni-fPIE, el compilador MIPS agrega-mno-sharedque desactiva PIC. Se corrigió el compilador para que no agregue-mno-shareden este caso. - Se corrigieron los nombres de paquetes erróneos en los ejemplos
hello-jniytwo-libspara que el proyectotestsque contiene se pueda compilar.
- Se corrigió la reubicación truncada de
- Otros cambios:
-
- Se cambió la ubicación de los objetos binarios:
- Se movió el elemento
gdbserverdetoolchain/<arch-os-ver>/prebuilt/gdbserveraprebuilt/android-<arch>/gdbserver/gdbserver. - Se cambió el nombre del prefijo de la cadena de herramientas de x86 de
i686-android-linux-ai686-linux-android-. - Se movieron
sources/cxx-stl/gnu-libstdc++/includeylibasources/cxx-stl/gnu-libstdc++/4.6cuando se compiló con GCC 4.6, o se moviósources/cxx-stl/gnu-libstdc++/4.4.3cuando se compiló con GCC 4.4.3. - Se movieron
libbfd.aylibintl.adelib/alib32/.
- Se movió el elemento
- 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.shpara generar una nueva cadena de herramientas alojada en Linux que genere ejecutables Win32 y Win64. - Se mejoró la velocidad de
download-toolchain-sources.shcon el comandocloney solo se usacheckoutpara 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.shybuild-host-gdb.sh. - Se agregó
tests/check-release.shpara 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 agregó
- Se quitó el encabezado
if_dl.hde todas las plataformas y arquitecturas. Los elementosAF_LINKysockaddr_dlque describe son específicos de BSD (es decir, no existen en Linux).
- Se cambió la ubicación de los objetos binarios:
NDK de Android r8 (mayo de 2012)
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.htmlen el paquete del NDK.De forma predeterminada, se genera código para los dispositivos basados en ARM. Puedes agregar
mipsa tu definición deAPP_ABIen el archivoApplication.mkpara compilar plataformas de MIPS. Por ejemplo, la siguiente línea instruye andk-buildpara 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.mkpara compilar el código máquina de MIPS. - Puedes compilar una cadena de herramientas de MIPS independiente usando la opción
--arch=mipscuando llames amake-standalone-toolchain.sh. Consultadocs/STANDALONE-TOOLCHAIN.htmlpara 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.
- 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
- 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 baseba la clase derivadaDse 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.shno copiabalibsupc++.*.
- Se corrigió un error de ortografía en la implementación de GAbi++ en el que el resultado de
- Otras correcciones de errores:
-
- Se corrigió
ndk-build.cmdpara garantizar quendk-build.cmdfuncione correctamente incluso si el usuario redefinió la variable de entornoSHELL, que se puede cambiar al instalar una variedad de herramientas de desarrollo en entornos de Windows.
- Se corrigió
NDK de Android r7c (abril de 2012)
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,sinfyexpf).
- 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,
- 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-gdbtambién reconoce la variable. - Se agregó compatibilidad para compilar módulos con cientos o incluso miles de archivos fuente definiendo
LOCAL_SHORT_COMMANDScomotrueenAndroid.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.htmlpara obtener información.
- Se agregó compatibilidad con directorios de salida personalizados a través de la variable de entorno
- Otras correcciones de errores:
-
- Se corrigió la implementación de
android_getCpuCount()en la biblioteca de ayudacpufeatures. 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.
- Se corrigió la implementación de
NDK de Android r7b (febrero de 2012)
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.hpara 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, leedocs/ANDROID-ATOMICS.html. - Se revirtió a
binutils2.19 para corregir errores de depuración que aparecían en el NDK r7 (que cambió abinutils2.20.1). - Se corrigió
ndk-builden Linux de 32 bits. Un error de empaquetado puso una versión de 64 bits del ejecutableawkenprebuilt/linux-x86/binen 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.cmddesde 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 quitó un error de desbordamiento de pila/bucle infinito que se producía cuando se intentaba llamar a
- 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_sharedsi 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.htmlpara obtener más información sobre esta corrección. - Se corrigió
gnustl_shareden Cygwin. El vinculador reclamó que no podía encontrarlibsupc++.aa 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.
- Se actualizó
- 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_FEATUREScomo'exceptions','rtti'o ambos enApplication.mk. Consultadocs/APPLICATION-MK.htmlpara obtener más información.
- Habilita excepciones o RTTI explícitamente en tus módulos o
ndk-gdbahora 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 enps, que suele ser un proceso de servicio.- Se corrigió un error poco frecuente por el que NDK r7 no respetaba el valor
LOCAL_ARM_MODEy 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ó
memmoveen lugar dememcpyenstring::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-featurespara informar tres características opcionales de CPU x86 (SSSE3,MOVBEyPOPCNT). Consultadocs/CPU-FEATURES.htmlpara obtener más información. - Se actualizó
docs/NDK-BUILD.htmlpara que mencioneNDK_APPLICATION_MKen lugar deNDK_APP_APPLICATION_MKpara seleccionar un archivoApplication.mkpersonalizado. - Cygwin:
ndk-buildya 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
/homecomo\\server\subdiren lugar deC:\Some\Dir.
- Cuando el prefijo de la unidad de Cygwin no era
- Cygwin:
ndk-buildno intenta usar las herramientas nativas de Windows en$NDK/prebuilt/windows/bincon ciertas versiones de Cygwin y/o GNU Make.
- Cuando tu aplicación use el tiempo de ejecución de GNU
NDK de Android r7 (noviembre de 2011)
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, consultadocs/openmaxal/index.htmly 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.htmly http://www.khronos.org/opensles/.
- Se agregó la API multimedia nativa basada en el estándar OpenMAX AL 1.0.1 de Khronos Group. Los nuevos encabezados
- Se agregó compatibilidad con CCache. Para acelerar recompilaciones de gran tamaño, define la variable de entorno
NDK_CCACHEcomoccache(o la ruta de acceso a tu objeto binarioccache). Cuando se declara, el sistema de compilación del NDK utiliza automáticamente CCache al 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_ABIaallpara que puedas indicar que deseas compilar tus módulos del NDK para todas las ABI compatibles con tu versión específica del NDK. Esto significa que, en esta versión, estas líneas enApplication.mkson equivalentes:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Esto también funciona si defines
APP_ABIcuando llamas andk-builddesde la línea de comandos, que es una forma rápida de comprobar que tu proyecto se compile para todas las ABI compatibles sin cambiar elApplication.mk filedel proyecto. Por ejemplo:ndk-build APP_ABI=all
- Se agregó una variable
LOCAL_CPP_FEATURESenAndroid.mkque 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. Consultadocs/ANDROID-MK.htmlydocs/CPLUSPLUS-SUPPORT.htmlpara 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-builddesde 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 invocasndk-builddesde un subdirectorio del árbol de tu proyecto ni si definesNDK_PROJECT_PATHpara que apunte a un directorio específico.
- Se agregaron APIs oficiales del NDK para Android 4.0 (nivel de API 14), que agregan las siguientes características nativas a la plataforma:
- Funciones experimentales
- Ahora puedes compilar tus archivos fuente del NDK en Windows sin Cygwin si llamas a la secuencia de comandos
ndk-build.cmddesde la línea de comando de la ruta de tu proyecto. La secuencia de comandos toma exactamente los mismos argumentos que la secuencia de comandosndk-buildoriginal. 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-gdbno 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>) siAPP_MODULESno está definido enApplication.mk. Por ejemplo, si un módulo de nivel superiorfooimporta un módulobar, tantolibfoo.socomolibbar.sose copian en la ubicación de instalación. Anteriormente, solo se copiabalibfoo.so, a menos que también incluyerasbaren tuAPP_MODULES. Si definesAPP_MODULESexplícitamente, el comportamiento no cambia. ndk-gdbahora 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
fooimporta la biblioteca estáticabarque importa la biblioteca estáticazoo,libfoo.sose vinculará ahora conlibbar.aylibzoo.a.
- Las bibliotecas compartidas importadas ahora se instalan de forma predeterminada en la ubicación de instalación de destino (
- 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 sitiodocs/CPLUSPLUS-SUPPORT.htmlactualizado. - 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 endocs/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 tantofoo.cppybar.cxxcomo 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()oglGetProcAddress(). La siguiente lista describe las nuevas extensiones admitidas:- GLES 1.x
-
GL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_NV_system_time
NDK de Android r6b (agosto de 2011)
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/includepara compilaciones de x86. Para obtener más información, consulta este error. - Se corrigieron las definiciones de
ptrdiff_tysize_ten sistemas específicos de x86 cuando se usan con la cadena de herramientas independiente de x86.
- Se corrigió la compilación cuando
NDK de Android r6 (julio de 2011)
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.htmlen 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_ABIdel archivoApplication.mkpara compilarlo para plataformas de x86. Por ejemplo, la siguiente línea instruye andk-buildpara 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.mkpara 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.3cuando llames amake-standalone-toolchain.sh. Consultadocs/STANDALONE-TOOLCHAIN.htmlpara obtener más información. - La nueva herramienta
ndk-stackpermite traducir seguimientos de pila delogcatque 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, consultadocs/NDK-STACK.html.
- 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
- Otros cambios: Se quitó
arm-eabi-4.4.0de la distribución del NDK, ya que estaba obsoleto desde el NDK r5.
NDK de Android r5c (junio de 2011)
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_LIBRARIESfuncionara correctamente con la nueva cadena de herramientas y se agregó documentación relacionada endocs/ANDROID-MK.html. - Se corrigió un error por el que el código vinculado a
gnustl_staticfallaba 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ámetrohistory_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 la API nivel 9 (Android 2.3) a fin de 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-modulefalla, ahora imprime la lista de directorios que se buscaron. Esto es útil para comprobar que la definiciónNDK_MODULE_PATHusada por el sistema de compilación sea correcta. - Cuando
import-modulese realiza correctamente, ahora imprime el directorio donde se encontró el módulo en el registro (visible conNDK_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 enadb shelly mejora de los mensajes de error.<pthread.h>: Se corrigió la definición dePTHREAD_RWLOCK_INITIALIZERpara 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_NEONestaba configurado como verdadero (error ortográfico enbuild/core/build-binary.mk). - Se corrigió un error que impedía la compilación de los archivos de ensamblado de
.s(los archivos.Seran correctos).
- Los archivos de objetos ahora están siempre vinculados en el orden en que aparecen en
NDK de Android r5b (enero de 2011)
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++. el
- 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 -mdesde 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, defineNDK_USE_CYGPATH=1en tu entorno para volver a usarcygpath -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_PATHfuncionara correctamente cuando contenía varios directorios separados por dos puntos. - La secuencia de comandos
prebuilt-common.shcontiene 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 paraINET_ADDRSTRLEN. - Se agregaron las declaraciones faltantes para
IN6_IS_ADDR_MC_NODELOCALyIN6_IS_ADDR_MC_GLOBALa<netinet/in6.h>. - Se reemplazó "asm" por "__asm__" en
<asm/byteorder.h>para permitir la compilación con-std=c99.
NDK de Android r5 (diciembre de 2010)
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-plasmaynative-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.
NDK de Android r4b (junio de 2010)
- 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 ABIarmeabiexistente 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 bibliotecacpufeaturespara 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
.apkde 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
Bitmapa partir del código nativo.
- Se proporciona un sistema de compilación simplificado a través del nuevo comando de compilación
NDK de Android r3 (marzo de 2010)
- 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.
NDK de Android r2 (septiembre de 2009)
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 objetoGLSurfaceView.
NDK de Android r1 (junio de 2009)
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.