En esta página, se brinda información sobre los cambios realizados a las versiones estables lanzadas del NDK. Para descargar la versión estable más reciente del NDK o cualquier versión beta disponible, visita la página de descarga del NDK.
Consulta el Grupo de Google android-ndk-announce para obtener información más completa y suscríbete para recibir anuncios de lanzamientos.
NDK de Android de LTS r27 (julio de 2024)
Registro de cambios- Descargas
-
- Las descargas de esta versión están disponibles aquí.
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-gdb
usa LLDB de forma predeterminada. - NDK r23 es la última versión que admitirá elementos que no sean compatibles con Neon. A partir de NDK r24, las bibliotecas armeabi-v7a en sysroot se compilarán con Neon. Una cantidad menor de dispositivos muy antiguos no admiten Neon, por lo que la mayoría de las apps no notarán las mejoras en el rendimiento.
- Jelly Bean (niveles de API 16, 17 y 18) no será compatible en la próxima versión del NDK. El SO mínimo compatible con el NDK para r24 será KitKat (nivel de API 19).
-
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 usasas
directamente, utilizaclang
en su lugar. - Ahora, LLD es el vinculador predeterminado. También se migraron ndk-build y nuestro archivo de la cadena de herramientas de CMake para usar llvm-ar y llvm-strip.
- ndk-gdb ahora usa lldb como depurador. gdb dejó de estar disponible y se quitará en una versión futura. Para recurrir a gdb, usa la opción --no-lldb. Sin embargo, te sugerimos que informes un error en el que expliques por qué no puedes usar lldb.
-
Ahora se incluye compatibilidad con
std::filesystem
. Hay dos errores conocidos:-
Error 1258: es posible que
std::filesystem::perm_options::nofollow
no se respete en dispositivos antiguos. -
Error 1260:
std::filesystem::canonical
funcionará correctamente por error cuando se pase una ruta de acceso inexistente en dispositivos antiguos.
-
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=lld
durante la vinculación. Ten en cuenta que el error 843 afectará a las compilaciones que usen LLD con binutils strip y objcopy en lugar de llvm-strip y llvm-objcopy. -
Las rutas de instalación antiguas de la cadena de herramientas se quitarán en las próximas versiones. Estas rutas quedaron obsoletas desde el NDK r19 y ocupan una gran cantidad de espacio en el NDK. Las rutas que se quitarán son las siguientes:
- platforms
- sources/cxx-stl
- sysroot
- toolchains (excepto toolchains/llvm)
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=lld
durante la vinculación. - A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
- Se agregaron APIs de Android Q.
-
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=lld
durante la vinculación. Nota: Por el momento, lld no es compatible con símbolos comprimidos en Windows. Error 888. Clang tampoco puede generar símbolos comprimidos en Windows, pero esto puede convertirse en un problema cuando se usan los artefactos diseñados en Darwin o Linux. - A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
-
Error 780: Ya no son necesarias las cadenas de herramientas independientes. Clang, binutils, el sysroot y otros elementos de cadenas de herramientas vienen instalados en
$NDK/toolchains/llvm/prebuilt/<host-tag>
y Clang los encontrará automáticamente. En lugar de crear una cadena de herramientas independientes para API 26 ARM, invoca al compilador directamente desde el NDK:$ $NDK/toolchains/llvm/prebuilt/
. En el caso de r19, la cadena de herramientas independientes también está instalada en la antigua ruta para darles a los sistemas de compilaciones una oportunidad de adaptarse al nuevo diseño. Se quitarán las antiguas rutas en r20. No se quitará la secuencia de comandos/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=lld
durante la vinculación. - Se quitaron gnustl, gabi++ y stlport.
- Se quitó la compatibilidad con ICS (android-14 y android-15). Las apps que utilizan ejecutables ya no necesitan proporcionar un ejecutable PIE y otro no PIE.
- A partir de agosto de 2019, Play Store requerirá que los APK que se suban sean compatibles con 64 bits. Comienza a migrar tu contenido ahora para evitar sorpresas cuando llegue la fecha límite. Para obtener más información, consulta esta entrada de blog.
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_PLATFORM
tiene 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_cast
faltantes.
- Se realizaron correcciones adicionales para
- NDK
-
- El valor predeterminado de
NDK_TOOLCHAIN_VERSION
ahora es Clang. - Se actualizó libc++ a la versión r263688.
- Se restableció a una versión estable. Esto debería quitar una serie de errores, pero todavía necesitamos borrar libandroid_support antes de recomendarlo como predeterminado.
-
Ahora,
make-standalone-toolchain.sh
es solo un wrapper de la versión de Python de la herramienta. Hay algunas diferencias de comportamiento. Para obtener más información, consulta el mensaje de confirmación. - Se quitaron algunas bibliotecas de ABI no compatibles (mips64r2, mips32r6, mips32r2 y x32). Es posible que todavía haya algunas versiones rezagadas.
- Se resolvieron los problemas con crtbegin_static.o que provocaron la falta de atexit en el momento del vínculo al compilar un archivo ejecutable estático para ARM android-21+: Error 132
- Se agregó el archivo del conjunto de herramientas de CMake en build/cmake/android.toolchain.cmake.
- 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-build
tiene como predeterminado el uso de Clang en r13. Quitaremos GCC en una versión posterior. - La secuencia de comandos
make-standalone-toolchain.sh
se quitará en r13. Asegúrate de quemake_standalone_toolchain.py
se adapte a tus necesidades. - Informa los problemas en GitHub.
- Se corrigió
ndk-gdb.py
. (Error 118) - Se actualizó
NdkCameraMetadataTags.h
para que ya no contenga un valor de enumeración no válido. - Se corrigió un error en ndk-build que generaba advertencias falsas de bibliotecas estáticas que usaban libc++. Para obtener más información sobre este cambio, consulta los comentarios aquí.
- Se actualizaron los encabezados de OpenSLES para android-24.
- NDK
- Se quitó la compatibilidad con la ABI de armeabi-v7a-hard. Para obtener más información, consulta esta explicación.
- Se quitaron los sysroots de niveles de plataforma pre-GB. Quitamos la compatibilidad con ellos en r11, pero no los quitamos.
- La administración de excepciones con el uso de c++_shared en ARM32 ahora funciona casi por completo. El desenredador ahora estará conectado a cada objeto vinculado en lugar de a libc++ mismo. Para obtener más información sobre esta administración de excepciones, consulta Problemas conocidos.
- Se recortaron los indicadores predeterminados del compilador.
(Error 27).
- 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-info
de manera predeterminada para compilaciones de depuración de Clang. Este cambio debe mejorar la eliminación de errores con LLDB. --build-id
ahora está habilitado de forma predeterminada.- El ID de compilación ahora aparecerá en los informes de fallas por error en código nativo para que puedas identificar fácilmente la versión de tu código que funcionaba.
NDK_USE_CYGPATH
no debe generar más problemas con libgcc. (Error 195486 de Android)- Las opciones
-Wl
,--warn-shared-textrel
y-Wl,--fatal-warnings
ahora están habilitadas de forma predeterminada. Si compartiste reubicaciones de texto, tu app no se podrá cargar en Android 6.0 (API nivel 23) o versiones posteriores. Las reubicaciones de texto nunca estuvieron permitidas para apps de 64 bits. - Los encabezados compilados previamente deben funcionar mejor. (Error 14 y Error 16)
- Se quitaron las bibliotecas de STL ARM (no thumb) inalcanzables.
- Se agregó compatibilidad con Vulkan a android-24.
- Se agregó la API de Choreographer a android-24.
- Se agregaron APIs de
libcamera2
para dispositivos que admiten la funciónINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o posterior. Para obtener más información, consulta las Características de cámara. - Clang
- Se actualizó Clang a 3.8svn (r256229, compilación 2812033).
- Los archivos ejecutables
clang.exe
yclang++.exe
en 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-plt
para corregir el error de vinculador interno que se produce cuando se vinculan objetos binarios arm32 de gran tamaño. - Se corrigió el tiempo de ejecución incorrecto para AArch64. Esto hacía que las direcciones de salto se calcularan de forma incorrecta para DSO de tamaño muy amplio.
- Se agregó la opción predeterminada
--no-apply-dynamic
para solucionar un error del vinculador dinámico para versiones anteriores de Android. - El NDK r11 KI para
dynamic_cast
no funciona con Clang. Se corrigió x86,stlport_static
, y se realizaron otras optimizaciones. - GDB
- Se actualizó a GDB 7.11. Para obtener más información, consulta la página de Noticias sobre GDB.
- Se realizaron algunas correcciones de errores para
ndk-gdb.py
. - Problemas conocidos
- ASAN x86 aún no funciona. Para obtener más información, consulta el análisis sobre esta lista de cambios.
- El desenredo de excepción con
c++_shared
sigue sin funcionar con ARM en Android 2.3 (API nivel 9) o Android 4.0 (API nivel 14). - A pesar de la presencia de android-24, aún no se expusieron las bibliotecas ni los encabezados de Bionic para Android 6.0 (API nivel 23) y Android 7.0 (API nivel 24). Esas plataformas siguen siendo las bibliotecas y los encabezados de Android 5.0 (nivel de API 21) (esto no es una regresión de r11).
- No están presentes las herramientas de RenderScript (esto no es una regresión de r11). (Error 7)
- Este registro de cambios no está pensado para ser una lista completa de todos los errores destacados.
__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-build
tendrá como predeterminado el uso de Clang en una próxima actualización. Se quitará GCC en una próxima versión. - Se quitará la secuencia de comandos
make-standalone-toolchain.sh
en una próxima versión. Si usas esta secuencia de comandos, planifica la migración amake_standalone_toolchain.py
lo antes posible. - NDK
- Quitamos la compatibilidad con la ABI de armeabi-v7a-hard. Consulta la explicación en la documentación.
- Se quitaron todos los sysroots de niveles de plataforma anteriores a Android 2.3 (nivel de API 9). Quitamos la compatibilidad con ellos en el NDK r11, pero no los eliminamos.
- Se actualizó el control de excepciones cuando se usa c++_shared en ARM32 para que casi funcione por completo (consulta los Problemas conocidos). El desenredador ahora estará conectado a cada objeto vinculado en lugar de a libc++ mismo.
- Se recortaron los indicadores predeterminados del compilador (Error de NDK 27). Consulta los detalles de esta actualización en Cambio 207721.
- Se agregó una implementación Python de cadenas de herramientas independientes en
build/tools/make_standalone_toolchain.py
. En Windows, ya no necesitas Cygwin para usar esta función. Ten en cuenta que quitaremos la clase bash en una próxima versión. Por lo tanto, prueba la nueva ahora. - Se configuraron las compilaciones de depuración de Clang para que la opción
-fno-limit-debug-info
esté habilitada de forma predeterminada. Este cambio permite que el proceso de depuración sea más fluido con LLDB. - Se habilitó el
--build-id
como opción predeterminada. Debido a esta opción, el identificador ahora aparecerá en los informes de fallas por error en código nativo para que puedas identificar fácilmente la versión de tu código que se estaba ejecutando. - Se corrigió un problema de
NDK_USE_CYGPATH
para que ya no haya inconvenientes relacionados con libgcc. (Error 195486) - Se habilitaron las siguientes opciones como predeterminadas:
-Wl,--warn-shared-textrel
y-Wl,--fatal-warnings
. Si has compartido reubicaciones de texto, tu app no se puede cargar en Android 6.0 (API nivel 23) ni versiones en posteriores. Ten en cuenta que nunca se permitió esta configuración para apps de 64 bits. - Se corrigieron algunos problemas para mejorar el funcionamiento de encabezados precompilados. (Error 14 del NDK y Error 16 del NDK)
- Se quitaron las bibliotecas de STL ARM (no thumb) inalcanzables.
- Se agregó compatibilidad con Vulkan a android-24.
- Se agregó la API de Choreographer a android-24.
- Se agregaron API de libcamera2 para dispositivos que admiten la función nivel
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o una versión posterior. Para obtener más información, consulta la referencia deCameraCharacteristics
. - Clang
- Se actualizó Clang a 3.8svn (r256229, compilación 2812033). Los archivos ejecutables
clang.exe
yclang++.exe
en 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ó
__thread
para que funcione correctamente esta vez. - GCC
- Se sincronizó el compilador con el GCC del Sistema operativo Chrome (google/gcc-4_9 r227810).
- Se incluyó portabilidad a versiones anteriores del parche suavizante de cobertura de ToT (r231296).
- Se corrigió
libatomic
para que no use ifuncs. (Error 31 del NDK) - Binutils
- Se silenciaron los mensajes de información "Erratum 843419 found and fixed".
- Se agregó la opción
--long-plt
para corregir el error de vinculador interno que se produce cuando se vinculan objetos binarios arm32 de gran tamaño. - Se corrigieron stubs de tiempo de ejecución incorrectos para
AArch64
. Esto hacía que las direcciones de salto se calcularan de forma incorrecta para DSO de tamaño muy amplio. - Se agregó la opción predeterminada
--no-apply-dynamic
para solucionar un error del vinculador dinámico en versiones anteriores de Android. - Se corrigió un problema conocido en el NDK r11 que impedía que
dynamic_cast
funcionara con Clang, x86 y stlport_static, y se realizaron otras optimizaciones. - GDB
- Se actualizó GDB a la versión 7.11. Para obtener más información sobre esta versión, consulta Noticias de GDB.
- Se corrigieron algunos errores en la secuencia de comandos
ndk-gdb.py
. - Problemas conocidos
- No funciona Address Sanitizer x86 (ASAN). Para obtener más información, consulta el Error 186276.
- El desenredo de excepción con
c++_shared
no funciona con ARM en Android 2.3 (API nivel 9) o Android 4.0 (API nivel 14). - A pesar de la presencia de android-24, aún no se expusieron las bibliotecas y los encabezados de Bionic para Android 6.0 (API nivel 23) y versiones posteriores. Esas plataformas aún conservan las bibliotecas y los encabezados de Android 5.0 (nivel de API 21), lo que concuerda con el NDK r11.
- No aparecen las herramientas de RenderScript, lo que concuerda con el NDK r11. (Error de NDK 7)
- En el archivo de encabezado
NdkCameraMetadataTags.h
, el valor enum de la etiqueta de metadatos de la cámaraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
se 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
--attach
del 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-gdb
para Mac. - Se agregaron más accesos directos de nivel superior para herramientas de líneas de comando:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. Comando no disponible en versiones anteriores.
- Se corrigieron cadenas de herramientas independientes para libc ++, a las que les faltaba
__cxxabi_config.h
. - Se corrigió la documentación de ayuda de
--toolchain
enmake-standalone-toolchain.sh
.
- Se corrigió
- Avisos importantes
- Clang
-
- Errata
- Al contrario de lo que informamos en las Notas de la versión r11,
__thread
no funciona. Esto se debe a que a la versión de Clang que distribuimos le faltaba una corrección de errores relacionada con la compatibilidad de TLS emulada.
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
__thread
por medio de la emulación de TLS de ELF con datos de subproceso pthread específicos. thread_local
para C++11 funciona en algunos casos, pero no para los datos que tienen destructores no triviales, dado que en esos casos se necesita compatibilidad con libc. Esta limitación no se aplica cuando se ejecuta Android 6.0 (API nivel 23) o una versión posterior.- La TLS emulada aún no funciona con Aarch64 cuando se accede a las variables desde una biblioteca compartida.
- 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
-target
comoarmv5te-linux-androideabi
.
- Para restablecer el comportamiento anterior, puedes especificar la opción
- Se modificó el sistema de compilación para usar
-isystem
para inclusiones de plataforma.- Las advertencias ya no rompen las compilaciones de apps.
- Se corrigió una falla aleatoria que se producía cuando un objeto binario arrojaba excepciones a través de gabi++ (Error 179410).
- Se cambió el espacio de nombres intercalado de libc++ a
std::__ndk1
para evitar errores de ODR con el libc++ de la plataforma. - Ahora todas las bibliotecas de libc++ están compiladas en la ABI de libc++.
- Se estableció
APP_PLATFORM
como predeterminado de Gingerbread.- Se brindará compatibilidad con Froyo y versiones anteriores en un lanzamiento futuro.
- Se cambiaron las cadenas de herramientas independientes de ARM para que arm7 sea el valor predeterminado.
- Se actualizó la struct
_Unwind_Exception
de gabi++ para 64 bits. - Se agregaron las siguientes funciones a cpufeatures:
- Detección de SSE4.1 y SSE4.2.
- Detección de funciones de CPU en x86_64.
- Se actualizó libc++abi para brindar compatibilidad con r231075.
- Se actualizó
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
yuchar.h
desde ToT Bionic. - Se sincronizó
sys/cdefs.h
en todos los niveles de API. - Se corrigió
fegetenv and fesetenv
para arm. - Se corrigió el end pointer de tamaño/alineación de
crtend_*
para mips64 y x86_64.
- 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=gold
en el tiempo de vinculación para usar gold en lugar de bfd. Es posible que se establezca esta opción como predeterminada en la próxima versión. - Se mejoró el tiempo de vinculación para binarios enormes de Gold ARM backend (en un 50% para el navegador Chrome depurable).
- 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
-O0
provoca 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=clang
elige esa versión de forma predeterminada. - Se quitó Clang 3.4.
- Se quitó GCC 4.6.
- Se implementó la compatibilidad con varios subprocesos en
ld.gold
para todas las arquitecturas. Ahora se puede vincular con o sin esta compatibilidad. La opción predeterminada es la segunda.- Para compilar con varios subprocesos, usa la opción
--threads
. - De lo contrario, usa
--no-threads
.
- 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.pragma
tiene prioridad. - Se solucionó un problema que producía una falla con el siguiente mensaje de error:
in add_stores, at var-tracking.c:6000
- Se implementó una solución alternativa para un problema de Clang 3.5 en el que la vectorización automática de LLVM generaba
llvm.cttz.v2i64()
, una instrucción sin equivalente en el conjunto de instrucciones de ARM.
- Otras correcciones de errores:
-
- Se implementaron las siguientes mejoras en encabezados y bibliotecas:
- Se corrigió
PROPERTY_*
enmedia/NdkMediaDrm.h
. - Se corrigió
sys/ucontext.h
paramips64
. - Se dio de baja la comprobación de versión de Clang para
__builtin_isnan
y__builtin_isinf
. - Se agregaron
android-21/arch-mips/usr/include/asm/reg.h
yandroid-21/arch-mips64/usr/include/asm/reg.h
. - Se corrigió una advertencia falsa de límites de arreglos que GCC 4.9 generaba para x86 y se volvieron a habilitar las advertencias que esa versión mostraba para ARM. La advertencia para ARM ya se había inhabilitado de forma incondicional.
- Se corrigió Clang 3.5 para que
mips
ymips64
creen una sección.gcc_except_table
que admita escritura, de modo que coincida con el comportamiento de GCC. Este cambio permite evitar la siguiente advertencia de vinculador:.../ld: warning: creating a DT_TEXTREL in a shared object
- Se adaptó una solución para errores de
compiler-rt
que producían fallas cuando se compilaba Clang 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::compare
para mostrar-1
y1
. Antes, mostraba números firmados de forma arbitraria. - Se corrigió
ndk-gdb
para las ABI de 64 bits. (Error 118300) - Se corrigió la falla que producía la muestra de HelloComputeNDK para RenderScript en Android 4.4 (nivel de API 19). Si deseas obtener más información, consulta esta página.
- Se corrigió
libc++ __wrap_iter
para GCC. Para obtener más información, consulta el error 22355 de LLVM. - Se corrigió la compatibilidad de
.asm
para la ABIx86_64
. - Se implementó una solución alternativa para el problema de
stlport
en GCC 4.8. (Error 127773) - Se quitó el separador de directorio final
\\
de la ruta de acceso de los proyectos en Windows. (Error 160584) - Se corrigió un error
no rule to make target
que ocurría al compilar un solo archivo.c
ejecutando el comandondk-build.cmd
desdegradle
. (Error 66937) - Se agregaron las bibliotecas
libatomic.a
ylibgomp.a
que faltaban en las siguientes cadenas de herramientas de host:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Otros cambios:
-
- Se agregó
ld.gold
paraaarch64
. El vinculador predeterminado sigue siendold.bfd
. Para habilitarld.gold
de forma explícita, agrega-fuse-ld=gold
a la variableLOCAL_LDFLAGS
oAPP_LDFLAGS
. - Se compilaron las cadenas de herramientas MIPS y MIPS64 con
binutils-2.25
, que brinda una mejor compatibilidad con R6. - Se estableció
-fstandalone-debug
(información de depuración completa) como opción predeterminada de Clang. - Se reemplazó
-fstack-protector
por-fstack-protector-strong
para las cadenas de herramientas de ARM, AArch64, X86 y X86_64 de GCC 4.9, Clang 3.5 y Clang 3.6. - Se agregó el cambio de línea de comandos
--package
andk-gdb
para permitir que el sistema de compilación anule el nombre del paquete. (Error 56189) - Se dio de baja
-mno-ldc1-stc1
para MIPS. Es posible que esta opción no funcione con las nuevas opciones-fpxx
y-mno-odd-spreg
, o con la ABI de FPXX. - Se agregó la detección MIPS MSA y R6 a
cpu-features
.
- 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.6
a ndk-build o--toolchain=arm-linux-androideabi-4.6
cuando ejecutesmake-standalone-toolchain.sh
en la línea de comandos. GCC 4.9 sigue siendo el predeterminado de los ABI de 64 bits. - Se evitó que todas las cadenas de herramientas x86[_64] agregaran
-mstackrealign
de forma predeterminada. La cadena de herramientas del NDK asume una alineación de pila de 16 bytes. Las herramientas y opciones predeterminadas fuerzan esta regla. Un usuario que escribe código ensamblador debe asegurarse de preservar la alineación de pila, y verificar que otros compiladores también cumplan con esta regla. (Error 38496 de GCC) - Se agregó la funcionalidad de Address Sanitizer para brindar compatibilidad a Clang 3.5 con ARM y las ABI x86. Si quieres obtener más información sobre este cambio, consulta el proyecto Address Sanitizer.
- Se agregó el requisito para que, a partir del nivel de API 21, se use
-fPIE -pie
cuando se compile. En nivel 16 o versiones posteriores, ndk-build usaPIE
cuando compila. Este cambio tiene algunas implicancias, que se especifican en el Error 888 (vista previa para desarrolladores). Estas implicancias no se aplican a bibliotecas compartidas.
- 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/vsscanf
de libc++ que se producía en el nivel de API 21. Se implementó la mejora en r10c. (Error 77988) - Se corrigió una falla de AutoFDO (
-fauto-profile
) que se producía en GCC 4.9 cuando se especificaba-Os
. (Error 77571)
- 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_memalign
al nivel de API 16. Además, se agregó un prototipo enstdlib.h
para los niveles de API 16 a 19. (Error 77861) - Se corrigió
stdatomic.h
para que incluya<atomic>
solo en C++11. - Se modificaron los siguientes encabezados para uso independiente:
sys/user.h
ygl2ext.h
,dlext.h
,fts.h
,sgidefs.h
para el nivel de API 21. - Se modificó
sys/user.h
para cambiar el nombre demxcsr_mask
pormxcr_mask
y cambiar el tipo de datos parau_ar0
de - Se cambió el tipo de valor que se muestra para
sysconf()
deint
along
. - Se corrigió el control de
thumb
de ndk-build paraLOCAL_ARM_MODE
. En r10d, ndk-build agregaLOCAL_LDFLAGS+=-mthumb
de forma predeterminada, salvo que se aplique alguna de estas condiciones: - Configuraste
LOCAL_ARM_MODE
igual quearm
. - Estás haciendo una compilación de depuración (con opciones como
APP_OPTIM=debug
yAndroidManifest.xml
que 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_FILES
en ndk-build para usar las rutas de acceso absolutas de Windows. (Error 74333) - Se quitó el código específico de bash de ndk-gdb. (Error 73338)
- Se eliminó el código específico de bash de
make-standalone-toolchain.sh
. (Error 74145) - Se revisó la documentación en relación con una corrección para dependencias transitivas
System.loadLibrary()
. (Error 41790) - Se corrigió un problema que impedía que los paquetes de 64 bits se extrajesen en Ubuntu 14.04 y OS X 10.10 (Yosemite). (Error 78148)
- Se corrigió un error con
LOCAL_PCH
para mejorar la compatibilidad con Clang. (Error 77575) - Se aclaró la advertencia "requires executable stack" de ld.gold. (Error 79115)
unsigned long
a 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-L
ahora lleva la designación de la versión oficial:android-21
. - Para actualizar GCC 4.9, se cambió el nombre a la rama
google
del repositorio de GCC. Entre las grandes diferencias de la versión ascendente de GCC 4.9, se incluyen las siguientes: - La opción
-O2
ahora activa la vectorización, sin división de bucles, pero con un desenrollado más agresivo. - Mejoras para FDO y LIPO
- Se agregó compatibilidad con Clang 3.5 a todos los hosts:
NDK_TOOLCHAIN_VERSION=clang
ahora elige esta versión. Ten en cuenta lo siguiente: - Ahora, ARM y x86 usan el ensamblador integrado de forma predeterminada. Si esto genera problemas, usa
-fno-integrated-as
como solución alternativa. - Clang 3.5 genera más advertencias para marcas sin usar, como la opción
-finline-functions
que GCC admite. - 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.setup
en el directorio que contiene el NDK. - Se quitó la compatibilidad con Clang 3.3.
- Se dio de baja GCC 4.6 y posiblemente se quite en versiones futuras.
- Se actualizó mclinker a 2.8 con compatibilidad para Identical Code Folding ("ICF"). Especifica ICF usando la opción
--icf
. - Se amplió la compatibilidad de
arm_neon.h
a x86 y x86_64 para cubrir aproximadamente un 93% de los elementos intrínsecos de NEON. Para obtener más información sobre la compatibilidad con NEON:- Ve a la Guía para desarrolladores de NDK (
docs/Programmers_Guide/html/
) y consulta Arquitecturas y CPU > NEON. - Examina la muestra actualizada de
hello-neon
ensamples/
. - 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_SOURCE
enheaders/libs/android-21
, que aparecía en r10 (cuandoandroid-21
aú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-argument
y-Wno-unused-command-line-argument
para 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):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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
. - Otras correcciones de errores:
-
- Se implementaron las siguientes mejoras en encabezados y bibliotecas de
android-21
:- Se agregaron más claves de código de TV:
android/keycodes.h
- Se agregaron más constantes y seis nuevas funciones de sensores a
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
yASensor_isWakeUpSensor
. - Se corrigió
stdatomic.h
para mejorar la compatibilidad con GCC 4.6 y admitir el encabezado<atomic>
. - Se agregó
sys/ucontext.h
ysys/user.h
a todos los niveles de API. El encabezadosignal.h
ahora incluye<sys/ucontext.h>
. Puedes quitar cualquier definición existente destruct ucontext
. - Se agregó
posix_memalign
a los niveles de API 17, 18 y 19. - Se agregaron las siguientes funciones a todas las arquitecturas:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - Se agregaron los permisos obligatorios a la muestra
native-media/AndroidManifest.xml
. (Error 106640) - Se agregó
clock_nanosleep
yclock_settime
al nivel de API 21. (Error 77372) - Se quitaron los siguientes símbolos de todas las arquitecturas:
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
ydlmalloc
. - Se quitaron las siguientes funciones de las arquitecturas de 64 bits:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Se quitó la siguiente función de las arquitecturas de 32 bits:
__signalfd4
. - Se cambió el tipo del tercer argumento de
size_t
aint
en las siguientes funciones:strtoll_l
,strtoull_l
,wcstoll_l
ywcstoull_l
. - Se restauraron las siguientes funciones en la arquitectura de 64 bits:
arc4random
,arc4random_buf
yarc4random_uniform
. - Se revirtieron
cxa_*
y los operadoresnew
ydelete
alibstdc++.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.sh
para que ahora sea compatible con el uso de un sufijo que especifique una versión de Clang. - Se corrigieron las funciones
strtod()
de libc++/armeabi. - Se corrigió a la documentación del NDK en
docs/
.
- Se implementaron las siguientes mejoras en encabezados y bibliotecas de
- Otros cambios:
-
- Se mejoró
cpu-features
para detectar compatibilidad con ARMv8 en los siguientes conjuntos de instrucciones: AES, CRC32, SHA2, SHA1 y PMULL/PMULL2 de 64 bits. (Error 106360) - Se modificó ndk-build para usar
*-gcc-ar
, que está disponible en GCC 4.8, GCC 4.9 y Clang. Clang lo especifica en lugar de*-ar
. Esta configuración mejora la compatibilidad con LTO. - Se quitaron los encabezados
include-fixed/linux/a.out.h
yinclude-fixed/linux/compiler.h
del compilador GCC. (Error 73728) - Se corrigió un error asociado a
-flto
con GCC 4.8 en Mac OS X. El mensaje de error decía lo siguiente:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Se corrigió un error de ortografía en
build-binary.mk.
. (Error 76992) - 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.h
de 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.h
ywchar.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_nxthdr
a__cmsg_nxthdr
. - Se quitó
__libc_malloc_dispatch
. - Se cambió el prototipo
ptrace()
along ptrace(int, ...);
. - Se quitó
sha1.h
. - Se amplió
android_dlextinfo
aandroid/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.h
ycomplex.h
.
- Se quitó
- Otros cambios:
-
- Se actualizaron
mipsel-linux-android-4.9
ymips64el-linux-android-4.9
, con la implementación de un nuevo diseño de directorio multilib y la compatibilidad con gdb-7.7 - Se mejoró
cpu-features
para que detecte más funciones arm64. (Lista de cambios 100339).
- 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=clang
podría no funcionar con arm64-v8a y mips64. - Android L es el primer nivel compatible con 64 bits. Ten en cuenta que este nivel de API es temporario y solo para la vista previa de L. Otro número de nivel reemplazará a este cuando se lance L.
- Ahora, esta actualización incluye configuraciones
all32
yall64
paraAPP_ABI
.APP_ABI=all32
es igual aAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
es igual aAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
selecciona todas las ABI.
- El nuevo libstdc++ de GNU en Android L contiene todos los elementos
<tr1/cmath>
. Antes de definir tu propia función matemática, a fin de evitar errores de "definiciones múltiples" del vinculador, consulta_GLIBCXX_USE_C99_MATH_TR1
para ver si ya existe una función con ese nombre. - Se actualizó la biblioteca de cpu-features library para el kernel de ARMv8. Es posible que las bibliotecas vigentes no detecten NEON en la plataforma de ARMv8. Vuelve a compilar tu código con la nueva versión.
- Se agregó un nuevo directorio de API
platforms/android-L/
. Incluye lo siguiente: - Se actualizaron los encabezados de Bionic, que no se habían cambiado desde los niveles de API 3 (Cupcake) a 19 (KitKat). Esta nueva versión, para el nivel L, debe sincronizarse con AOSP.
- Nuevas API multimedia y una muestra de native-codec.
- Un encabezado
Android.h
actualizado para SLES/OpenSLES, que brinda compatibilidad con el formato de audio de punto flotante de precisión simple en AudioPlayer. - GLES 3.1 y extensiones de AEP para
libGLESv3.so.
- Se actualizaron los encabezados GLES2 y GLES3 a las versiones oficiales más recientes de Khronos.
- Se agregaron compiladores de GCC 4.9 a los ABI de 32 y 64 bits. GCC 4.9 es el (único) compilador predeterminado para ABI de 64 bits, como se mencionó anteriormente. Para ABI de 32 bits, debes habilitar GCC 4.9 de forma explícita, ya que GCC 4.6 sigue siendo la versión predeterminada.
- Para ndk-build, habilita la compilación de GCC 4.9 de 32 bits ya sea agregando
NDK_TOOLCHAIN_VERSION=4.9
aApplication.mk
o exportándolo como una variable de entorno desde la línea de comandos. - Para una cadena de herramientas independiente, usa la opción
--toolchain=
en la secuencia de 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.8
o4.9
para habilitar ndk-gdb para seleccionar GDB 7.6. - Se agregó la opción de compilación
-mssse3
para proporcionar compatibilidad con SSSE3, y se estableció como predeterminada para ABI x86 (actualizada desde SSE3). La imagen que lanzó Google no contiene instrucciones sobre SSSE3. - Se actualizó GCC 4.8 a 4.8.3.
- Se mejoró la compatibilidad con ARM libc++ EH cambiando de gabi++ a libc++abi. Para obtener información detallada, consulta la sección "Compatibilidad con C++" de la documentación. Ten en cuenta lo siguiente:
- Todas las pruebas de configuración regional ahora pasan a Clang 3.4 y GCC 4.8. Para obtener más información, consulta la sección "Compatibilidad con C++" de la documentación.
- Las bibliotecas libc+++ para X86 y MIPS libc+++ siguen usando gabi++.
- GCC 4.7 y versiones posteriores ahora pueden usar <atomic>.
- Debes agregar
-fno-strict-aliasing
si usas<list>
, ya que__list_imp::_end
_ infringe las reglas de TBAA. (Error 61571). - A partir de GCC 4.6, LIBCXX_FORCE_REBUILD:=true ya no vuelve a compilar a libc++. Para hacerlo, necesitarás otro compilador. Aún no se probó Clang 3.3.
- mclinker está en versión 2.7, e incluye compatibilidad con aarch64 en Linux.
- Se agregó compatibilidad con encabezados precompilados que se hayan especificado con
LOCAL_PCH
. (Error 25412).
- Correcciones de errores importantes:
-
- Se corrigió libc++ para que ahora compile
std::feof
, etc. (Error 66668). - Se corrigió una llamada a la biblioteca atómica de Clang 3.3/3.4 que causaba fallas en algunas de las pruebas de libc++ para la ABI de armeabi.
- Se corrigieron fallas de Clang 3.4 que se producían en la lectura de los encabezados precompilados. (Error 66657).
- Se corrigió la aserción
-O3
de Clang 3.3/3.4 en: - 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_t
de 32 bits para que seaint
en lugar delong int
. - Se corrigieron
WCHAR_MIN
yWCHAR_MAX
para que tengan los signos correctos según la arquitectura en la que se ejecuten: - X86/MIPS: firmado.
- ARM: sin firmar.
- Para forzar X86/MIPS a la opción predeterminada sin firmas, usa
-D__WCHAR_UNSIGNED__
. - Para forzar
wchar_t
y que sea de 16 bits, usa-fshort-wchar
. - Se quitaron símbolos inexistentes de
libc.so
de 32 bits y se agregaronpread64
,pwrite64
yftruncate64
para el nivel de API 12 o superior de Android. (Error 69319). Para obtener más información, consulta el mensaje que acompaña la lista de cambios 94137 de AOSP. - Se corrigió una advertencia de GCC sobre la redefinición de
putchar
. El mensaje de advertencia dice lo siguiente: - 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-pie
para Android si no existía-shared
ni-static
. Este comportamiento incorrecto provocaba que el vinculador indicara que-shared
y-pie
no podían coexistir.
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.h
a la cadena de herramientas de x86 para que ahora emule cerca del 47% de NEON. Aún no se admiten los tipos de 64 bits. Para obtener más información, consulta la sección sobre la compatibilidad intrínseca de ARM Neon en la documentación de x86. - Optimización de ARM/GOT_PREL portado (presente en GCC 4.6 compilado desde la rama de Google de GCC) a ARM GCC 4.8/4.9. Esta optimización a veces reduce el número de instrucciones cuando se accede a variables globales. Como ejemplo, consulta la secuencia de comandos build.sh en
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - Se agregó la versión ARM para STL gabi++, stlport y libc++. Ahora todos tienen tanto esta versión como el modo Thumb.
- Ahora se puede llamar a la secuencia de comandos make-standalone-toolchain.sh con
--toolchain=x86_64-linux-android-4.9
, que equivale a--toolchain=x86_64-4.9
.
- 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=clang
ahora elige Clang 3.4. GCC 4.6 sigue siendo el compilador predeterminado. - Se agregó
APP_ABI=armeabi-v7a-hard
, con opción multilib adicional-mfloat-abi=hard
. Estas opciones se utilizan con ARM GCC 4.6/4.8 y Clang 3.3/3.4 (que utilizan el ensamblador, el vinculador y las bibliotecas de 4.8). Cuando uses estas opciones, ten en cuenta los siguientes cambios: - Cuando ejecutes la secuencia de comandos
ndk-build
, agrega las siguientes opciones para armeabi-v7a:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
. Se copia la biblioteca compilada alibs/armeabi-v7a
. Para que Make se comporte según lo esperado, no puedes especificar tantoarmeabi-v7a
comoarmeabi-v7a-hard
como objetivos de Make (es decir, en la línea APP_ABI=). Si lo haces, se ignorará una opción. Ten en cuenta queAPP_ABI=all
sigue siendo igual aarmeabi armeabi-v7a x86 mips
. - La secuencia de comandos
make-standalone-toolchain.sh
copia bibliotecas adicionales en los directorios/hard
. Agrega las marcasCFLAGS
yLFLAGS
anteriores a tu archivo Make para permitir que GCC o Clang se vinculen con las bibliotecas en/hard
. - Agrega el ensamblador yasm, así como las funciones experimentales
LOCAL_ASMFLAGS
yEXPORT_ASMFLAGS
para x86. La secuencia de comandosndk-build
usaprebuilts/*/bin/yasm*
para compilarLOCAL_SRC_FILES
que tienen la extensión.asm
. - Se actualizó MClinker a 2.6.0, lo que brinda compatibilidad con
-gc-sections
. - Se agregó compatibilidad experimental con libc++ (ascendente r201101). Para usar esta nueva función, sigue estos pasos:
- Agrea
APP_STL := c++_static
oAPP_STL := c++_shared
enApplication.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
,_hashlib
y_ssl
- Linux:
zlib
,nis
,crypt
,_curses
y_curses_panel
- Mac OS X:
- Se corrigió el
event_getmsg_helper
de x86 y MIPS gdbserver. - Se corrigieron varios problemas de la cadena de herramientas del NDK de RenderScript, incluidos errores de compatibilidad entre dispositivos antiguos y reflexión de C++.
- Otras correcciones de errores:
-
- Correcciones de encabezados:
- Se corrigió un
#include <sys/types.h>
faltante enandroid/asset_manager.h
para el nivel de API 13 o superior de Android. (Error 64988) - Se corrigió un
#include
faltante enandroid/rect_manager.h
para la API nivel 14 o superior de Android. - Se agregó
JNICALL
aJNI_OnLoad
yJNI_OnUnload
enjni.h
. Ten en cuenta queJNICALL
se 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):
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 agregó
sys/cachectl.h
para todas las arquitecturas. Los desarrolladores de MIPS ahora pueden incluir este encabezado en lugar de escribir#ifdef __mips__
. - Se corrigió
platforms/android-18/include/android/input.h
agregando__NDK_FPABI__
a las funciones que tomaban o mostraban valores flotantes o dobles. - Se corrigió
struct stat
de MIPS, que se había establecido de forma incorrecta como su equivalente de 64 bits para la API nivel 12 o posterior de Android. Esta configuración incorrecta fue una regresión que se introdujo en la versión r9c. - Se definieron
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
y__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
para la API nivel 9 y versiones anteriores. - Se agregaron
scalbln
,scalblnf
yscalblnl
a x86libm.so
para el nivel de API 18 y versiones posteriores. - Se corrigió un error de ortografía en
sources/android/support/include/iconv.h
. (Error 63806)
- Se corrigió gabi++
std::unexpected()
para que llame 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 activaonSystemUiVisibilityChange
y, por lo tanto, no restablece el modo envolvente.
- Se corrigió la secuencia de comandos
ndk-build
para agregar-rpath-link=$SYSROOT/usr/lib
y-rpath-link=$TARGET_OUT
para poder usarld.bfd
con el objetivo de vincular archivos ejecutables. (Error 64266)- Se quitó
-Bsymbolic
de todas las compilaciones de STL.- Se corrigió
ndk-gdb-py.cmd
configurandoSHELL
como 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.sh
para que la opción--stl=stlport
copie los encabezados de gabi++ en lugar de realizar symlinks entre ellos. Los shells decmd.exe
y 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
*cmd
que anteriormente se debían usar solo en el shellcmd.exe
, en caso de que los desarrolladores prefieran usarndk-build.cmd
en cygwin en lugar de la secuencia de comandosndk-build
recomendada. - Se mejoró la velocidad de la secuencia de comandos
make-standalone-toolchain.sh
usando la acción de mover en lugar de la de copiar si el directorio de destino especificado no existe.
- 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=mcld
para que no aparezca el siguiente error:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Se corrigió la compatibilidad de
-mhard-float
para las funciones matemáticas__builtin
. Para obtener información continua sobre correcciones de-mhard-float
con STL, consulta el error 61784.
- Otras correcciones de errores:
-
- Correcciones de encabezados:
- Se cambió el prototipo de
poll
apoll(struct pollfd *, nfds_t, int);
enpoll.h
. - Se agregó
utimensat
alibc.so
para la API nivel 12 y la API nivel 19 de Android. Ahora se incluyen esas bibliotecas para todos los niveles desde la API nivel de 12 hasta la API nivel 19 de Android. - Se agregó
futimens
enlibc.so
para la API nivel 19 de Android. - Se agregaron
clock_settime()
yclock_nanosleep()
faltantes atime.h
para la API nivel 8 o superior de Android. - Se agregaron
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
yCLOCK_BOOTTIME_ALARM
entime.h.
. - Se quitaron
CLOCK_REALTIME_HR
yCLOCK_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_ReleaseStringUTFChars
en/system/lib/libdvm.so
que causaba fallas en dispositivos x86.
- Se corrigieron fallas de
ndk-build
que se producían en cygwin cuando se hacía referencia al paquete del NDK mediante un symlink. - Se corrigieron fallas de
ndk-build.cmd
que se producen en las ventanascmd.exe
cuandoLOCAL_SRC_FILES
contiene rutas de acceso absolutas. (Error 69992) - Se corrigió la secuencia de comandos
ndk-stack
para que continúe funcionando incluso cuando no puede analizar un marco debido a la imposibilidad de encontrar una rutina, un nombre de archivo o un número de línea. En cualquiera de estos casos, se muestra??
. - Se corrigió la pila
ndk-stack
para objetivos Windows-x64_64 de modo que ya no coincida erróneamente una línea de marco con una línea de la secciónstack:
que no contengapc
,eip
niip
. 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=null
para su uso en un sistema de compilación integrado donde las opciones se pasan explícitamente andk-build
. Con esta configuración,ndk-build
no 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_ABI
en una lista de valores delimitados con coma. Por ejemplo:APP_ABI := "armeabi,armeabi-v7a"
- Se incluyó la capacidad de reconstruir todo STL con información de depuración en un paquete opcional separado, llamado
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, con la opción-g
. Esta opción ayuda a la secuencia de comandosndk-stack
a proporcionar un mejor volcado de pila a través de STL. Este cambio no debe afectar el código/tamaño del archivo final. - Se mejoraron las muestras de
hello-jni
para informarAPP_ABI
en la compilación. - Se usó la herramienta
ar
en 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/*h
ymath.h
para todos los niveles de API hasta el 18, incluida la adición de los niveles 13, 15, 16 y 17 de Android. Para obtener más información sobre las APIs agregadas, consulta los mensajes de confirmación relacionados con los cambios 68012 y 68014. (Errores 47150, 58528 y 38423) - Se agregó compatibilidad con la API nivel 19, incluida la vinculación con RenderScript.
- Se agregó compatibilidad con
-mhard-float
en la ABI de armeabi-v7a existente. Para obtener más información y consultar las restricciones actuales de Clang, 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_COLORS
como se muestra a continuación:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
. Para obtener más información, visita GCC Language Independent Options. - Se agregaron dos nuevos ejemplos para demostrar las funciones de OpenGL ES 3.0: Teapot y MoreTeapots. Estas muestras se ejecutan en dispositivos con Android 4.1 (nivel de API 16) y versiones posteriores.
- Se dio de baja la compatibilidad con GCC 4.7 y Clang 3.2, que se quitará en la próxima versión.
- Se actualizó
- Correcciones de errores importantes:
-
- Se corrigió el problema en el que
thumb2
de ARM GCC 4.6 no generaba tablas de salto relativo de 16 bits. (Error de GCC) - Se corrigió un error interno del compilador (ICE) de GCC 4.8 en
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Cambio 62770, error de GCC) - Se corrigió un problema con los archivos
*-gdb.exe
de Windows de 32 bits que no se ejecutaban. (Error 58975) - Se corrigió ICE de GCC 4.8 durante la compilación de bibliotecas listadas. Este es el mensaje de error:
internal compiler error: verify_flow_info failed
(Error 58916, Error GCC). - Se modificó la compilación de GDB/ARM para omitir los datos de
ARM.exidx
para desenrollar en código de prólogo y se agregó un comando (set arm exidx-unwinding
) para controlar el desenrollado de pila basado en exidx. (Error 55826) - Se corrigió el problema del compilador Clang 3.3 MIPS donde los registros HI y LO se reutilizan incorrectamente.
- Se corrigió un problema de ICE de MIPS 4.7 en
dbx_reg_number
. Este es el mensaje de error:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(Parche de GCC).
- Se corrigió el problema en el que
- Otras correcciones de errores:
-
- Correcciones de encabezados
- Se corrigió el ARM
WCHAR_MIN
yWCHAR_MAX
para que no esté firmado de acuerdo con las especificaciones (las versiones X86/MIPS están firmadas). Define_WCHAR_IS_ALWAYS_SIGNED
para restablecer el comportamiento anterior. (Error 57749) - Se corrigió
include/netinet/tcp.h
para que contenga el estado de enumeraciónTCP_INFO
. (Error 38881) - Se corrigió la macro
_C_LABEL_STRING
de la macrocdefs_elh.h
para dejar de generar advertencias en la cadena de herramientas de GCC 4.8 cuando se usa el modo c++11. (Errores 58135 y 58652) - Se quitaron las funciones inexistentes
imaxabs
yimaxdiv
del 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.h
debionic
.
- Se corrigió el ARM
- Se corrigió un problema de compilación de
samples/gles3jni
con Clang en la API nivel 11 de Android. - Se corrigió MCLinker para permitir múltiples casos de las siguientes opciones:
-gc-sections
y--eh-frame-hdr
. - Se corrigió MCLinker para aceptar la opción
--no-warn-mismatch
. - Se modificó la opción
cpu-features
para no asumir que todos los dispositivos VFPv4 son compatibles con IDIV. Ahora, esta opción solo agrega IDIV a los dispositivos incluidos en una lista blanca, como Nexus 4. (Error 57637) - Se corrigió un problema con errores de registro incorrectos
android_native_app_glue.c
en las operaciones de predistribución de eventos. - Se corrigieron todas las operaciones de finalización de
gabi++
y unexpected_handler para que puedan usarse en subprocesos de forma segura. - Se corrigieron varios problemas con la opción
-integrated-as
de Clang para que pueda pasar las pruebas parassax-instructions
yfenv
. - Se arregló el compilador GCC 4.6/4.7/4.8 para pasar la opción del vinculador
--eh-frame-hdr
incluso para archivos ejecutables estáticos. Para obtener más información, consulta el parche de GCC. - Se corrigió el apóstrofe adicional de
CPU-ARCH-ABIS.html
. Para obtener más información, 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_sub
y__atomic_fetch_or
. - Se corrigió el ICE de Clang 3.3 ICE con
vfprintf
personalizado. (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:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Para ver ejemplos de código, consultatests/device/test-openmp
- Se redujo significativamente el tamaño de
ld.mcld
(1.5 MB comparado con 3.5 MB deld.bfd
y 7.5 MB deld.gold
), lo que generó una mejora de velocidad de aproximadamente el 20%. - Se agregó
LOCAL_CONLYFLAGS
yAPP_CONLYFLAGS
para especificar las opciones aplicables solo a C, pero no a C++. Los elementosLOCAL_CFLAGS
yAPP_CFLAGS
existentes también se usan para la compilación C++ (para evitar el problema de especificar la mayoría de las opciones dos veces), por lo que opciones como-std=gnu99
pueden fallar en compilaciones de g++ con una advertencia y en compilaciones de clang++ con un error. - Se agregaron funciones de ayudante de arreglo de
gabi++
. - Se modificaron las compilaciones de GCC para que todos los archivos
libgcc.a
se compilen con-funwind-tables
para permitir que la pila se desenrolle más allá de los puntos previamente bloqueados, como__aeabi_idiv0
. - Se agregó compatibilidad con Ingenic MXU en MIPS GCC4.6/4.7/4.8 con la nueva opción
-mmxu
. - Se extendió
-mldc1-sdc1
de MIPS GCC4.6/4.7/4.8 para controlar ldxc1/sdxc1 también. - Se agregó crazy linker. Para obtener más información, consulta
sources/android/crazy_linker/README.TXT
. - Se corrigió
bitmap-plasma
para dibujar a pantalla completa en lugar de en un área de 200 x 200 píxeles. - Se redujeron los tamaños de las cadenas de herramientas de Linux y Darwin en un 25% mediante la creación de vínculos simbólicos a archivos idénticos.
- 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.html
y 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.8
o 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-typedefs
está 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-access
para 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=clang
ahora elige Clang 3.3 de forma predeterminada.Nota: Tanto GCC 4.4.3 como Clang 3.1 están obsoletas y se quitarán de la próxima versión del NDK.
- Se actualizó GNU Project Debugger (GDB) para brindar compatibilidad con Python 2.7.5.
- Se agregó MCLinker para admitir hosts de Windows. Dado que
ld.gold
es el valor predeterminado cuando está disponible, debes agregar-fuse-ld=mcld
enLOCAL_LDFLAGS
oAPP_LDFLAGS
para habilitar MCLinker. - Se agregó la herramienta
ndk-depends
que 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
-O
cuando se usa Boost 1.52.0. (Error 42891) - Se corrigieron
libc.so
ylibc.a
para 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_COMMANDS
en el que el archivolinker.list
está vacío o no se usa. - Se corrigió la compilación de MIPS de GCC en Mac OS para usar directivas CFI, sin las cuales
ld.mcld --eh-frame-hdr
suele fallar. - Se corrigió el error interno del compilador Clang 3.2 X86/MIPS en
llvm/lib/VMCore/Value.cpp
. (Cambio 59021) - Se corrigió el fallo del ensamblador GCC 4.7 de Windows de 64 bits. (Error:
out of memory allocating 4294967280 bytes
) - Se actualizó la secuencia de comandos
ndk-gdb
para que las acciones--start
o--launch
esperen al servidor de depuración de GNU a fin de que pueda alcanzar de forma más fiable las interrupciones establecidas en la ruta de ejecución (como las de código JNI). (Error 41278)Nota: Esta función requiere jdb y genera advertencias sobre las interrupciones pendientes. Especifica la opción
--nowait
para restaurar el comportamiento anterior. - Se corrigió una falla de GDB que se producía cuando la lista de bibliotecas estaba vacía.
- Se corrigió una falla de GDB que se producía cuando se usaba un comando
stepi
después de una instrucción Thumbbx pc
oblx pc
. (Error 56962 y error 36149) - Se corrigió
gdbserver
de MIPS para que busqueDT_MIPS_RLD_MAP
en 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-build
para permitirte especificar una versión de Clang como opción de línea de comandos (p. ej.,NDK_TOOLCHAIN_VERSION=clang3.2
). Anteriormente, solo se especificaba la versión como una variable de entorno trabajada. - Se corrigió el tamaño de gabi++ de
_Unwind_Exception
para que sea 24 para los objetivos de compilación de MIPS cuando se usa el compilador Clang. (Cambio 54141) - Se corrigió la secuencia de comandos de
ndk-build
para garantizar que se quiten las bibliotecas compiladas de los proyectos que incluyan bibliotecas estáticas precompiladas cuando se usa el comandondk-build clean
. (Cambio 54461 y cambio 54480). - Se modificó la opción
NDK_ANALYZE=1
para que sea menos detallada. - Se corrigió
gnu-libstdc++/Android.mk
para incluir una rutabackward/
para las compilaciones que usan retrocompatibilidad. (Error 53404) - Se corrigió un problema por el que
stlport new
a veces mostraba valores aleatorios. - Se corrigió
ndk-gdb
para que coincida con el orden 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/swap32
de x86:invalid 'asm': operand number out of range
. (Error 54465 y cambio 57242). - Se corrigió
ld.gold
para combinar literales de strings. - Se corrigió
ld.gold
para controlar la alineación de símbolos grandes. - Se actualizó
ld.gold
para habilitar la opción--sort-section=name
. - Se corrigió GCC 4.4.3/4.6/4.7 para suprimir la opción
-export-dynamic
en los programas vinculados estáticamente. GCC ya no agrega una sección.interp
para programas vinculados estáticamente. - Se corrigió el error de compilación
stlport
de GCC 4.4.3 sobretypedef
inconsistente de_Unwind_Control_Block
. (Error 54426) - Se corrigieron secuencias de comandos
awk
para controlar archivosAndroidManifest.xml
creados en Windows que pueden contener caracteres finales\r
y causar errores de compilación. (Error 42548) - Se corrigió
make-standalone-toolchain.sh
para sondear el directorioprebuilts/
para detectar si el host es de 32 bits o de 64 bits. - Se corrigió la opción
-integrated-as
de Clang 3.2. - Se corrigieron los datos del controlador
pr1
ypr2
del modelo compacto ARM EHABI de Clang 3.2. - Se agregó la opción
-mllvm -arm-enable-ehabi
de Clang para corregir el siguiente error:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Se corrigió una falla de compilación que se producía cuando no había ningún elemento
uses-sdk
en el manifiesto de la aplicación. (Error 57015)
- Se corrigió la secuencia de comandos
- Otros cambios:
-
- Correcciones de encabezados
- Se modificaron los encabezados para que
__set_errno
sea una función intercalada, ya que__set_errno
dejó de estar disponible enerrno.h
ylibc.so
ya no lo exporta. - Se modificó
elf.h
para incluirstdint.h
. (Error 55443) - Se corrigió
sys/un.h
para que se pueda incluir independientemente de otros encabezados. (Error 53646) - Se corrigió toda la familia de API de
MotionEvent_getHistorical
para tomarconst AInputEvent* motion_event
. (Error 55873) - Se corrigió
malloc_usable_size
para que tomeconst void*
. (Error 55725) - Se corrigió stdint.h para mejorar la compatibilidad con C99. (Cambio 46821)
- Se modificó
wchar.h
para no redefinirWCHAR_MAX
niWCHAR_MIN
. - Se corrigió la declaración
<inttypes.h>
para las macrosPRI
ySCN
relacionadas con el puntero. (Error 57218) - Se cambió el encabezado
sys/cdefs.h
a fin de que__WCHAR_TYPE__
sea de 32 bits para niveles de API inferiores a 9, lo que significa quewchat_t
es de 32 bits para todos los niveles de API. Para restaurar el comportamiento anterior, define la variable booleana_WCHAR_IS_8BIT
. (Error 57267)
- Se 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.sh
para admitir la bibliotecastlport
además degnustl
cuando especificas la opción--stl=stlport
. Para obtener más información, consultaSTANDALONE-TOOLCHAIN.html
. - Se actualizó la secuencia de comandos
make-standalone-toolchain.sh
para que la opción--llvm-version=
cree las secuencias de comandos$TOOLCHAIN_PREFIX-clang
y$TOOLCHAIN_PREFIX-clang++
, además declang
yclang++
, para evitar el uso de las definiciones de clang y clang++ del host por accidente. - Se agregaron dos marcas para volver a habilitar dos optimizaciones en Clang de forma ascendente, pero inhabilitadas en el NDK para una mejor compatibilidad con el código compilado por GCC:
- Se agregó una marca
-fcxx-missing-return-semantics
para volver a habilitar las semánticas de retorno faltantes en Clang 3.2+. Normalmente, todas las rutas de acceso deben terminar con una declaración de retorno para una función de retorno de valor. Si este no es el caso, clang inserta una instrucción indefinida (o trap en modo de depuración) en la ruta sin una declaración de retorno. Si estás seguro de que tu código es correcto, utiliza esta función experimental para permitir que el optimizador aproveche el comportamiento indefinido. Si no estás seguro, no la uses. El emisor puede seguir recibiendo un valor aleatorio incorrecto, pero el optimizador no lo explotará y hará que su código sea más difícil de depurar. - Se agregó una marca
-fglobal-ctor-const-promotion
para volver a habilitar la promoción de variables globales con constructor estático para que sean constantes. Con esta función experimental, el pase de optimización de variables globales de LLVM intenta evaluar las variables con constructores estáticos y promoverlas a constantes globales. Si bien esta optimización es correcta, puede causar alguna incompatibilidad con el código compilado por GCC. Por ejemplo, el código podría hacerconst_cast
para convertir la constante en mutable y modificarla. En GCC, la variable está en el modo de lectura y escritura, y el código se ejecuta por accidente. En Clang, la variable const está en la memoria de solo lectura y puede causar que tu aplicación falle.
- Se agregó una marca
- Se agregó
-mldc1-sdc1
a los compiladores MIPS GCC y Clang. De manera predeterminada, los compiladores alinean correctamente los objetos de 8 bytes y emiten las instruccionesldc1
ysdc1
para moverlos. Si tu app usa un asignador personalizado que no siempre se alinea con el límite de 8 bytes de un objeto nuevo de la misma forma que el asignador predeterminado, es posible que falle debido a operacionesldc1
ysdc1
en la memoria no alineada. En este caso, usa la marca-mno-ldc1-sdc1
como solución alternativa. - Se redujo la gravedad del evento de advertencia a información si
APP_PLATFORM_LEVEL
es mayor queAPP_MIN_PLATFORM_LEVEL
.APP_PLATFORM_LEVEL
puede ser inferior aAPP_PLATFORM
enjni/Application.mk
porque el NDK no tiene encabezados para todos los niveles. En este caso, el nivel real se desplaza hacia abajo. Laandroid:minSdkVersion
especifica elAPP_MIN_PLATFORM_LEVEL
en 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-build
para usaras/ld
de GCC 4.7 para las compilaciones de Clang.Nota: En GCC 4.7, se cambió el nombre de
monotonic_clock
yis_monotonic
asteady_clock
yis_steady
, respectivamente. - Se agregaron las siguientes advertencias nuevas a la secuencia de comandos
ndk-build
:- Se agregaron advertencias si
LOCAL_LDLIBS/LDFLAGS
se usa en módulos de bibliotecas estáticas. - Se agregó un aviso si una configuración no tiene ningún módulo para compilar.
- Se agregó una advertencia para las bibliotecas que no son del sistema y que se utilizan en
LOCAL_LDLIBS/LDFLAGS
de una biblioteca compartida o módulos ejecutables.
- Se agregaron advertencias si
- Se actualizaron las secuencias de comandos de compilación de modo que, si
APP_MODULES
no está definido y solo se enumeran las bibliotecas estáticas enAndroid.mk
, la secuencia de comandos fuerce todas las compilaciones. (Error 53502) - Se actualizó
ndk-build
para ser compatible con rutas de acceso absolutas enLOCAL_SRC_FILES
. - Se quitaron los archivos ejecutables
*-gdbtui
, que son duplicados de los archivos ejecutables*-gdb
con la opción-tui
habilitada. - Se actualizaron las secuencias de comandos de compilación para advertirte cuando el frontend del compilador Edison Design Group (EDG) vuelve a activar
_STLP_HAS_INCLUDE_NEXT
. (Error 53646) - Se agregó la variable de entorno
NDK_LIBS_OUT
para permitir la anulación de la ruta de acceso alibraries/gdbserver
desde 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=true
para 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.HTML
yNDK-BUILD.html
. - Se agregó el compilador Clang 3.2. GCC 4.6 sigue siendo la versión predeterminada. Para obtener información sobre el uso del compilador Clang, consulta
CHANGES.HTML
. - Se agregó un analizador de código estático para hosts de Linux/Mac OS X. Para obtener información sobre el uso del analizador, consulta
CHANGES.HTML
. - Se agregó MCLinker para hosts Linux/Mac OS X como una función experimental. El vinculador
ld.gold
es el predeterminado cuando está disponible, por lo que debes habilitarlo explícitamente. Para obtener más información, 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_LIBRARIES
yLOCAL_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:5790
del compilador interno de GCC 4.7. - Se corrigió el error
redirect_eh_edge_1, at tree-eh.c:2214
del compilador interno de GCC 4.7. (Error 52909) - Se corrigió un segfault de GCC 4.7. (Error de GCC)
- Se corrigió la resolución del reloj
<chrono>
y se habilitósteady_clock
. (Error 39680) - Se corrigió la cadena de herramientas para habilitar
_GLIBCXX_HAS_GTHREADS
para GCC 4.7 libstdc++. (Error 41770 y error 41859) - Se corrigió el problema en el que el código MXX/SSE de X86 no se vinculaba debido a la falta de
posix_memalign
. (Cambio 51872) - Se corrigió la falla de segmentación de GCC4.7/X86 en
i386.c
, funció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.gold
a__exidx_start
y__exidx_start_end
. (Cambio 52134) - Se corrigió el error del compilador interno de Clang 3.1 cuando se usaba la biblioteca de Eigen. (Error 41246)
- Se corrigió el error interno del compilador Clang 3.1 que incluía
<chrono>
en modo C++11. (Error 39600) - Se corrigió el error interno del compilador Clang 3.1 que se producía cuando se generaba un código objeto para una llamada de método a un
rvalue
uniforme inicializado. (Error 41387) - Se corrigió la realineación de pila de Clang 3.1/X86. (Cambio 52154)
- Se corrigió el problema con el GNU Debugger (GDB) SIGILL cuando se depuraba en Android 4.1.2. (Error 40941)
- Se corrigió el problema por el que GDB no podía establecer los puntos de interrupción en
source:line
cuando los símbolos contenían rutas de acceso a archivos largas e indirectas. (Error 42448) - Se corrigió
read_program_header
de GBD para ejecutables MIPS PIE. (Cambio 49592) - Se corrigió una falla de segmentación
STLport
enuncaught_exception()
. (Cambio 50236) - Se corrigió el error de bus
STLport
en el control de excepciones debido al acceso no alineado deDW_EH_PE_udata2
,DW_EH_PE_udata4
yDW_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_t
yptrdiff_t
. - Se corrigió el encabezado
fenv.h
de MIPS y ARM. - Se corrigió
stddef.h
para no redefiniroffsetof
, debido a que ya existe en la cadena de herramientas. - Se corrigió
elf.h
para que contengaElf32_auxv_t
yElf64_auxv_t
. (Error 38441) - Se corrigieron las definiciones de C++ de
#ifdef
en el archivo de encabezadoOpenSLES_AndroidConfiguration.h
. (Error 53163)
- Se quitaron las definiciones redundantes de
- Se corrigió
STLport
para que anule los cambios después de un error de memoria en lugar de salir silenciosamente. - Se corrigieron los encabezados de Gabi++ y el sistema para poder compilar con el nivel de API 8 y los niveles inferiores.
- Se corrigió
cpufeatures
para no analizar/proc/self/auxv
. (Error 43055) - Se corrigió
ld.gold
para no depender de la libstdc++ del host ni de las plataformas Windows, para no depender de la bibliotecalibgcc_sjlj_1.dll
. - Se corrigió Clang 3.1, que emite una lista de registros inconsistente en
.vsave
y hace que falle el ensamblador. (Cambio 49930) - Se corrigió Clang 3.1 para poder compilar libgabi++ y pasar las pruebas de
test-stlport
para los objetivos de compilación de MIPS. (Cambio 51961) - Se corrigió Clang 3.1 para habilitar únicamente la excepción predeterminada para C++, no para C.
- Se corrigieron varios problemas en Clang 3.1 para pasar la mayoría de las pruebas de excepción de GNU.
- Se corrigieron las secuencias de comandos
clang
yclang++
en el compilador independiente del NDK para detectar-cc1
y no especificar-target
cuando se encuentre. - Se corrigió
ndk-build
para observarNDK_APP_OUT
establecido enApplication.mk
. - Se corrigieron
libc.so
ylib.a
de X86, a los que les faltaban las funcionessigsetjmp
ysiglongjmp
ya 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-build
en Windows cuando se ejecuta desde el directorio JNI del proyecto. (Error 40192) - Se corrigió el problema por el que la secuencia de comandos
ndk-build
no se compilaba si el archivo Make tiene un espacio en blanco al final en la definició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_cleanup
y__cxa_type_match
para tener visibilidad de forma predeterminada desde la visibilidad oculta anterior en libstdc++ de GNU. Para obtener más información, 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
STLport
pueda compilarse para ARM en modo Thumb. - Se agregó compatibilidad con
std::set_new_handler
en Gabi++. (Error 52805) - Se habilitó la llamada del sistema
FUTEX
en GNU libstdc++. - Se actualizó
ndk-build
para que ya no copie la biblioteca estática precompilada en el directorioobj/local/<abi>/
de un proyecto. (Error 40302) - Se quitó
__ARM_ARCH_5*__
de la secuencia de comandostoolchains/*/setup.mk
de ARM. (Error 21132) - Se compilaron bibliotecas adicionales de GNU libstdc++ en miniatura para ARM.
- Se habilitaron las instrucciones
madd/msub/nmadd/nmsub/recip/rsqrt
del punto flotante de MIPS con FPU de 32 bits. - Se habilitó el optimizador de bucle de grafito en GCC 4.6 y 4.7 para permitir más optimizaciones:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
y-ftree-loop-linear
. (Información) - Se habilitó
polly
para hosts de Clang 3.1 en Linux y Max OS X de 32 bits, que analiza y optimiza el acceso a la memoria. (Información) - Se habilitó
-flto
en GCC 4.7 y 4.6, Clang 3.2 y Clang 3.1 en Linux (Clang LTO a través de LLVMgold.so). Los objetivos del compilador MIPS no son compatibles porqueld.gold
no está disponible. - Se habilitó
--plugin
y--plugin-opt
parald.gold
en GCC 4.6/4.7. - Se habilitó
--text-reorder
parald.gold
en GCC 4.7. - Se configuró libstdc++ de GNU con
_GLIBCXX_USE_C99_MATH
, que no define la secuencia de comandosisinf
en el encabezado biónico. Para obtener más información, consultaCHANGES.html
. - Se agregó
APP_LDFLAGS
a 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=0
inhabiliteNDK_LOG
. - Se actualizaron las secuencias de comandos de compilación para permitir que
NDK_HOST_32BIT=0
inhabilite la cadena de herramientas de 32 bits del entorno del desarrollador del host. - Se cambiaron las marcas predeterminadas de GCC/X86
-march=
y-mtune=
depentiumpro
ygeneric
ai686
yatom
. - Se mejoraron las secuencias de comandos para compilar cadenas de herramientas:
- Se corrigió una condición de carrera en
build-gcc.sh
para el tipo de compilaciónmingw
que impedía una cantidad significativa de procesamiento de compilación en paralelo. - Se actualizaron
build-gabi++.sh
ybuild-stlport.sh
para que ahora puedan ejecutarse desde el paquete del NDK. (Error 52835) - Se corrigió
run-tests.sh
en 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.sh
a una versión más reciente. - Se agregó la opción para compilar
libgnustl_static.a
ystlport_static.a
sin 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.7
o agrégala 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
stlport
a través de gabi++. Ten en cuenta que el nuevo gabi++ depende dedlopen
y el código relacionado. Eso implica lo siguiente:- Ya no puedes compilar un ejecutable estático con la opción
-static
ni incluirlibstlport_static.a
medianteAPP_STL := stlport_static
. (Aún puedes usar la opción-static
con una cadena de herramientas independiente). La compilación de un ejecutable dinámico medianteinclude $(BUILD_EXECUTABLE)
sigue funcionando porque el compilador agrega automáticamente la opción-ldl
. - Si tu proyecto se vincula con
-nostdlib
y {-Wl,- no-undefined}, debes incluir manualmente la opción-ldl
.
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-all
y-fstack-protector-strong
con los compiladores GCC 4.6 y versiones posteriores.Nota: La configuración
-mstack-protector-guard
en sí misma no habilita ninguna opción-fstack-protector*
. - Se agregó la función
android_setCpu()
asources/android/cpufeatures/cpu-features.c
para su uso cuando la detección automática a través de/proc
no sea posible en Android 4.1 y versiones posteriores. (Error 164154 de Chromium)
- 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:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
. Se produjo este problema debido a la compilación en Mac OS X 10.7, que generó objetos binarios que no eran compatibles con Mac OS 10.6.x ni el NDK. - Se quitaron las opciones
-x c++
de la secuencia de comandos de compilación independiente Clang++. (Error 39089) - Se corrigieron errores que se producían con la opción
NDK_TOOLCHAIN_VERSION=clang3.1
en Cygwin. (Error 39585) - Se corrigió la secuencia de comandos
make-standalone-toolchain.sh
para permitir la generación de una cadena de herramientas independiente utilizando los entornos Cygwin o MinGW. La cadena de herramientas resultante puede utilizarse en entornos Cygwin, MinGW o CMD.exe. (Error 39915 y error 39585) - Se agregó la opción faltante
SL_IID_ANDROIDBUFFERQUEUESOURCE
en compilaciones android-14 para ARM y X86. (Error 40625) - Se corrigió la detección de CPU x86 para la función
ANDROID_CPU_X86_FEATURE_MOVBE
. (Error 39317) - Se corrigió un problema que impedía que la biblioteca de plantillas estándar (STL) usara fuentes C++ que no tenían una extensión de archivo
.cpp
. - Se corrigió el error interno del compilador GCC 4.6 ARM reload1.c:1061. (Error 20862)
- Se corrigió el error del compilador interno de GCC 4.4.3 ARM emit-rtl.c:1954. (Error 22336)
- Se corrigió el error del compilador interno de GCC 4.4.3 ARM postreload.c:396. (Error 22345)
- Se corrigió el problema de omisión de las funciones Lambda de GCC 4.6/4.7. (Error 35933)
- 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_t
para que sean del mismo tipo. - Se corrigió un error de ortografía en
android/bitmap.h
. (Error 15134) - Se corrigió un error de ortografía en
errno.h
. - Se agregó la comprobación de la presencia de
__STDC_VERSION__
ensys/cdefs.h
. (Error 14627) - Se reorganizaron los encabezados en
byteswap.h
ydirent.h
. - Se corrigió
limits.h
para que incluyapage.h
, que proporciona la configuraciónPAGE_SIZE
. (Error 39983) - Se corrigió el tipo de datos que se muestra de
glGetAttribLocation()
yglGetUniformLocation()
deint
aGLint
. - Se corrigió la constante
__BYTE_ORDER
para compilaciones de x86. (Error 39824)
- Se corrigieron
- Se corrigió la secuencia de comandos
ndk-build
para no reemplazar-Os
con-O2
para las compilaciones de ARM. - Se corrigieron las secuencias de comandos de compilación para permitir la sobrescritura de la configuración de
HOST_AWK
,HOST_SED
yHOST_MAKE
. - Se corrigió el problema de
ld.gold
en compilaciones defsck_msdos
que vinculan objetos creados por el compilador Intel C/C++ (ICC). - Se corrigió la compatibilidad de ARM EHABI en Clang para ajustarse a las especificaciones.
- Se corrigió el GNU Debugger (GDB) para acortar el tiempo empleado en recorrer el mapa de vínculos del objetivo durante los eventos de
solib
. (Error 38402) - Se corrigió la falta del archivo
libgcc.a
durante la vinculación de bibliotecas compartidas.
- 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
SIGILL
para rutas sin una sentencia return. - Se actualizó
make-standalone-toolchain.sh
para aceptar el sufijo-clang3.1
, que es equivalente a agregar--llvm-version=3.1
a la cadena de herramientas de GCC 4.6. - Se actualizó la URL del informe de errores de GCC y Clang a https://source.android.com/source/report-bugs.html.
- Se agregó compatibilidad con ARM ELF a
llvm-objdump
. - Se quitó la advertencia de tratar los resultados de c como c++ para compilaciones de Clang.
- Se actualizó la compilación para que solo se compile la versión de 32 bits de
libiberty.a
y se coloque 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.1
o agrega esta configuración de variable de entorno aApplication.mk
. - Para compilaciones independientes, agrega
--llvm-version=3.1
amake-standalone-toolchain.sh
y reemplazaCC
yCXX
en tu archivo Make por<tool-path>/bin/clang
y<tool-path>/bin/clang++
. ConsultaSTANDALONE-TOOLCHAIN.html
para obtener información.
Nota: Esta función es experimental. Pruébala e informa cualquier error.
- Para
- Se agregó el vinculador Gold
ld.gold
para la cadena de herramientas de Windows. Este vinculador también es el predeterminado para ARM y X86 en todos los hosts. Puedes anularlo para usar el vinculadorld.bfd
agregandoLOCAL_LDFLAGS += -fuse-ld=bfd
aAndroid.mk
o pasando-fuse-ld=bfd
a la línea de comandos g++/clang++ que realiza la vinculación. - Se agregaron comprobaciones de espacios en la ruta de acceso del NDK a las secuencias de comandos
ndk-build[.cmd]
yndk-gdb
para evitar errores de compilación difíciles de diagnosticar. - Se realizaron los siguientes cambios en el control del nivel de API:
- Se modificó la lógica de compilación para que los proyectos que especifiquen
android-10
medianteandroid-13
enAPP_PLATFORM
,project.properties
odefault.properties
se vinculen conandroid-9
en 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
-fPIE
para ejecutables independientes de la posición (PIE). Una nueva opciónAPP_PIE
te permite controlar este comportamiento. ConsultaAPPLICATION-MK.html
para obtener información.Nota: Todos los niveles de API superiores a 14 siguen vinculados con
platforms/android-14
y no se agregaron nuevosplatforms/android-N
. - Se modificó
ndk-build
para proporcionar advertencias si el nivel de API ajustado es mayor queandroid:minSdkVersion
en elAndroidManifest.xml
del proyecto.
- Se modificó la lógica de compilación para que los proyectos que especifiquen
- Se actualizó la biblioteca de ayuda
cpu-features
para incluir más funciones específicas de ARM. Consultasources/android/cpufeatures/cpu-features.h
para obtener información. - Se modificó el doble largo en la plataforma X86 para que sea de 8 bytes. Este tipo de datos ahora tiene el mismo tamaño que un doble, pero se sigue tratando como un tipo distinto.
- Se actualizó la compilación para
APP_ABI=armeabi-v7a
:- Se modificó este tipo de compilación para pasar el parámetro
-march=armv7-a
al vinculador. Este cambio garantiza que las bibliotecas específicas de v7 ycrt*.o
se vinculen correctamente. - Se agregó
-mfpu=vfpv3-d16
andk-build
en lugar de la opción-mfpu=vfp
que 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.sh
con privilegios de administrador hacía que la cadena de herramientas independiente fuera inaccesible para algunos usuarios. (Error 35279)- Todos los archivos y ejecutables del paquete de lanzamiento del NDK están configurados para tener permisos de lectura y ejecución.
- Ahora se conserva la propiedad/grupo de
libstdc++.a
cuando se copia.
- Se quitó el elemento
\r
redundante del precompilado de Windowsecho.exe
. El elemento\r
redundante hacía quegdb.setup
fallara en el GNU Debugger (GDB) porque por error se convertía en parte de la ruta de acceso. (Error 36054) - Se corrigieron las compilaciones paralelas de Windows que a veces fallaban debido a problemas de tiempos en la implementación de
host-mkdir
. (Error 25875) - Se corrigió el elemento
libstdc++
del GNU de GCC 4.4.3 para que no combine nombrestypeinfo
de 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
null
encp/mangle.c::write_unscoped_name
de GCC 4.6 por el que GCC podía fallar cuando el contexto eranull
y 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*()
deSTLport
en la que se mostraba una ubicación de pila inactiva que contenía el valor descodificado y causaba fallas en el tiempo de ejecución. (Error 38630) - Correcciones específicas de ARM:
- Se corrigió
g++
de ARM GCC 4.4.3/4.6 para que no advierta que se cambió la decoración de <va_list> en GCC 4.4. La solución alternativa del conmutador-Wno-psabi
para evitar esta advertencia ya no es necesaria. - Se corrigió un problema que se producía cuando un proyecto con los sufijos
.arm
o.neon
enLOCAL_SRC_FILES
también usabaAPP_STL
. ConAPP_STL
, la secuencia de comandosndk-build
busca archivos C++ enLOCAL_SRC_FILES
antes de agregar rutas de accesoheader/lib
de STL a la compilación. Se modificóndk-build
para filtrar los sufijos.arm
y.neon
antes de la búsqueda; de lo contrario, los elementos enLOCAL_SRC_FILES
comomyfile.cpp.arm.neon
no se compilarán como código C++. - Se corrigió
binutils-2.21/ld.bfd
para poder vincular objetos de binutils antiguos 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/ld
vinculaba un objeto precompilado con otrobinutils-2.21
más nuevo. - Se corrigió un problema en la compilación de
stdc++
de GNU con-mthumb
y-march=armv7-a
, modificandomake-standalone-toolchain.sh
para propagarheaders/libs
en 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-protector
para 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
STLport
configurando_STLP_LITTLE_ENDIAN
en 1 cuando se compilalibstlport_*
de MIPS. - Se corrigió un error de
__builtin_unreachable
de GCC que se producía cuando se compilaba LLVM. (Error 54369 de GCC) - Se proporcionó portabilidad a versiones anteriores para corregir procesos de compilación de
cc1
que consumían el 100% de CPU. (Error 50380 de GCC)
- 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
gdb
con una dependencia cableada de una versión específica de este lenguaje. (Error 36120) - Se corrigió
ndk-gdb
cuandoAPP_ABI
contieneall
y no coincide con ninguna de las arquitecturas conocidas. (Error 35392) - Se corrigió la compatibilidad de nombres de ruta de Windows manteniendo el carácter
:
cuando parece que podría ser parte de una ruta de Windows que empieza con una letra de unidad. (Error 12843 de GDB) - Se corrigió la adición de compatibilidad de interrupciones de hardware para ARM en
gdbserver
. (Error de GDB) - Se agregó la corrección para solo leer el
solibs
actual cuando el vinculador es consistente. Este cambio acelera el control de eventos 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
gdb
no se detenía en las interrupciones ubicadas en las bibliotecasdlopen-ed
. (Error 34856) - Se corrigió
SIGILL
en el vinculador dinámico cuando se llamaba adlopen()
, en el sistema donde/system/bin/linker
está desprovisto de símbolos yrtld_db_dlactivity()
se implementa comoThumb
, debido a que no se preserva elLSB
desym_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
__unused
por__linux_unused
enlinux/sysctl.h
ylinux/icmp.h
para evitar conflictos con#define __unused
ensys/cdefs.h
. - Se corrigió
fenv.h
para las funciones de C adjuntas con__BEGIN_DECLS
y__END_DECLS
. - Se quitaron las funciones no implementadas en
malloc.h
. - Se corrigió la definición
stdint.h
deuint64_t
para compiladores ANSI. (Error 1952) - Se corrigieron las macros del preprocesador en
<arch>/include/machine/*
. - Se reemplazó
link.h
para MIPS por una nueva versión compatible con todas las plataformas. - Se quitó
linux-unistd.h
. - Mueve las macros específicas de GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
yULONG_LONG_MAX
de<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_exception
solo se produce cuandoSTLport
está autorizado a usar excepciones. - Se corrigió la compilación de paquetes del NDK exclusivos de Linux sin compilar también código de Windows. Usa la siguiente configuración para realizar este tipo de compilación:
./build/tools/make-release.sh --force --systems=linux-x86
. - Se corrigió
libc.so
para que no 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_handle
porquecrtbegin_so.o
no está vinculado en este caso. El contenido de__dso_handle
no importa, como se muestra en el siguiente código de ejemplo:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Se corrigió el decodificador de símbolos para ARM que se usa en
objdump
para entradasplt
para generar un formulariofunction@plt
más legible. - Se quitaron los siguientes símbolos, introducidos en
libgcc.a
de GCC 4.6, desde la bibliotecalibc.so
de la plataforma X86:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
y__aeabi_unwind_cpp_pr2
. - Se quitaron los elementos
.ctors
,.dtors
y.eh_frame
sin usar encrt*_so.S
de MIPS. - Se actualizó
ndk-gdb
para que solo se tome la última línea de salida parandk-build
DUMP_XXXX
. Este cambio asegura que, siApplication.mk
oAndroid.mk
imprimen 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-x86
yarch-mips
deplatforms/android-[3,4,5,8]
. Estos encabezados estaban incompletos, ya que las ABI de X86 y MIPS solo son compatibles con el nivel de API 9 o las versiones posteriores. - El c++ simplificado incluye la ruta en paquetes independientes, como se muestra a continuación.
(Error 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
. - Se corrigió
ndk-build
para reconocer más extensiones de archivo C++ de forma predeterminada:.cc .cp .cxx .cpp .CPP .c++ .C
. Aún puedes usarLOCAL_CPP_EXTENSION
para sobrescribir estas configuraciones de extensión. - Se solucionó un problema en
samples/san-angeles
que mostraba una pantalla negra o un fotograma congelado cuando se volvía a ejecutar. - Se reemplazaron las APIs obsoletas en muestras del NDK.
(Error 20017)
hello-gl2
de android-5 a android-7native-activity
de android-9 a android-10native-audio
de android-9 a android-10native-plasma
de android-9 a android-10
- Se agregó un nuevo desarrollo de la marca para los ejecutables de Android que tienen un esquema más simple en la sección
.note.android.ident
(definido 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; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
.Las opciones de marca anteriores en la sección
.note.ABI-tag
dejaron de estar disponibles. - Se agregó una nueva secuencia de comandos
run-tests-all.sh
que llama arun-tests.sh
ystandalone/run.sh
con varias condiciones. La secuencia de comandosrun-tests.sh
se ejecuta sin la opción--abi
y se mejora para compilar la mayoría de las pruebas para todas las ABI admitidas y ejecutarse en todos los dispositivos conectados.
- 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_COMMANDS
en entornos Windows Cygwin y Mac OS para bibliotecas estáticas. La generación de archivos de lista es más rápida y no se regenera para evitar recompilaciones repetidas de proyectos. - Se corrigieron varios problemas en
ndk-gdb
:- Se actualizó la herramienta para pasar las marcas
-e
,-d
y-s
a adb de manera más consistente. - Se actualizó la herramienta para aceptar nombres de serie de dispositivos que contengan espacios.
- Se actualizó la herramienta para recuperar la información de
/system/bin/link
, de modo quegdb
en el host puede establecer una interrupción en__dl_rtld_db_dlactivity
y estar al tanto de la actividad del vinculador (p. ej., volver a explorar los símbolossolib
cuando se llama adlopen()
).
- Se actualizó la herramienta para pasar las marcas
- Se corrigió
ndk-build clean
en Windows, que no conseguía quitar./libs/*/lib*.so
. - Se corrigió
ndk-build.cmd
para que muestre unERRORLEVEL
distinto de cero cuandomake
falle. - Se corrigió
libc.so
para dejar de exportar incorrectamente los símbolos__exidx_start
y__exidx_end
. - Se corrigió
SEGV
cuando se desenrolla la pila más allá de__libc_init
para ARM y MIPS.
- Se corrigieron problemas de
- Cambios importantes:
-
- Se agregó la cadena de herramientas de GCC 4.6 (
binutils
2.21 congold
y GDB 7.3.x) para que coexista con la cadena de herramientas de GCC 4.4.3 original (binutils
2.19 y GDB 6.6).- GCC 4.6 ahora es la cadena de herramientas predeterminada. Puedes configurar
NDK_TOOLCHAIN_VERSION=4.4.3
enApplication.mk
para seleccionar la original. - La compatibilidad con el vinculador
gold
solo está disponible para arquitecturas ARM y x86 en hosts Linux y Mac OS. La compatibilidad está inhabilitada de forma predeterminada. AgregaLOCAL_LDLIBS += -fuse-ld=gold
enAndroid.mk
para habilitarla. - Los programas compilados con
-fPIE
requieren la nueva versión deGDB
para depurar, incluso los objetos binarios en imágenes del sistema Android 4.1 (API nivel 16). - La herramienta
ld
2.21 debinutils
contiene correcciones de versiones anteriores a partir de la versión 2.22:- Se corrigió
ld --gc-sections
, que conserva por error referencias zombi a bibliotecas externas. (Más información). - Se arregló el comando
strip
de ARM para preservar losp_align
yp_flags
originales en la secciónGNU_RELRO
si son válidos. Sin esta corrección, los programas compilados con-fPIE
no 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_now
de forma predeterminada:- Se agregó
--noexecstack
al ensamblador y-z noexecstack
al vinculador que brinda protección NX contra ataques de desbordamiento de búfer mediante la habilitación del bit NX en la pila y en el montón. - Se agregaron
-z relro
y-z now
al vinculador para el endurecimiento de las secciones de datos internos después de la vinculación para protegerse de las vulnerabilidades de seguridad causadas por la corrupción de la memoria. (Más información: 1, 2) - Estas funciones se pueden inhabilitar usando las siguientes opciones:
- Inhabilita la protección NX configurando la opción
--execstack
para el ensamblador y-z execstack
para el vinculador. - Para inhabilitar el endurecimiento de los datos internos, configura las opciones
-z norelro
y-z lazy
para el vinculador. - Inhabilita estas protecciones en el
jni/Android.mk
del NDK configurando las siguientes opciones:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
.
Consulta
docs/ANDROID-MK.html
para obtener más información. - 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-gnu
para que se ajuste al error deR_MIPS_TLS_LDM
. (Más información) - Se corrigieron fallas aleatorias de la herramienta
ld
que se producían cuando se usaba--gc-sections
. (Más información) - Se corrigió el error de recuento de
GOT_PAGE
de MIPS (Más información) - Se corrigió el vínculo del símbolo de advertencia de seguimiento para
mips_elf_count_got_symbols
. - Se corrigió el vínculo del símbolo de advertencia de seguimiento para
mips_elf_allocate_lazy_stub
. - Se movió el elemento
.dynamic
de MIPS al segmento de datos, para que admita escritura. - Se reemplazaron los valores codificados para los símbolos por los tamaños de segmento correctos de MIPS.
- Se quitó la opción
-mno-shared
de los valores predeterminados en la cadena de herramientas de MIPS. El valor predeterminado de la cadena de herramientas de Android es-fPIC
(o-fpic
si se admite). Si no especifica explícitamente-mshared
,-fpic
,-fPIC
,-fpie
ni-fPIE
, el compilador MIPS agrega-mno-shared
que desactiva PIC. Se corrigió el compilador para que no agregue-mno-shared
en este caso. - Se corrigieron los nombres de paquetes erróneos en los ejemplos
hello-jni
ytwo-libs
para que el proyectotests
que 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
gdbserver
detoolchain/<arch-os-ver>/prebuilt/gdbserver
aprebuilt/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++/include
ylib
asources/cxx-stl/gnu-libstdc++/4.6
cuando se compiló con GCC 4.6, o se moviósources/cxx-stl/gnu-libstdc++/4.4.3
cuando se compiló con GCC 4.4.3. - Se movieron
libbfd.a
ylibintl.a
delib/
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.sh
para generar una nueva cadena de herramientas alojada en Linux que genere ejecutables Win32 y Win64. - Se mejoró la velocidad de
download-toolchain-sources.sh
con el comandoclone
y solo se usacheckout
para los directorios que se necesitan para compilar los objetos binarios de la cadena de herramientas del NDK. - Se agregaron secuencias de comandos
build-host-gcc.sh
ybuild-host-gdb.sh
. - Se agregó
tests/check-release.sh
para comprobar el contenido de un determinado directorio de instalación del NDK o un paquete del NDK existente. - Se reescribieron las pruebas independientes
tests/standalone/run.sh
.
- Se agregó
- Se quitó el encabezado
if_dl.h
de todas las plataformas y arquitecturas. Los elementosAF_LINK
ysockaddr_dl
que 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.html
en el paquete del NDK.De forma predeterminada, se genera código para los dispositivos basados en ARM. Puedes agregar
mips
a tu definición deAPP_ABI
en el archivoApplication.mk
para compilar plataformas de MIPS. Por ejemplo, la siguiente línea instruye andk-build
para que compile tu código para tres ABI distintas:APP_ABI := armeabi armeabi-v7a mips
A menos que dependas de fuentes de ensamblado específicas de la arquitectura, como el código de ensamblado de ARM, no deberías tener que tocar tus archivos
Android.mk
para compilar el código máquina de MIPS. - Puedes compilar una cadena de herramientas de MIPS independiente usando la opción
--arch=mips
cuando llames amake-standalone-toolchain.sh
. Consultadocs/STANDALONE-TOOLCHAIN.html
para obtener más información.
Nota: Para garantizar que las aplicacionesestén disponibles para los usuarios solo si sus dispositivos son capaces de ejecutarlas, Google Play filtra las aplicaciones basándose en la información del conjunto de instrucciones que se incluye en ella. No es necesario que realices ninguna acción para habilitar el filtrado. Además, el propio sistema Android también revisa tu aplicación al momento de la instalación y permite que esta continúe solo si proporciona una biblioteca compilada para la arquitectura de la CPU del dispositivo.
- 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 baseb
a la clase derivadaD
se ajustaba incorrectamente en la dirección opuesta a la de la clase base. (Error 28721) - Se corrigió un error por el cual
make-standalone-toolchain.sh
no 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.cmd
para garantizar quendk-build.cmd
funcione 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
,sinf
yexpf
).
- 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-gdb
también reconoce la variable. - Se agregó compatibilidad para compilar módulos con cientos o incluso miles de archivos fuente definiendo
LOCAL_SHORT_COMMANDS
comotrue
enAndroid.mk
.Este cambio obliga al sistema de compilación del NDK a poner la mayoría de las opciones de vinculador o archivador en archivos de lista, como solución para las limitaciones de longitud de la línea de comandos. Consulta
docs/ANDROID-MK.html
para obtener información.
- 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.h
para evitar problemas de corrección en algunos dispositivos de varios núcleos basados en ARM. Recompila tus fuentes no modificadas con esta versión del NDK para solucionar el problema. Para obtener más información, leedocs/ANDROID-ATOMICS.html
. - Se revirtió a
binutils
2.19 para corregir errores de depuración que aparecían en el NDK r7 (que cambió abinutils
2.20.1). - Se corrigió
ndk-build
en Linux de 32 bits. Un error de empaquetado puso una versión de 64 bits del ejecutableawk
enprebuilt/linux-x86/bin
en el NDK r7. - Se corrigió la compilación nativa de Windows (
ndk-build.cmd
). Otros modos de compilación no se vieron afectados. Las correcciones incluyen lo siguiente:- Se quitó un error de desbordamiento de pila/bucle infinito que se producía cuando se intentaba llamar a
ndk-build.cmd
desde un directorio que no estaba en la parte superior de la ruta de acceso de tu proyecto (por ejemplo, en cualquier subdirectorio). - Se corrigió un problema mediante el que se ignoraban los archivos de dependencias generados automáticamente. Esto significa que la actualización de un encabezado no desencadena la recompilación de las fuentes que lo incluyen.
- Se corrigió un problema en el que no se controlaban correctamente los caracteres especiales, que no eran espacios ni comillas, de los archivos o rutas.
- Se 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_shared
si deseas establecer un vínculo con la versión de la biblioteca compartida o-lstdc++
para la versión estática.Consulta
docs/STANDALONE-TOOLCHAIN.html
para obtener más información sobre esta corrección. - Se corrigió
gnustl_shared
en Cygwin. El vinculador reclamó que no podía encontrarlibsupc++.a
a pesar de que el archivo estaba en la ubicación correcta. - Se corrigió el vínculo de Cygwin C++ cuando no se utiliza ningún tiempo de ejecución específico de C++ a través de
APP_STL
.
- 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_FEATURES
como'exceptions'
,'rtti'
o ambos enApplication.mk
. Consultadocs/APPLICATION-MK.html
para obtener más información.
- Habilita excepciones o RTTI explícitamente en tus módulos o
ndk-gdb
ahora funciona correctamente cuando tu aplicación tiene servicios privados que se ejecutan en procesos independientes. Depura el proceso principal de la aplicación, en lugar del primer proceso indicado 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_MODE
y compilaba ciertos archivos de origen (pero no todos) con instrucciones de 32 bits. STLport
: Actualiza las fuentes para que coincidan con la versión de la plataforma de Android. Esta actualización corrige algunos errores menores:- Se corrigió la instanciación de una clase incompleta.
- Se corrigió el error ortográfico menor "== "/"=".
- Se usó
memmove
en lugar dememcpy
enstring::assign
. - Se agregó un mejor control de
IsNANorINF
,IsINF
,IsNegNAN
, etc.
Para obtener detalles completos, consulta el registro de confirmaciones.
STLport
: Se quitaron 5 inicializadores estáticos innecesarios de la biblioteca.- Las bibliotecas de libstdc++ de GNU para armeabi-v7a se compilaron erróneamente para armeabi. Este cambio no tuvo ningún impacto en la corrección, pero el uso de la ABI correcta debería proporcionar un rendimiento ligeramente mejor.
- Se actualizó la biblioteca de ayuda
cpu-features
para informar tres características opcionales de CPU x86 (SSSE3
,MOVBE
yPOPCNT
). Consultadocs/CPU-FEATURES.html
para obtener más información. - Se actualizó
docs/NDK-BUILD.html
para que mencioneNDK_APPLICATION_MK
en lugar deNDK_APP_APPLICATION_MK
para seleccionar un archivoApplication.mk
personalizado. - Cygwin:
ndk-build
ya no crea un archivo "NUL" vacío en el directorio que se está usando cuando se lo invoca. - Cygwin: Se mejoró la detección automática de dependencias. En la versión anterior, no funcionaba correctamente en los siguientes casos:
- Cuando el prefijo de la unidad de Cygwin no era
/cygdrive
. - Cuando se usaban montajes sin unidad, por ejemplo, cuando Cygwin traducía
/home
como\\server\subdir
en lugar deC:\Some\Dir
.
- Cuando el prefijo de la unidad de Cygwin no era
- Cygwin:
ndk-build
no intenta usar las herramientas nativas de Windows en$NDK/prebuilt/windows/bin
con ciertas versiones de Cygwin y/o GNU Make.
- 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.html
y http://www.khronos.org/openmax/. - Se actualizó la API de audio nativa basada en el estándar OpenSL ES 1.0.1 de Khronos Group. Con la API nivel 14, ahora puedes decodificar audio comprimido (por ejemplo, MP3, AAC, Vorbis) a PCM. Para obtener más información, consulta
docs/opensles/index.html
y http://www.khronos.org/opensles/.
- Se agregó 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_CCACHE
comoccache
(o la ruta de acceso a tu objeto binarioccache
). Cuando se declara, el sistema de compilación del NDK utiliza automáticamente CCache al momento de compilar cualquier archivo fuente. Por ejemplo:export NDK_CCACHE=ccache
.Nota: CCache no está incluido en la versión del NDK, por lo que debes instalarlo para poder usarlo. Para obtener más información sobre CCache, visita http://ccache.samba.org.
- Se agregó compatibilidad con la configuración de
APP_ABI
aall
para que puedas indicar que deseas compilar tus módulos del NDK para todas las ABIs compatibles con tu versión específica del NDK. Esto significa que, en esta versión, estas dos líneas enApplication.mk
son equivalentes:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
.Esto también funciona si defines
APP_ABI
cuando llamas andk-build
desde la línea de comandos, que es una forma rápida de comprobar que tu proyecto se compile para todas las ABIs compatibles sin cambiar elApplication.mk file
del proyecto. Por ejemplo:ndk-build APP_ABI=all
- Se agregó una variable
LOCAL_CPP_FEATURES
enAndroid.mk
que te permite declarar qué características de C++ (RTTI o Excepciones) usa tu módulo. Esto garantiza que el vínculo final funcione correctamente si tienes módulos precompilados que dependen de estas funciones. Consultadocs/ANDROID-MK.html
ydocs/CPLUSPLUS-SUPPORT.html
para obtener más información. - Las rutas más cortas a los archivos fuente y objeto que se utilizan en los comandos de compilación. Cuando se invoca
$NDK/ndk-build
desde la ruta de acceso de tu proyecto, las rutas a los archivos fuente, objeto y binarios que se pasan a los comandos de compilación ahora son significativamente más cortas, ya que se pasan en relación con el directorio actual. Esto es útil cuando se crean proyectos con muchos archivos de origen, para evitar límites en la longitud máxima de la línea de comandos admitida por el sistema operativo del host. El comportamiento no cambia si invocasndk-build
desde un subdirectorio del árbol de tu proyecto ni si definesNDK_PROJECT_PATH
para 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.cmd
desde la línea de comando de la ruta de tu proyecto. La secuencia de comandos toma exactamente los mismos argumentos que la secuencia de comandosndk-build
original. El paquete del NDK de Windows viene con sus propios binarios predefinidos para GNU Make, Awk y otras herramientas requeridas por la compilación. No deberías necesitar instalar nada más para obtener un sistema de compilación que funcione correctamente.Importante:
ndk-gdb
no funciona en Windows, por lo que aún necesitas Cygwin para realizar depuraciones.Esta función todavía es experimental, así que no dudes en probarla y en informarnos los problemas en esta base de datos pública de errores o en el foro público. Todas las muestras y pruebas unitarias enviadas con el NDK se compilan con éxito usando esta función.
- Correcciones de errores importantes
-
- Las bibliotecas compartidas importadas ahora se instalan de forma predeterminada en la ubicación de instalación de destino (
libs/<abi>
) siAPP_MODULES
no está definido enApplication.mk
. Por ejemplo, si un módulo de nivel superiorfoo
importa un módulobar
, tantolibfoo.so
comolibbar.so
se copian en la ubicación de instalación. Anteriormente, solo se copiabalibfoo.so
, a menos que también incluyerasbar
en tuAPP_MODULES
. Si definesAPP_MODULES
explícitamente, el comportamiento no cambia. ndk-gdb
ahora funciona correctamente para actividades con varias categorías en sus filtros de intent PRINCIPALES.- Las importaciones de bibliotecas estáticas ahora son propiamente transitivas. Por ejemplo, si un módulo de nivel superior
foo
importa la biblioteca estáticabar
que importa la biblioteca estáticazoo
,libfoo.so
se vinculará ahora conlibbar.a
ylibzoo.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.html
actualizado. - Se agregó un nuevo tiempo de ejecución de compatibilidad de C++, llamado
gnustl_shared
, que corresponde a la versión de biblioteca compartida de GNU libstdc++ v3 (licencia GPLv3). Busca más información 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.cpp
ybar.cxx
como fuentes de C++, declara lo siguiente:LOCAL_CPP_EXTENSION := .cpp .cxx
. - Se quitaron muchos símbolos exportados no deseados de las bibliotecas de sistema compartidas de tiempo de vínculo proporcionadas por el NDK. Esto garantiza que el código generado con la cadena de herramientas independiente no corre el riesgo de depender accidentalmente de un símbolo ABI no estable (por ejemplo, cualquier símbolo libgcc.a que cambie cada vez que se modifica la cadena de herramientas usada para compilar la plataforma).
- Se actualizaron los encabezados EGL y OpenGLES Khronos para que admitan más extensiones. Ten en cuenta que esto hace que no se cambien las ABI del NDK para las bibliotecas correspondientes, ya que la aplicación cliente debe probar cada extensión en tiempo de ejecución.
Las extensiones disponibles dependen del dispositivo y de los controladores de la GPU, no de la versión de la plataforma en la que se ejecuta el dispositivo. Los cambios en el encabezado simplemente agregan nuevas constantes y tipos para facilitar el uso de las extensiones cuando se prueban con
eglGetProcAddress()
oglGetProcAddress()
. La siguiente lista describe las nuevas extensiones admitidas:- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
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/include
para compilaciones de x86. Para obtener más información, consulta este error. - Se corrigieron las definiciones de
ptrdiff_t
ysize_t
en 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.html
en el paquete del NDK.De forma predeterminada, se genera el código para los dispositivos basados en ARM, pero puedes agregar x86 a tu definición
APP_ABI
del archivoApplication.mk
para compilarlo para plataformas de x86. Por ejemplo, la siguiente línea instruye andk-build
para que compile tu código para tres ABI distintas:APP_ABI := armeabi armeabi-v7a x86
A menos que dependas de fuentes de ensamblado basadas en ARM, no deberías tener que tocar los archivos
Android.mk
para compilar el código máquina de x86. - Puedes compilar una cadena de herramientas independiente de x86 utilizando la opción
--toolchain=x86-4.4.3
cuando llames amake-standalone-toolchain.sh
. Consultadocs/STANDALONE-TOOLCHAIN.html
para obtener más información. - La nueva herramienta
ndk-stack
permite traducir seguimientos de pila delogcat
que genera el código nativo. La herramienta traduce las direcciones de instrucción a un formato legible que contiene elementos como la función, el archivo de origen y el número de línea correspondiente a cada marco de pila. Para obtener más información y un ejemplo de uso, 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.0
de 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_LIBRARIES
funcionara 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_static
fallaba cuando se ejecutaba en versiones de plataforma anteriores a la API nivel 8 (Android 2.2). ndk-gdb
: Se corrigió un error que causaba una falla de segmentación cuando se depuraban dispositivos Android 3.0 o más recientes.<android/input.h>
: Dos funciones que se agregaron en la API nivel 9 (Android 2.3) eran incorrectas y ya están corregidas. Aunque esto rompe la API de origen, la interfaz binaria con el sistema no cambia. A las funciones incorrectas les faltaba un pará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 el nivel de API 9 (Android 2.3) para exponer correctamente en el momento del vínculo las nuevas funciones que se añadieron en ese nivel de la API (por ejemplo,
pthread_rwlock_init
).
- Correcciones y mejoras menores:
-
- Los archivos de objetos ahora están siempre vinculados en el orden en que aparecen en
LOCAL_SRC_FILES
. Este no era el caso anterior porque los archivos estaban agrupados por extensiones de origen. - Cuando
import-module
falla, ahora imprime la lista de directorios que se buscaron. Esto es útil para comprobar que la definiciónNDK_MODULE_PATH
usada por el sistema de compilación sea correcta. - Cuando
import-module
se realiza correctamente, ahora imprime el directorio donde se encontró el módulo en el registro (visible 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 shell
y mejora de los mensajes de error.<pthread.h>
: Se corrigió la definición dePTHREAD_RWLOCK_INITIALIZER
para la API nivel 9 (Android 2.3) y las versiones superiores.- Se corrigió un problema por el que un módulo podía importarse a sí mismo, lo que daba como resultado un bucle infinito en GNU Make.
- Se corrigió un error que causaba que la compilación fallara si
LOCAL_ARM_NEON
estaba configurado como verdadero (error ortográfico enbuild/core/build-binary.mk
). - Se corrigió un error que impedía la compilación de los archivos de ensamblado de
.s
(los archivos.S
eran correctos).
- 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++.
- Se corrigieron los siguientes errores
ndk-build
:- Un error que creó archivos de dependencia inconsistentes cuando se produjo un error de compilación en Windows. Esto impidió una compilación adecuada después de que el error fuera corregido en el código fuente.
- Un error específico de Cygwin en el que el uso de rutas muy cortas para la instalación de Android NDK o la ruta del proyecto llevó a la generación de archivos de dependencias no válidos. Esto hizo que no se pudieran llevar a cabo compilaciones incrementales.
- Un error ortográfico que impidió que la biblioteca de cpufeatures funcionara correctamente con la nueva cadena de herramientas del NDK.
- Las compilaciones en Cygwin son más rápidas, ya que evitan llamadas a
cygpath -m
desde GNU Make para cada archivo fuente u objeto, lo que causaba problemas con árboles fuente muy grandes. En caso de que esto no funcione correctamente, defineNDK_USE_CYGPATH=1
en 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_PATH
funcionara correctamente cuando contenía varios directorios separados por dos puntos. - La secuencia de comandos
prebuilt-common.sh
contiene correcciones para comprobar si el compilador tiene código máquina generado de 64 bits, en lugar de depender de la etiqueta host, que permite a la cadena de herramientas de 32 bits recompilar correctamente en Snow Leopard. La cadena de herramientas recompila secuencias de comandos que ahora también admiten el uso de un conjunto de host de 32 bits. - Se agregó a
<netinet/in.h>
una declaración faltante paraINET_ADDRSTRLEN
. - Se agregaron las declaraciones faltantes para
IN6_IS_ADDR_MC_NODELOCAL
yIN6_IS_ADDR_MC_GLOBAL
a<netinet/in6.h>
. - Se reemplazó "asm" por "__asm__" en
<asm/byteorder.h>
para permitir la compilación con-std=c99
.
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-plasma
ynative-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 ABIarmeabi
existente para que incluya estas extensiones de conjunto de instrucciones de CPU:- Instrucciones de Thumb-2
- Instrucciones de FPU de hardware VFP (VFPv3-D16)
- Compatibilidad opcional para ARM Advanced SIMD (NEON) GCC intrínseco y VFPv3-D32. Compatible con dispositivos como Verizon Droid de Motorola, Google Nexus One y otros.
- Se agrega una nueva biblioteca estática
cpufeatures
(con fuentes) que le permite a tu aplicación detectar las características de la CPU del dispositivo host en tiempo de ejecución. Específicamente, las aplicaciones pueden comprobar la compatibilidad con ARMv7-A, así como con VFPv3-D32 y NEON, y luego proporcionar rutas de código separadas según sea necesario. - Se agrega una aplicación de muestra,
hello-neon
, que ilustra el uso de la bibliotecacpufeatures
para comprobar las características de la CPU y luego proporciona una ruta de código optimizada usando instrucciones de NEON si la CPU lo admite. - Te permite generar código máquina para uno o ambos conjuntos de instrucciones admitidos por el NDK. Por ejemplo, puedes compilar para las arquitecturas ARMv5 y ARMv7-A al mismo tiempo y tener todo almacenado en la versión final
.apk
de tu aplicación. - Para garantizar que las aplicaciones estén disponibles para los usuarios solo si sus dispositivos son capaces de ejecutarlas, Google Play filtra las aplicaciones basándose en la información del conjunto de instrucciones que se incluye en ella. No es necesario que realices ninguna acción para habilitar el filtrado. Además, el propio sistema Android también revisa tu aplicación en el momento de la instalación y permite que esta continúe solo si proporciona una biblioteca compilada para la arquitectura de la CPU del dispositivo.
- Se agrega compatibilidad con Android 2.2, incluida una nueva API estable para acceder a los búferes de píxeles de los objetos
Bitmap
a partir del código nativo.
- 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.