Histórico de revisão do NDK

Esta página fornece informações sobre mudanças em todas as versões estáveis lançadas do NDK. Para fazer o download da versão estável mais recente do NDK ou de qualquer versão Beta disponível no momento, consulte a página Downloads do NDK.

Consulte o grupo do Google android-ndk-announce para ter informações mais completas e inscreva-se para receber anúncios de lançamento.

LTS do Android NDK r27 (julho de 2024)

Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis neste link.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis neste link.
Anúncios
  • Não há mais suporte para o KitKat (APIs 19 e 20).
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis neste link.
Anúncios
  • Inclui APIs do Android 13.
  • O LLVM foi atualizado para clang-r450784d com base no desenvolvimento do LLVM 14.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis neste link.
Anúncios
  • O GNU Assembler (GAS) foi removido. Se você estiver criando com -fno-integrated-as, vai ser necessário remover essa sinalização. Consulte Notas de migração do Clang para orientações sobre como tornar a montagem compatível com o LLVM.
  • O GDB foi removido. Use o LLDB. O ndk-gdb usa o LLDB por padrão, e o Android Studio sempre ofereceu suporte ao LLDB.
  • Não há mais suporte para o Jelly Bean (APIs 16, 17 e 18). O SO mínimo com suporte ao NDK é o KitKat (nível 19 da API).
  • Não há mais suporte para dispositivos não Neon. Um número muito pequeno de dispositivos mais antigos não oferece suporte ao Neon, então a maioria dos apps não vai ser afetada, exceto pela melhoria de desempenho.
  • O suporte ao build do RenderScript foi removido. O RenderScript foi descontinuado no Android 12. Se você não concluiu a migração dos apps do RenderScript, use o LTS do NDK r23.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • Os pacote GNU binutils, exceto o GNU Assembler (GAS), foi removido. O GAS será removido na próxima versão. Se você está criando com -fno-integrated-as, registre bugs caso algo esteja impedindo que você remova essa sinalização.
  • O suporte ao GDB foi encerrado. O GDB será removido da próxima versão. Use o LLDB. O ndk-gdb usa o LLDB por padrão.
  • O NDK r23 é a última versão compatível com sistemas não Neon. Do NDK r24 em diante, as bibliotecas armeabi-v7a no sysroot vão ser criadas com o Neon. Um número muito pequeno de dispositivos mais antigos não é compatível com o Neon, então a maioria dos apps não será afetada, exceto pela melhoria de desempenho.
  • O Jelly Bean (APIs 16, 17 e 18) não será compatível com a próxima versão do NDK. O SO mínimo com suporte ao NDK r24 vai ser o KitKat (nível 19 da API).
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • O GNU binutils teve o uso suspenso e será removido em uma próxima versão do NDK. O conversor GNU (as) faz parte disso. Se você estiver criando com -fno-integrated-as, registre bugs caso algo esteja impedindo que você remova essa sinalização. Se você estiver usando as diretamente, use clang.
  • O LLD (link em inglês) agora é o vinculador padrão. O ndk-build e nosso arquivo de conjunto de ferramentas do CMake também migraram para usar llvm-ar e llvm-strip.
  • O ndk-gdb agora usa o lldb como o depurador. O gdb teve o uso suspenso e será removido em uma versão futura. Para continuar usando o gdb, use a opção --no-lldb. Mas registre um bug (link em inglês) explicando por que o lldb não podia ser usado.
  • Agora a compatibilidade com std::filesystem está inclusa. Há dois problemas conhecidos:
    • Problema 1258 (link em inglês): o std::filesystem::perm_options::nofollow pode não ser honrado em dispositivos antigos.
    • Problema 1260 (link em inglês): o std::filesystem::canonical terá êxito indevidamente ao receber um caminho inexistente em dispositivos antigos.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • O Windows de 32 bits não é mais compatível. Isso não afeta a grande maioria dos usuários. Se você ainda precisa criar apps NDK com versões de 32 bits do Windows, continue usando o NDK r20.

    Para ver mais informações sobre essa mudança nas ferramentas para desenvolvedores Android, consulte a postagem do blog (em inglês) sobre o tópico.

  • O LLD (link em inglês) já está disponível para testes. O AOSP passou a usar o LLD por padrão, o que também ocorrerá com o NDK (cronograma desconhecido). Teste o LLD no seu app transmitindo -fuse-ld=lld durante a vinculação. Observe que o Problema 843 (link em inglês) afetará builds que usam o LLD com binutils strip e objcopy, e não com llvm-strip e llvm-objcopy.
  • Os caminhos de instalação do conjunto de ferramentas legado serão removidos nas próximas versões. Esses caminhos estão obsoletos desde o NDK r19 e ocupam um espaço considerável no NDK. Os caminhos que estão sendo removidos são:
    • platforms
    • sources/cxx-stl
    • sysroot
    • toolchains (exceto toolchains/llvm).
    Em geral, essa mudança só afeta mantenedores de sistema de compilação ou quem usa sistemas de compilação que não estão atualizados. Os usuários do ndk-build e do conjunto de ferramentas CMake não são afetados, assim como os usuários de make_standalone_toolchain.py, embora esse script não seja necessário desde a r19. Para ver mais informações sobre como migrar do layout de conjunto de ferramentas legado, consulte o Guia de mantenedores do sistema de compilação da versão do NDK que você está usando.
  • A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
  • Um pacote de apps para macOS assinado e autenticado está disponível para download na nossa wiki e no nosso site. Observe que, como apenas os pacotes podem usar RPATHs e transmitir a autenticação, o pacote NDK tradicional para macOS não pode ser autenticado. O SDK vai continuar usando o pacote tradicional, uma vez que o pacote de app exige mudanças de layout que o tornarão incompatível com o Android Studio. O NDK não é colocado em quarentena quando o download é feito pelo SDK Manager, por isso, ele é permitido pelo Gatekeeper atualmente. No momento, o SDK Manager é a maneira mais confiável de instalar o NDK para macOS.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • O LLD (link em inglês) já está disponível para testes. O AOSP está mudando para o LLD por padrão, o que também ocorrerá com o NDK (cronograma desconhecido). Teste o LLD no seu app transmitindo -fuse-ld=lld durante a vinculação.
  • A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
  • APIs do Android Q adicionadas.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • Os desenvolvedores precisam começar a testar os apps com o LLD (link em inglês). O AOSP passou a usar o LLD por padrão, e o NDK o usará por padrão na próxima versão. O BFD e o Gold serão removidos assim que o LLD passar por um ciclo de versão sem problemas significativos não resolvidos (estima-se que na versão r21). Teste o LLD no seu app transmitindo o código -fuse-ld=lld na vinculação. Observação: no momento, o lld não é compatível com símbolos compactados no Windows Problema 888 (link em inglês). O Clang também não pode gerar símbolos compactados no Windows. Isso pode ser um problema ao usar artefatos compilados no Darwin ou Linux.
  • A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
  • Problema 780 (link em inglês): os conjuntos de ferramentas autônomos agora são desnecessários. Clang, binutils, o sysroot e outras partes do conjunto de ferramentas agora são instalados em $NDK/toolchains/llvm/prebuilt/<host-tag>, e o Clang os encontrará automaticamente. Em vez de criar um conjunto de dados conjunto de ferramentas para ARM da API 26, invoque o compilador diretamente na o NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    Na versão r19, o conjunto de ferramentas também é instalado no caminho antigo para dar ao build uma chance de se adaptar ao novo layout. Os caminhos antigos serão removidos na versão r20. O script make_standalone_toolchain.py não será removida. O script agora é desnecessário e emitirá um aviso com as informações acima, mas será mantido para preservar os fluxos de trabalho existentes. Se você utiliza o ndk-build, o CMake ou um conjunto de ferramentas autônomo, provavelmente não haverá nenhuma alteração no seu fluxo de trabalho. Essa alteração é significativa para os mantenedores de sistemas de criação de terceiros, que agora poderão excluir alguns códigos específicos do Android. Para mais informações, consulte a Crie Sistema de mantenedores de sistemas (em inglês).
  • O ndk-depends foi removido. Acreditamos que o ReLinker é uma solução melhor para problemas de carregamento de bibliotecas nativas em versões antigas do Android.
  • Problema 862 (link em inglês): os scripts do wrapper do GCC que eram redirecionados para o Clang foram removidos, porque não são funcionais o suficiente para serem substitutos.
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • O GCC foi removido.
  • O LLD (link em inglês) já está disponível para testes. O AOSP está mudando para o LLD por padrão, o que também ocorrerá com o NDK (cronograma desconhecido). Teste o LLD no seu app transmitindo -fuse-ld=lld durante a vinculação.
  • gnustl, gabi++ e stlport foram removidos.
  • O suporte para ICS (android-14 e android-15) foi removido. Os apps que usam executáveis não precisam mais fornecer um PIE e um não PIE.
  • A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • O GCC não é mais compatível. O recurso será removido na versão r18 do NDK.
  • Agora, o libc++ é a STL padrão do CMake e dos conjuntos de ferramentas autônomos. Se você selecionar manualmente uma STL diferente, recomendamos o uso de libc++. O ndk-build ainda usa "nenhuma STL" como padrão. Para ver mais detalhes, consulte esta postagem do blog (em inglês).
  • gnustl e stlport estão obsoletos e serão removidos na versão r18 do NDK.
  • A compatibilidade com ARMv5 (armeabi), MIPS e MIPS64 foi removida. A tentativa de criar qualquer uma dessas ABIs resultará em um erro.
  • A compatibilidade com ICS (android-14 e android-15) será removida na versão r18.
  • A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • Os cabeçalhos descontinuados foram removidos. Os Unified Headers agora são simplesmente "The Headers". Para ver dicas sobre migração, leia Unified Headers Migration Notes (link em inglês).
  • O GCC não é mais compatível. O recurso ainda não será removido do NDK, mas não recebe mais retrocompatibilidades. Ele não pode ser removido até que a libc ++ esteja estável o suficiente para ser usada como padrão. Isso ocorre porque algumas partes do gnustl ainda são incompatíveis com o Clang. A remoção ocorrerá quando as outras STLs forem excluídas na versão r18.
  • libc++ está fora da versão Beta e agora é a STL preferencial no NDK. A partir da versão r17, o libc++ é a STL padrão do CMake e dos conjuntos de ferramentas autônomos. Se você selecionar manualmente uma STL diferente, recomendamos o uso de libc++. Para ver mais detalhes, consulte esta postagem do blog (em inglês).
  • O suporte a ARM5 (armeabi), MIPS e MIPS64 foi descontinuado. Essas arquiteturas não serão mais criadas por padrão com o ndk-build. No entanto, ainda poderão ser geradas se forem nomeadas explicitamente e serão incluídas por "all", "all32" e "all64". A compatibilidade com cada uma delas será removida na versão r17. O CMake e o ndk-build emitirão um aviso se você segmentar qualquer uma dessas ABIs.
APIs

Foram adicionadas APIs nativas para o Android 8.1. Para saber mais sobre essas APIs, consulte a visão geral de APIs nativas.

Para ver mais informações sobre as novidades e mudanças dessa versão, consulte este registro de mudanças.

Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • Os cabeçalhos unificados são ativados padrão. Para saber como usar esse recurso, consulte Unified Headers (link em inglês).
  • Observação: os cabeçalhos obsoletos serão removidos na próxima versão. Se você tiver problemas com esses cabeçalhos, registre um bug (link em inglês).

    Para ver dicas sobre migração, leia Unified Headers Migration Notes (link em inglês).

  • O GCC não é mais compatível. O recurso ainda não foi removido do NDK, mas não recebe mais retrocompatibilidades. Não é possível fazer essa remoção até que libc ++ esteja estável o suficiente para ser usada como padrão. Isso ocorre porque algumas partes do gnustl ainda são incompatíveis com o Clang.
  • O Android 2.3 (android-9) não é mais compatível. Agora, o nível mínimo de segmentação da API no NDK é o Android 4.0 (android-14). A android-14 será usada mesmo se APP_PLATFORM estiver definida para uma versão anterior a essa.
  • Agora, o CMake no NDK tem suporte à criação do código Assembly escrito em YASM para execução em arquiteturas x86 e x86-64. Para saber mais, consulte Criação de código Assembly.
APIs

Foram adicionadas APIs nativas para o Android 8.0. Para saber mais sobre essas APIs, consulte a visão geral de APIs nativas.

Para ver mais informações sobre as novidades e mudanças dessa versão, consulte este registro de mudanças.

Registro de mudanças (link em inglês)
Downloads
  • Os downloads desta versão estão disponíveis aqui.
Anúncios
  • Cabeçalhos unificados: esta versão exibe cabeçalhos que são sincronizados e mantidos sempre atualizados e ajustados à plataforma Android. Agora, correções de bugs somente de cabeçalhos afetam todos os níveis de APIs. A inclusão dos cabeçalhos unificados corrige inconsistências em versões anteriores do NDK, como as listadas a seguir:
    • Cabeçalhos em M e N eram para L.
    • As declarações de função nos cabeçalhos não correspondiam corretamente aos níveis da plataforma. Os cabeçalhos declaravam funções inexistentes ou não indicavam as funções disponíveis.
    • Vários dos níveis de API antigos tinham constantes ausentes ou incorretas nos níveis de API mais recentes.

    Esses novos cabeçalhos unificados não estão ativados por padrão. Para saber como ativar esse recurso, veja Unified Headers (link em inglês).

  • GCC descontinuado: esta versão encerra o suporte ativo ao GCC. O GCC ainda não foi removido do NDK, mas não receberá mais retrocompatibilidades. O GCC não será totalmente removido até que a libc++ esteja estável o suficiente para ser usada como padrão. Isso ocorre porque algumas partes do gnustl ainda são incompatíveis com o Clang.

Para ver mais informações sobre as novidades e mudanças dessa versão, consulte este registro de mudanças.

Downloads
  • Os downloads desta versão estão arquivados aqui.
Anúncios
  • O GCC não é mais compatível. O recurso ainda não será removido do NDK, mas não recebe mais retrocompatibilidades. Ele não pode ser removido até que a libc ++ esteja estável o suficiente para ser usada como padrão. Isso ocorre porque algumas partes do gnustl ainda são incompatíveis com o Clang. O GCC provavelmente será removido depois dessa etapa.
  • Foi adicionado o simpleperf, um CPU Profiler para Android.
r13b
NDK
  • O código NDK_TOOLCHAIN_VERSION é usado no Clang por padrão.
  • A libc++ foi atualizada para r263688.
  • A redefinimos para um upstream quase novo. Isso deve remover vários bugs, mas ainda precisamos limpar o libandroid_support antes de recomendá-lo como padrão.
  • make-standalone-toolchain.sh agora é apenas um wrapper em torno da versão Python da ferramenta. Existem algumas diferenças de comportamento. Veja a mensagem de confirmação para saber mais detalhes.
  • Algumas bibliotecas para ABIs incompatíveis foram removidas (mips64r2, mips32r6, mips32r2 e x32). Ainda pode haver alguns atrasos.
  • Foram resolvidos os problemas com crtbegin_static.o que resultaram na ausência de atexit no momento da vinculação ao criar um executável estático para o ARM android-21 +: problema 132 (link em inglês).
  • Foi adicionado o arquivo do conjunto de ferramentas do CMake em build/cmake/android.toolchain.cmake.
Problemas conhecidos
  • Isso não serve como uma lista abrangente de todos os bugs pendentes.
  • Os conjuntos de ferramentas autônomos que usam a libc++ e o GCC não funcionam. O problema parece ser um bug no GCC. Veja a mensagem de confirmação para saber mais detalhes.
  • Cabeçalhos biônicos e bibliotecas para Marshmallow e N ainda não estão expostos, apesar da presença do android-24. Essas plataformas ainda apresentam os cabeçalhos e bibliotecas do Lollipop (não uma regressão da r11).
  • Ferramentas de RenderScript não estão presentes (não uma regressão da r11): problema 7 (link em inglês).
Downloads
  • Os downloads desta versão estão arquivados aqui.
Anúncios
  • O comando ndk-build assume o padrão de utilização do Clang na r13. Removeremos o GCC em uma versão subsequente.
  • O script make-standalone-toolchain.sh será removido na r13. Verifique se make_standalone_toolchain.py atende às suas necessidades.
  • Denuncie problemas ao GitHub (link em inglês).
r12b
  • Corrigimos o ndk-gdb.py (problema 118, link em inglês).
  • Atualizamos o NdkCameraMetadataTags.h para que não contenha mais um valor de tipo enumerado inválido.
  • Foi corrigido um bug no ndk-build que resultava em avisos errados para bibliotecas estáticas usando libc++. Para saber mais sobre essa mudança, consulte os comentários aqui.
  • Os cabeçalhos OpenSLES foram atualizados para o android-24.
NDK
  • Removemos a compatibilidade com a ABI armeabi-v7a-hard. Para saber mais, consulte esta explicação.
  • Todos os sysroots foram removidos dos níveis de plataforma pré-GB. Descartamos a compatibilidade com eles na r11, mas não os removemos.
  • A manipulação de exceção ao usar c++_shared no ARM32 funciona na maioria das vezes. Agora, o desbobinador será vinculado a cada objeto vinculado em vez da própria libc++. Para saber mais sobre essa manipulação de exceção, consulte Problemas conhecidos.
  • Os sinalizadores padrão do compilador foram reduzidos. (Problema 27).
  • Adição de uma implementação Python de conjuntos de ferramentas autônomos: build/tools/make_standalone_toolchain.py.
    • Usuários do Windows não precisam mais do Cygwin para usar esse recurso.
    • Removeremos a versão do bash na r13, a fim de testar a nova.
  • -fno-limit-debug-info foi ativado por padrão para builds de depuração do Clang. Essa mudança deve aprimorar a capacidade de depuração com o LLDB.
  • --build-id está ativado por padrão.
    • Agora, o ID do build será mostrado em relatórios de falhas nativas para que você possa identificar com facilidade qual versão do seu código estava em execução.
  • NDK_USE_CYGPATH não deve mais causar problemas com libgcc. (problema com o Android 195486, link em inglês).
  • As opções -Wl, --warn-shared-textrel e -Wl,--fatal-warnings agora estão ativadas por padrão. Se você compartilhou realocações de texto, seu app não poderá ser carregado no Android 6.0 (API de nível 23) ou posterior. As realocações de texto nunca foram permitidas para apps de 64 bits.
  • Os cabeçalhos pré-compilados devem funcionar melhor agora. (problema 14 e problema 16, links em inglês).
  • A bibliotecas STL ARM (não miniaturas) inacessíveis foram removidas.
  • Adição de compatibilidade com Vulkan ao android-24.
  • Adição da API Choreographer ao android-24.
  • Adição das APIs libcamera2 para dispositivos com INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ou mais recente. Para saber mais, consulte CameraCharacteristics.
Clang
  • O Clang foi atualizado para 3.8svn (r256229, build 2812033).
    • Os executáveis clang.exe e clang++.exe no pacote do Windows de 32 bits são de 64 bits. O executável de 32 bits é chamado de clang_32.exe.
  • __thread deve funcionar bem desta vez.
GCC
  • Sincronizado com o ChromeOS GCC @ google/gcc-4_9 r227810.
  • Patch de limpeza de cobertura da ToT (r231296) que passou por backport.
  • Correção de libatomic a fim de não usar ifuncs (problema 31, link em inglês).
Binutils
  • Mensagens de informação “Errata 843419 encontrada e corrigida” silenciadas.
  • Opção --long-plt introduzida para corrigir erro interno do vinculador que ocorre ao vincular binários arm32 gigantes.
  • Correção de esboços de tempo de execução errados para AArch64. Isso estava causando o cálculo incorreto de endereços de salto para DSOs muito grandes.
  • Introdução da opção padrão --no-apply-dynamic para contornar um bug de vinculador dinâmico para versões anteriores do Android.
  • NDK r11 KI para dynamic_cast não funciona com Clang. Corrigimos x86, stlport_static e otimização.
GDB
  • Atualizado para GDB 7.11. Para saber mais, consulte a página GDB News (link em inglês).
  • Algumas correções de bugs para ndk-gdb.py.
Problemas conhecidos
  • x86 ASAN ainda não funciona. Para saber mais, consulte a discussão nesta lista de alterações (link em inglês).
  • A exceção liberada com c++_shared ainda não funciona para ARM no Android 2.3 (API de nível 9) ou no Android 4.0 (API de nível 14).
  • Cabeçalhos e bibliotecas Bionic para Android 6.0 (API de nível 23) e Android 7.0 (API de nível 24) ainda não foram expostos apesar da presença do android-24. Essas plataformas ainda apresentam os cabeçalhos e bibliotecas do Android 5.0 (API nível 21) (não uma regressão da r11).
  • Ferramentas de RenderScript não estão presentes (não é uma regressão da r11). (Problema 7, link em inglês)
  • Este registro de mudanças não serve como uma lista completa de todos os bugs de destaque.
Downloads
  • Os downloads desta versão estão arquivados aqui.
Anúncios
  • O comando ndk-build usará o Clang por padrão em uma próxima versão. O GCC será removido em uma próxima versão.
  • O script make-standalone-toolchain.sh será removido em uma versão futura. Caso você use esse script, migre para make_standalone_toolchain.py assim que possível.
NDK
  • A compatibilidade com ABI armeabi-v7a-hard foi removida. Veja a explicação na documentação.
  • Todos os sysroots foram removidos dos níveis de plataforma anteriores ao Android 2.3 (API de nível 9). Descartamos a compatibilidade com eles na r11 do NDK, mas não os removemos.
  • A manipulação de exceção foi atualizada ao usar c++_shared em ARM32 e funciona na maioria das vezes (consulte Problemas conhecidos). Agora, o desbobinador é vinculado a cada objeto vinculado em vez da própria libc++.
  • Os sinalizadores padrão do compilador foram reduzidos (Problema 27 do NDK, link em inglês). Você pode ver detalhes dessa atualização em Mudança 207721 (link em inglês).
  • Adição de uma implementação Python de conjuntos de ferramentas autônomos em build/tools/make_standalone_toolchain.py. No Windows, não é mais preciso acionar o Cygwin para usar esse recurso. Removeremos a versão do bash em uma próxima versão. Por isso, teste a nova agora.
  • As criações de depuração do Clang foram configuradas para que a opção -fno-limit-debug-info seja ativada por padrão. Essa mudança permite uma melhor depuração com LLDB.
  • A opção --build-id foi ativada como padrão. Isso gerará a exibição de um identificador em relatórios de falhas nativas para que você possa ver com facilidade qual versão do seu código estava em execução.
  • O erro com NDK_USE_CYGPATH foi corrigido e não causará mais problemas com libgcc (problema 195486).
  • As opções a seguir foram ativadas por padrão: -Wl,--warn-shared-textrel e -Wl,--fatal-warnings. Se você compartilhou realocações de texto, seu app não poderá ser carregado no Android 6.0 (API de nível 23) ou posterior. As realocações de texto nunca foram permitidas para apps de 64 bits.
  • Alguns problemas foram corrigidos para o melhor funcionamento dos cabeçalhos pré-compilados (problema 14 do NDK, problema 16 do NDK, links em inglês).
  • A bibliotecas STL ARM (não miniaturas) inacessíveis foram removidas.
  • Adição de compatibilidade com Vulkan ao android-24.
  • Adição da API Choreographer ao android-24.
  • As APIs libcamera2 foram adicionadas para dispositivos compatíveis com o nível de recurso INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ou mais recente. Para ver mais informações, consulte a referência de CameraCharacteristics.
Clang
  • O Clang foi atualizado para 3.8svn (r256229, build 2812033). Os executáveis clang.exe e clang++.exe no pacote do Windows de 32 bits são de 64 bits. O executável de 32 bits é chamado de clang_32.exe.
  • __thread foi corrigido e funciona agora.
GCC
  • O compilador foi sincronizado com o ChromeOS GCC @ google/gcc-4_9 r227810.
  • Patch de limpeza de cobertura da ToT (r231296) que passou por backport.
  • Correção de libatomic para não usar ifuncs (problema 31 do NDK, link em inglês).
Binutils
  • As mensagens de informação “Errata 843419 encontrada e corrigida” foram silenciadas.
  • Introdução da opção --long-plt para corrigir um erro interno do vinculador que ocorre ao vincular binários arm32 gigantes.
  • Correção de esboços de tempo de execução errados para AArch64. Isso estava causando o cálculo incorreto de endereços de salto para objetos compartilhados dinamicamente (DSOs, na sigla em inglês) muito grandes.
  • Introdução da opção padrão --no-apply-dynamic para solucionar um bug de vinculação dinâmico para versões anteriores do Android.
  • Um erro conhecido da versão r11 do NDK foi corrigido, em que dynamic_cast não estava funcionando com o Clang, x86, stlport_static e otimização.
GDB
  • Atualização para versão 7.11 de GBD. Para saber mais sobre essa versão, consulte as Novidades de GDB.
  • Vários bugs no script ndk-gdb.py foram corrigidos.
Problemas conhecidos
  • No momento, o Address Sanitizer (ASAN) x86 não funciona. Para saber mais, consulte o problema 186276 (link em inglês).
  • A exceção liberada com c++_shared não funciona para ARM no Android 2.3 (API de nível 9) ou no Android 4.0 (API de nível 14).
  • Cabeçalhos e bibliotecas Bionic para Android 6.0 (API de nível 23) e posterior ainda não foram expostos apesar da presença do android-24. Essas plataformas ainda têm os cabeçalhos e bibliotecas do Android 5.0 (API de nível 21), o que é consistente com a versão r11 do NDK.
  • As ferramentas do RenderScript não estão presentes, o que é inconsistente com a versão r11 do NDK. (problema 7 do NDK, link em inglês).
  • No arquivo principal NdkCameraMetadataTags.h, o valor de tipo enumerado da tag de metadados da câmera ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP foi listado por acidente e será removido na próxima versão. Use o valor ACAMERA_STATISTICS_LENS_SHADING_MAP.
Mudanças
  • Foram aplicadas mais correções ao script ndk-gdb.py.
  • Um argumento de nome de pacote opcional foi adicionado à opção --attach do comando ndk-gdb (problema 13, link em inglês).
  • Os caminhos de conjunto de ferramentas inválidos foram corrigidos para a plataforma Windows de 32 bits (problema 45, link em inglês).
  • O caminho relativo foi corrigido para o comando ndk-which (problema 29, link em inglês).
  • O uso do Cygpath foi corrigido para o compilador de libgcc (problema 195486 do Android).
NDK
  • Anúncios importantes
    • Passamos a usar nosso rastreador de bugs com o GitHub (link em inglês).
  • Mudanças
    • ndk-gdb.py foi corrigido. O recurso tinha regredido totalmente na versão r11.
    • ndk-gdb para Mac foi corrigido.
    • Foram adicionados mais atalhos de nível superior para ferramentas de linha de comando:
      • ndk-depends.
      • ndk-gdb.
      • ndk-stack.
      • ndk-which. Este comando estava totalmente ausente das versões anteriores.
    • Os conjuntos de ferramentas autônomos foram corrigidos para libc++, em que __cxxabi_config.h estava ausente.
    • A documentação de ajuda de --toolchain foi corrigida em make-standalone-toolchain.sh.
Clang
  • Errata
    • Diferentemente do que foi informado nas notas da versão r11, __thread não funciona. Isso ocorre porque a versão do Clang que enviamos não tem uma correção de bug para compatibilidade com TLS emulado.
Clang
  • Anúncios importantes
    • Recomendamos o uso do Clang.
      • Se você tiver problemas com o Clang, informe aqui (link em inglês) os problemas específicos do Clang no NDK. Para problemas mais gerais do Clang, informe sobre os bugs seguindo as instruções exibidas nesta página (link em inglês).
    • O Clang foi atualizado para 3.8svn (r243773, build 2481030).
      • Essa versão é quase um upstream puro do Clang.
      • O pacote do NDK para download do Windows de 64 bits contém uma versão de 32 bits do Clang.
  • Adições
    • O Clang agora é compatível com o TLS emulado.
      • Agora, o compilador é compatível com __thread por meio da emulação de TLS ELF com dados específicos de thread pthread.
      • O C++11 thread_local funciona em alguns casos, mas não para dados com destruidores não triviais, porque exigem suporte da libc. Essa limitação não se aplica ao ser executada no Android 6.0 (API de nível 23) ou mais recente.
      • O TLS emulado ainda não funciona com o Aarch64 quando as variáveis TLS são acessadas de uma biblioteca compartilhada.
GCC
  • Anúncios importantes
    • Agora o GCC está obsoleto, e o Clang será usado no NDK.
    • O NDK não atualizará para 5.x nem aceitará retrocompatibilidades não críticas.
    • A manutenção de erros de compilação e do compilador interno em 4.9 será tratada caso a caso.
  • Remoções
    • O GCC 4.8 foi removido. Todos os destinos agora usam o GCC 4.9.
  • Outras mudanças
    • O google/gcc-4_9 foi sincronizado para r224707. Anteriormente, a sincronização tinha sido feita com r214835.
  • NDK
    • Anúncios importantes
      • Os exemplos não são mais incluídos no pacote do NDK. Agora, elas estão disponíveis no GitHub.
      • A documentação não está mais incluída no pacote do NDK. Em vez disso, você pode encontrá-la no site para desenvolvedores do Android.
    • Adições
      • Foi adicionada uma API nativa de rastreamento a android-23.
      • Foi adicionada uma API nativa multirrede nativa a android-23.
      • Foram ativados libc, m e dl para fornecer símbolos com versão, começando no nível 21 da API.
      • Foram adicionados cabeçalhos e a biblioteca do Vulkan à API de nível N.
    • Remoções
      • A compatibilidade com _WCHAR_IS_8BIT foi removida.
      • sed foi removido.
      • mclinker foi removido.
      • Perl foi removido.
      • Foram removidos todos os símbolos de todas as versões do NDK libc, m e dl que não são compatíveis com as versões de plataforma dessas bibliotecas.
      • A compatibilidade com mips64r2 foi parcialmente removida. O restante será removido no futuro.
    • Outras mudanças
      • Os conjuntos de ferramentas autônomos da ARM foram mudados por padrão para arm7.
        • Para restaurar o comportamento antigo, transmita a opção de especificação -target como armv5te-linux-androideabi.
      • O sistema de compilação foi alterado para usar -isystem para inclusões de plataformas.
        • Avisos causados pelo Bionic não interrompem mais a criação de apps.
      • Foi corrigida uma falha de segmentação que ocorria quando um binário gerava exceções via gabi++ (problema 179410).
      • O namespace in-line de libc++ foi mudado para std::__ndk1 para evitar problemas de ODR com libc++ da plataforma.
      • Agora, todas as bibliotecas libc++ são criadas com libc++abi.
      • Padrão APP_PLATFORM para Gingerbread.
        • A expectativa é que a compatibilidade com Froyo e os recursos mais antigos sejam descartados em uma versão futura.
    • A estrutura _Unwind_Exception de gabi++ foi atualizada para 64 bits.
    • As seguintes funcionalidades foram adicionadas ao cpufeatures:
      • Detectar SSE4.1 e SSE4.2.
      • Detectar recursos de CPU em x86_64.
    • Atualização da libc++abi para o upstream r231075.
    • Atualização de byteswap.h, endian.h, sys/procfs.h, sys/ucontext.h, sys/user.h e uchar.h da ToT Bionic.
    • sys/cdefs.h foi sincronizado em todos os níveis de API.
    • Foram corrigidos fegetenv and fesetenv para arm.
    • Foi corrigido o tamanho/alinhamento do ponteiro final de crtend_* para mips64 e x86_64.
    Binutils
    • Adições
      • Foi adicionada uma nova opção: --pic-veneer.
    • Remoções
      • O pacote Windows de 32 bits não contém mais ld.gold. Em vez disso, você pode pegar o ld.gold do pacote Windows de 64 bits.
    • Mudanças
      • A fonte binutils foi unificada entre Android e ChromiumOS. Para mais informações sobre essa mudança, veja os comentários neste link.
      • Melhor confiabilidade de Gold para aarch64. Use -fuse-ld=gold no momento da vinculação para usar Gold em vez de bfd. O padrão provavelmente mudará na próxima versão.
      • Melhor tempo de vinculação para binários gigantes no back-end do Gold ARM (até 50% de redução do tempo de vinculação para o navegador Chrome depurável).
    GDB
    • Remoções
      • O ndk-gdb foi removido para o uso de ndk-gdb.py.
    • Mudanças
      • O gdb foi atualizado para a versão 7.10.
      • O desempenho foi aprimorado.
      • As mensagem de erro foram aprimoradas.
      • Os caminhos relativos do projeto foram corrigidos.
      • Ctrl-C foi impedido de desativar o gdbserver em segundo plano.
      • O suporte a Windows foi aprimorado.
    YASM
    • Mudanças
      • O YASM foi atualizado para a versão 1.3.0.
    Problemas conhecidos
    • No momento, o x86 ASAN não funciona. Para saber mais, acompanhe a discussão neste link.
    • A combinação de Clang, x86, stlport_static e níveis de otimização superiores a -O0 gera falhas de teste com dynamic_cast. Para saber mais, veja os comentários aqui (link em inglês).
    • A manipulação de exceção geralmente falha com c++_shared no ARM32. A causa raiz é a incompatibilidade entre o desbobinador LLVM usado pelo libc++abi para ARM32 e libgcc. Esse comportamento não é uma regressão da r10e.
    Downloads
    • Os downloads desta versão estão arquivados aqui.
    Mudanças importantes:
    • Foi integrada uma solução alternativa para “Errata 843419 do Cortex-A53” no vinculador aarch64-linux-android-4.9. Para saber mais sobre isso, consulte Solução alternativa para a errata 843419 do cortex-a53.
    • O Clang 3.6 foi adicionado. O NDK_TOOLCHAIN_VERSION=clang agora escolhe essa versão do Clang por padrão.
    • O Clang 3.4 foi removido.
    • O GCC 4.6 foi removido.
    • A compatibilidade com várias linhas de execução ld.gold foi implementada em ld.gold para todas as arquiteturas. Agora, é possível fazer a vinculação com ou sem o suporte para várias linhas de execução. O padrão é fazer o processo sem esse recurso.
      • Para fazer a compilação com várias linhas de execução, use a opção --threads.
      • Para fazer a compilação sem várias linhas de execução, use a opção --no-threads.
    • Foi feito upgrade de GDB/gdbserver para 7.7 em todas as arquiteturas.
    • O pacote NDK foi removido para o Darwin de 32 bits.
    Correções importantes de bugs:
    • Foi corrigida uma falha que ocorria quando havia loops do OpenMP fora da linha de execução principal.
    • Foi corrigido um erro do compilador interno (ICE, na sigla em inglês) do GCC 4.9 que ocorria quando o usuário declarava #pragma GCC optimize ("O0"), mas tinha um nível diferente de otimização especificado na linha de comando. A opção pragma é prioritária.
    • Foi corrigido um erro que costumava gerar uma falha com a seguinte mensagem de erro:
      in add_stores, at var-tracking.c:6000
      
    • Foi implementada uma solução alternativa para um problema do Clang 3.5. Nesse erro, a autovetorização do LLVM gera llvm.cttz.v2i64(), uma instrução sem contrapartida no conjunto de instruções ARM.
    Outras correções de bugs:
    • Foram feitas as seguintes correções em cabeçalhos e bibliotecas:
      • Correção de PROPERTY_* em media/NdkMediaDrm.h.
      • Correção de sys/ucontext.h para mips64.
      • A verificação da versão do Clang foi removida para __builtin_isnan e __builtin_isinf.
      • Foram adicionados android-21/arch-mips/usr/include/asm/reg.h e android-21/arch-mips64/usr/include/asm/reg.h.
    • Foi corrigido um alerta falso de limites de matriz que o GCC 4.9 produzia para x86 e foram reativados os limites de matriz que o GCC 4.9 havia produzido para o ARM. O aviso para o ARM foi desativado antes incondicionalmente.
    • O Clang 3.5 foi corrigido em mips e mips64 para criar uma seção .gcc_except_table gravável, correspondendo ao comportamento do GCC. Essa mudança permite que você para evitar o seguinte aviso do vinculador:
      .../ld: warning: creating a DT_TEXTREL in a shared object
      
    • Ocorreu o backport de uma correção para problemas de compiler-rt que causavam falhas quando o Clang compilava para mips64. Para saber mais, consulte o problema 20098 do LLVM (link em inglês).
    • Foram corrigidas falhas do Clang 3.5 que ocorreram em comentários não ASCII (problema 81440).
    • Corrigido stlport collate::compare para retornar -1 e 1. Anteriormente, havia retornado números assinados arbitrários.
    • O ndk-gdb foi corrigido para ABIs de 64 bits (problema 118300).
    • A falha produzida pelo exemplo do HelloComputeNDK para RenderScript no Android 4.4 (API de nível 19 do Android) foi corrigida. Para saber mais, consulte esta página (link em inglês).
    • O libc++ __wrap_iter foi corrigido para GCC. Para saber mais, consulte o problema 22355 do LLVM (link em inglês).
    • O suporte para .asm foi corrigido na ABI x86_64.
    • Foi implementada uma solução alternativa para o problema de stlport do GCC 4.8 (problema 127773).
    • O separador de diretório à direita \\ foi removido do caminho do projeto no Windows (problema 160584).
    • Foi corrigido um erro de no rule to make target que ocorria na compilação de um único arquivo .c pela execução do comando ndk-build.cmd do gradle (problema 66937, link em inglês).
    • Foram adicionadas as bibliotecas libatomic.a e libgomp.a que estavam ausentes nos seguintes conjuntos de ferramentas de host:
      • aarch64-linux-android-4.9
      • mips64el-linux-android-4.9
      • mipsel-linux-android-4.9
      • x86_64-4.9
    Outras mudanças:
    • O ld.gold foi adicionado para aarch64. O vinculador padrão permanece sendo ld.bfd. Para ativar explicitamente ld.gold, adicione -fuse-ld=gold à variável LOCAL_LDFLAGS ou APP_LDFLAGS.
    • Compilação de conjuntos de ferramentas MIPS e MIPS64 com binutils-2.25, que fornece compatibilidade aprimorada com R6.
    • A opção -fstandalone-debug (informações de depuração completas) é usada por padrão no Clang.
    • O -fstack-protector foi substituído por -fstack-protector-strong para os conjuntos de ferramentas ARM, AArch64, X86 e X86_64 no GCC 4.9, Clang 3.5 e Clang 3.6.
    • Foi adicionada a alternância da linha de comando --package para ndk-gdb, permitindo que o sistema de build substitua o nome do pacote (problema 56189).
    • O -mno-ldc1-stc1 está obsoleto para MIPS. Talvez ele não funcione com as novas opções -fpxx e -mno-odd-spreg ou com o FPXX ABI.
    • Foi adicionada a detecção de MIPS MSA e R6 para cpu-features.
    Mudanças importantes:
    • O GCC 4.8 foi definido por padrão para todos ABIs de 32 bits. O GCC 4.6 está obsoleto e será removido na próxima versão. Para restaurar o comportamento anterior, adicione NDK_TOOLCHAIN_VERSION=4.6 ao ndk-build ou adicione --toolchain=arm-linux-androideabi-4.6 quando executar make-standalone-toolchain.sh na linha de comando. O GCC 4.9 permanece sendo o padrão para ABIs de 64 bits.
    • Todos os conjuntos de ferramentas x86[_64] foram impedidos de adicionar -mstackrealign por padrão. O conjunto de ferramentas do NDK supõe um alinhamento de pilha de 16 bytes. As ferramentas e opções usadas por padrão impõem essa regra. Um usuário que está escrevendo o código Assembly precisa preservar o alinhamento da pilha e garantir que outros compiladores também estejam em conformidade com essa regra (bug 38496 do GCC, link em inglês).
    • A funcionalidade Address Sanitizer foi adicionada ao suporte do Clang 3.5 para ARM e ABIS x86. Para mais informações sobre essa mudança, consulte o projeto Address Sanitizer.
    • Foi introduzido o requisito, a partir do nível 21 da API, para usar -fPIE -pie durante a criação. Nos níveis 16 e posteriores da API, o ndk-build usa PIE no processo de criação. Essa mudança tem várias implicações, que são discutidas no problema 888 do Developer Preview (link em inglês). Essas implicações não se aplicam a bibliotecas compartilhadas.
    Correções importantes de bugs:
    • Mais correções foram feitas relacionadas à Errata A53 #835769 (link em inglês) no vinculador aarch64-linux-android-4.9. Como parte disso, o GCC transmite uma nova opção, --fix-cortex-a53-835769, quando -mfix-cortex-a53-835769 (ativado por padrão) é especificado. Para mais informações, veja esta e esta mensagem binutils (links em inglês).
    • Foi documentada uma correção para um erro de libc++ sscanf/vsscanf que ocorria na API de nível 21. A correção em si foi implementada na versão r10c (problema 77988).
    • Foi corrigida uma falha de AutoFDO (-fauto-profile) que ocorria com o GCC 4.9 quando -Os era especificado (problema 77571).
    Outras correções de bugs:
    • Foram feitas as seguintes correções em cabeçalhos e bibliotecas:
      • O posix_memalign foi adicionado à API de nível 16. Também foi incluído um protótipo em stdlib.h às APIs de nível 16 a 19. (Problema 77861, link em inglês).
      • O stdatomic.h foi corrigido para que inclua <atomic> apenas para C++11.
      • Os seguintes cabeçalhos foram modificados para uso independente: sys/user.h e gl2ext.h, dlext.h, fts.h, sgidefs.h para a API de nível 21.
      • O sys/user.h foi modificado para renomear mxcsr_mask como mxcr_mask e para alterar o tipo de dados em u_ar0
      • de unsigned long para struct user_regs_struct*.
      • O tipo de valor de retorno de sysconf() foi mudado de int para long.
    • Foi corrigido o processamento de ndk-build de thumb para LOCAL_ARM_MODE. Na r10d, o ndk-build adiciona LOCAL_LDFLAGS+=-mthumb por padrão, a menos que uma das seguintes condições se aplique:
      • Você definiu LOCAL_ARM_MODE igual a arm.
      • Você está fazendo um build de depuração (com configurações como APP_OPTIM=debug e AndroidManifest.xml contendo android:debuggable="true"), em que o modo ARM é o padrão para manter a compatibilidade com os conjuntos de ferramentas anteriores (problema 74040).
    • Os LOCAL_SRC_FILES foram corrigidos no ndk-build para usar os caminhos absolutos do Windows (problema 74333).
    • O código específico de bash foi removido do ndk-gdb (problema 73338).
    • O código específico de bash foi removido de make-standalone-toolchain.sh (problema 74145).
    • Foi revisada a documentação relativa à correção das dependências transitivas de System.loadLibrary() (problema 41790).
    • Foi corrigido um problema que impedia a extração de pacotes de 64 bits no Ubuntu 14.04 e no OS X 10.10 (Yosemite) (problema 78148).
    • Foi corrigido um problema com LOCAL_PCH para melhorar a compatibilidade com Clang (problema 77575).
    • O aviso “requer pilha executável” foi esclarecido em Id.gold (problema 79115).
    Mudanças importantes:
    • Foram feitas as seguintes alterações à estrutura de download:
      • Agora, cada pacote contém cabeçalhos, bibliotecas e ferramentas de 32 e 64 bits para a respectiva plataforma.
      • As bibliotecas STL com informações de depuração não precisam mais ser transferidas por download separadamente.
    • Tudo o que era chamado anteriormente de Android-L foi mudado para a designação oficial da versão: android-21.
    • O GCC 4.9 foi atualizado criando uma nova base do branch google do repositório do GCC. As principais diferenças da versão upstream do GCC 4.9 incluem o seguinte:
      • Agora, a opção -O2 ativa a vetorização, sem loop peeling, mas com unrolling mais agressivo.
      • Melhorias no FDO e LIPO (link em inglês).
      • Para saber mais, consulte Correções importantes de bugs abaixo.

    • A compatibilidade com o Clang 3.5 foi adicionada a todos os hosts: NDK_TOOLCHAIN_VERSION=clang agora escolhe Clang 3.5. Algumas considerações:
      • O ARM e o x86 usam como padrão o assembler integrado. Se isso causar problemas, use -fno-integrated-as como uma solução alternativa.
      • O Clang 3.5 emite mais avisos para sinalizações não utilizadas, como a opção -finline-functions compatível com o GCC.
      • Ao fazer a migração de projetos usando o GCC, use -Wno-invalid-command-line-argument e -Wno-unused-command-line-argument para ignorar as sinalizações não usadas até que você possa decidir o que fazer com elas em longo prazo.

    • Agora, é possível entrar no modo de depuração de ART ao depurar um dispositivo Android 5.0 usando ART como a máquina virtual, com a especificação da opção art-on. Para mais informações, consulte prebuilt/common/gdb/common.setup no diretório que contém o NDK.
    • A compatibilidade com o Clang 3.3. foi removida.
    • O GCC 4.6 está obsoleto e pode ser removido de versões futuras.
    • O mclinker foi atualizado para 2.8 com compatibilidade com Identical Code Folding ("ICF"). Especifique o ICF usando a opção --icf.
    • A compatibilidade com arm_neon.h foi ampliada em x86 e x86_64, alcançando uma cobertura de 93% dos intrínsecos a NEON. Para saber mais sobre a compatibilidade com o NEON:
      • Acesse o Guia do Programador do NDK (docs/Programmers_Guide/html/) e veja "Architectures and CPUs > Neon".
      • Analise o exemplo hello-neon atualizado em samples/.
      • Consulte o guia da Intel para fazer a portabilidade de ARM NEON para Intel SSE (link em inglês).
    • Foi documentada a compatibilidade com _FORTIFY_SOURCE em headers/libs/android-21, que aparecia em r10 (quando android-21 ainda era chamado de Android-L), mas não tinha documentação.
    Correções importantes de bugs:
    Outras correções de bugs:
    • Foram feitas as seguintes correções em cabeçalhos e bibliotecas para android-21:
      • Foram adicionados mais códigos de teclas para TV: android/keycodes.h
      • Foram adicionadas mais constantes e seis novas funções de sensor para android/sensor.h: ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount, ASensor_getFifoReservedEventCount, ASensor_getStringType, ASensor_getReportingMode e ASensor_isWakeUpSensor.
      • Foi corrigido o stdatomic.h para melhorar a compatibilidade com GCC 4.6 e oferecer compatibilidade com o cabeçalho <atomic>.
      • Foram adicionados sys/ucontext.h e sys/user.h a todos os níveis de API. O cabeçalho signal.h agora inclui <sys/ucontext.h>. Você pode remover qualquer definição existente de struct ucontext.
      • Foi adicionado posix_memalign às APIs de nível 17, 18 e 19.
      • As seguintes funções foram adicionadas a todas as arquiteturas: android_set_abort_message, posix_fadvise, posix_fadvise64, pthread_gettid_np.
      • As permissões obrigatórias foram adicionadas ao exemplo native-media/AndroidManifest.xml (problema 106640).
      • Foram adicionados clock_nanosleep e clock_settime à API de nível 21 (problema 77372, link em inglês).
      • Os seguintes símbolos foram removidos de todas as arquiteturas: 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 e dlmalloc.
      • As seguintes funções foram removidas das arquiteturas de 64 bits: basename_r, dirname_r, __isthreaded, _flush_cache (mips64).
      • A função a seguir foi removidas das arquiteturas de 32 bits: __signalfd4.
      • O tipo de terceiro argumento foi mudado size_t para int nas seguintes funções: strtoll_l, strtoull_l, wcstoll_l e wcstoull_l.
      • As seguintes funções foram restauradas para a arquitetura de 64 bits: arc4random, arc4random_buf e arc4random_uniform.
      • O cxa_* e os operadores new e delete foram movidos de volta para libstdc++.so. Essa mudança restaura o comportamento de r9d. As versões anteriores de r10 continham arquivos marcadores de posição.
    • A compatibilidade com MXU foi restaurada em GCC 4.8 e 4.9 para mips. Essa compatibilidade não estava disponível na r10 e r10b porque essas versões do GCC foram compiladas com o binutils-2.24, que não era compatível com MXU. Agora é.
    • A --toolchain= foi corrigida em make-standalone-toolchain.sh e agora é compatível com o uso de um sufixo que especifica uma versão do Clang.
    • As funções strtod() de libc++/armeabi foram corrigidas.
    • Foram feitas correções na documentação do NDK em docs/.
    Outras mudanças:
    • Os cpu-features foram aprimorados para detectar a compatibilidade com ARMv8 para os seguintes conjuntos de instruções: AES, CRC32, SHA2, SHA1 e PMULL/PMULL2 de 64 bits (problema 106360, link em inglês).
    • O ndk-build foi modificado para usar *-gcc-ar, que está disponível no GCC 4.8, no GCC 4.9 e no Clang. O Clang usa essa especificação, em vez de *-ar. Essa configuração aprimora a compatibilidade com LTO.
    • Os cabeçalhos include-fixed/linux/a.out.h e include-fixed/linux/compiler.h foram removidos do compilador GCC (problema 73728, link em inglês).
    • Foi corrigido um problema relacionado a -flto com GCC 4.8 no Mac OS X. A mensagem de erro informava o seguinte:
    • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
      Symbol not found: _environ
      
    • Foi corrigido um erro de digitação em build-binary.mk. (problema 76992).
    Problemas conhecidos importantes:
    • Especificar -Os (-fauto-profile) no GCC4.9 pode causar falhas (problema 77571).
    Observações importantes:
    • Devido à restrição de 512 MB no tamanho do download, os itens de 32 bits a seguir não estão nos pacotes de download do NDK de 32 bits. Em vez disso, eles estão localizados nos pacotes de 64 bits.
      • Cabeçalhos do Android-L
      • GCC 4.9
    • No momento, a única a compatibilidade com RenderScript fornecida pelo NDK é para RenderScript de 32 bits com Android 4.4 (API de nível 19). Não é possível criar o HelloComputeNDK (a única amostra do Renderscript) com qualquer outra combinação de Renderscript (32 ou 64 bits) e versão do Android.
    • Para compilar o codec nativo, use um pacote NDK de 64 bits, que é onde todos os cabeçalhos do Android-L estão localizados.
    Correções importantes de bugs:
    • Foi corrigido o gdb 7.6 no GCC 4.8/4.9 (problemas 74112 e 74371).
    • O GCC 4.8/4.9 foi corrigido para x86, de modo a não ativar mais -msse4.2 e -mpopcnt por padrão (problema 73843, link em inglês).
    Outras correções de bugs:
    • O stdio.h foi removido dos diretórios include-fixed/ para todas as versões do GCC (problema 73728).
    • Os arquivos principais duplicados foram removidos dos pacotes Windows nos diretórios platforms/android-L/arch-*/usr/include/linux/netfilter*/ (problema 73704).
    • Foi corrigido um problema que impedia que o Clang criasse o HelloComputeNDK.
    • O atexit foi corrigido (problema 66595).
    • Várias correções foram feitas nos documentos em docs/ e sources/third_party/googletest/README.NDK (problema 74069, link em inglês).
    • As seguintes correções foram feitas nos cabeçalhos do Android-L:
      1. As seguintes funções foram adicionadas a ctype.h e wchar.h: dn_expand(), grantpt(), inet_nsap_addr(), inet_nsap_ntoa(), insque(), nsdispatch(), posix_openpt(), __pthread_cleanup_pop(), __pthread_cleanup_push(), remque(), setfsgid(), setfsuid(), splice(), tee(), twalk() (problema 73719) e 42 funções de *_l().
      2. A função cmsg_nxthdr foi renomeada como __cmsg_nxthdr.
      3. A função __libc_malloc_dispatch foi removida.
      4. O protótipo ptrace() foi mudado para long ptrace(int, ...);.
      5. A função sha1.h foi removida.
      6. O android_dlextinfo foi estendido em android/dlext.h.
      7. O __NDK_FPABI__ foi anotado para funções que recebem ou retornam os valores float- ou double-type em stdlib.h, time.h, wchar.h e complex.h.
    Outras mudanças:
    • mipsel-linux-android-4.9 e mips64el-linux-android-4.9 foram atualizados, implementando um novo layout de diretório multilib e fornecendo compatibilidade com gdb-7.7.
    • Os cpu-features foram aprimorados para detectar mais recursos do arm64 (lista de mudanças 100339).
    Mudanças importantes:
    • Foram adicionadas três novas ABIs, todas de 64 bits: arm64-v8a, x86_64 e mips64.
    • Algumas considerações:
      • O GCC 4.9 é o compilador padrão para ABIs de 64 bits. Atualmente, o Clang está na versão 3.4. NDK_TOOLCHAIN_VERSION=clang pode não funcionar com arm64-v8a e mips64.
      • O Android-L é o primeiro nível que possui compatibilidade com 64 bits. Esse nível de API é temporário e serve somente para visualização de L. Um número de nível de API real o substituirá na versão de L.
      • Essa versão agora inclui as configurações all32 e all64 para APP_ABI.
        • APP_ABI=all32 é equivalente a APP_ABI=armeabi,armeabi-v7a,x86,mips.
        • APP_ABI=all64 é equivalente a APP_ABI=arm64-v8a,x86_64,mips64.
        • APP_ABI=all seleciona todas as ABIs.
      • O novo GNU libstdc ++ no Android-L contém todos os <tr1/cmath>. Antes de definir sua própria função matemática, verifique em _GLIBCXX_USE_C99_MATH_TR1 se já existe uma função com esse nome, a fim de evitar erros de "múltipla definição" do vinculador.
      • A biblioteca cpu-features foi atualizada para o kernel do ARMv8. A biblioteca cpu-features existente pode falhar em detectar a presença de NEON na plataforma ARMv8. Recompile seu código com a nova versão.
    • Foi adicionado um novo diretório de APIs do platforms/android-L/. Isso inclui:
      • Cabeçalhos Bionic atualizados, que não tinham sido alterados nos níveis de API Android de 3 (Cupcake) até 19 (KitKat). Esta nova versão, para o nível L, será sincronizada com o AOSP.
      • Novas APIs de mídia e uma amostra do codec nativo.
      • Um cabeçalho do Android.h foi atualizado para SLES/OpenSLES, permitindo a compatibilidade com AudioPlayer em formato de áudio de ponto flutuante de precisão única.
      • Extensões GLES 3.1 e AEP para libGLESv3.so.
      • Os cabeçalhos GLES2 e GLES3 foram atualizados para as versões oficiais mais recentes da Khronos.
    • Foram adicionados compiladores GCC 4.9 para ABIs de 32 e 64 bits. O GCC 4.9 é o compilador (somente) padrão para ABIs de 64 bits, conforme já mencionado. Para ABIs de 32 bits, você precisa ativar explicitamente o GCC 4.9, já que o GCC 4.6 ainda é o padrão.
      • Para o ndk-build, ative a criação do GCC 4.9 de 32 bits adicionando NDK_TOOLCHAIN_VERSION=4.9 a Application.mk ou exportando como uma variável de ambiente da linha de comando.
      • Para um conjunto de ferramentas autônomo, use a opção --toolchain= no script make-standalone-toolchain.sh. Por exemplo: --toolchain=arm-linux-androideabi-4.9.
    • Foi feito upgrade do GDB para a versão 7.6 no GCC 4.8/4.9 e x86*. Como o GDB ainda está na versão GDB-7.3.x no GCC 4.6 (o padrão para ARM e MIPS), é preciso definir NDK_TOOLCHAIN_VERSION=4.8 ou 4.9 para ativar o ndk-gdb e selecionar o GDB 7.6.
    • A opção de criação -mssse3 foi adicionada para oferecer compatibilidade com SSSE3 e foi definida como padrão para ABI x86 (upgrade de SSE3). A imagem divulgada pelo Google não contém instruções SSSE3.
    • O GCC 4.8 foi atualizado para 4.8.3.
    • O suporte de ARM libc++EH, alternando de gabi++ para libc++abi, foi aprimorado. Para saber mais detalhes, consulte a seção "C++ Support" da documentação. Algumas considerações:
      • Todos os testes, exceto para localidade, agora transmitem para o Clang 3.4 e GCC 4.8. Para saber mais, consulte a seção "C++ Support" da documentação.
      • As bibliotecas libc++ para X86 e MIPS libc++ ainda usam gabi++.
      • O GCC 4.7 e versões mais recentes agora pode usar <atomic>.
      • Adicione -fno-strict-aliasing se for usar <list>, porque __list_imp::_end_ gera erros nas regras TBAA (problema 61571, link em inglês).
      • A partir do GCC 4.6, LIBCXX_FORCE_REBUILD:=true não recria mais libc++. A recriação requer o uso de um compilador diferente. O Clang 3.3 não foi testado.
    • mclinker está agora na versão 2.7 e é compatível com aarch64 Linux.
    • Foi adicionada compatibilidade com cabeçalhos pré-compilados para os cabeçalhos especificados por LOCAL_PCH. (problema 25412, link em inglês).
    Correções importantes de bugs:
    • A libc++ foi corrigida e agora compila std::feof e outros (problema 66668, link em inglês).
    • Uma chamada de biblioteca atômica do Clang 3.3/3.4 foi corrigida porque causava falhas em alguns testes de libc++ para ABI armeabi.
    • Foram corrigidas falhas do Clang 3.4 que ocorriam na leitura de cabeçalhos pré-compilados (problema 66657, link em inglês).
    • A declaração -O3 de Clang 3.3/3.4 foi corrigida em:
    • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (problema 57381).
    • A seguinte falha do Clang 3.3/3.4 foi corrigida:
    • 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 (problema 66950, link em inglês).
    Outras correções de bugs:
    • Cabeçalhos corrigidos:
      • Foi corrigido o ssize_t de 32 bits para ser definido como int, em vez de long int.
      • As opções de WCHAR_MIN e WCHAR_MAX foram corrigidas para que pegassem os sinais apropriados de acordo com a arquitetura em que estão sendo executadas:
        • X86/MIPS: assinado.
        • ARM: não assinado.
        • Para forçar X86/MIPS a ser definido como não assinado por padrão, use -D__WCHAR_UNSIGNED__.
        • Para forçar wchar_t a ser definido como 16 bits, use -fshort-wchar.
      • Foram removidos símbolos inexistentes de libc.so de 32 bits e adicionados pread64, pwrite64, ftruncate64 para a API de nível 12 e mais recentes do Android (problema 69319, link em inglês). Para ver mais informações, veja a mensagem de confirmação que acompanha a lista de mudanças do AOSP 94137.
    • O aviso do GCC sobre a redefinição de putchar foi corrigido. Veja uma mensagem de aviso:
    • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (lista de mudanças 91185, link em inglês).
    • O make-standalone-toolchain.sh --stl=libc++ foi corrigido para que:
      • copie cxxabi.h (problema 68001, link em inglês);
      • seja executado em diretórios diferentes do diretório de instalação do NDK (problemas 67690 e 68647, links em inglês).
    • O GCC/Windows foi corrigido para citar argumentos somente quando necessário para processos de spawning em programas externos. Essa mudança diminui a probabilidade de exceder o limite de comprimento de 32 mil.
    • Foi corrigido um problema que tornava impossível ajustar a variável de ambiente APP_PLATFORM.
    • A implementação de IsSystemLibrary() foi corrigida em crazy_linker para usar strrchr() em vez de strchr() e encontrar o nome de base verdadeiro do caminho da biblioteca.
    • Foi corrigida a incapacidade do native-audio de criar em modo de depuração.
    • Foi corrigida a incapacidade de gdb de imprimir números extremos do ponto flutuante (problema 69203).
    • Foi corrigida a incapacidade do Clang 3.4 de compilar com -Wl,-shared, em vez de usar -shared, que não gerava problemas de compilação. O problema era que Clang adicionava -pie para segmentações do Android se -shared e -static não existissem. Esse comportamento, que estava incorreto, fez com que o vinculador reclamasse que -shared e -pie não poderiam coexistir.
    Outras mudanças:
    • O arm_neon.h foi adicionado ao conjunto de ferramentas x86 e agora emula aproximadamente 47% do Neon. Atualmente, não há compatibilidade com tipos de 64 bits. Para mais informações, consulte a seção sobre o suporte intrínseco ao ARM Neon na documentação do x86.
    • A otimização de ARM/GOT_PREL (presente no GCC 4.6 construído a partir do branch do Google do GCC) foi adaptada para o ARM GCC 4.8/4.9. Essa otimização às vezes reduz a contagem de instruções ao acessar variáveis globais. Para ver um exemplo, consulte o script build.sh em $NDK/tests/build/b14811006-GOT_PREL-optimization/.
    • Foi adicionada a versão ARM para STL gabi++, stlport e libc++. Agora eles têm essa versão e o modo Thumb.
    • Agora, é possível chamar o script make-standalone-toolchain.sh com --toolchain=x86_64-linux-android-4.9, que é equivalente a --toolchain=x86_64-4.9.
    Mudanças importantes:
    • Foi adicionada compatibilidade com o compilador Clang 3.4. A opção NDK_TOOLCHAIN_VERSION=clang agora escolhe o Clang 3.4. O GCC 4.6 ainda é o compilador padrão.
    • O APP_ABI=armeabi-v7a-hard foi incluído, com a opção de multilib -mfloat-abi=hard adicional. Essas opções são para uso com o ARM GCC 4.6/4.8 e o Clang 3.3/3.4 (que usam assembler, vinculador e libs do 4.8). Ao usar essas opções, observe as seguintes alterações:
      • Ao executar o script ndk-build, adicione o seguintes opções para o destino armeabi-v7a:
        TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
        TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
        A biblioteca de criação é copiada para libs/armeabi-v7a. Para "marcar" se comportam conforme o esperado, não é possível especificar armeabi-v7a e armeabi-v7a-hard como marcas de destino (ou seja, em APP_ABI= line). Isso fará com que uma delas seja ignorada. Observe que APP_ABI=all ainda é equivalente a armeabi armeabi-v7a x86 mips.
      • O script make-standalone-toolchain.sh copia mais bibliotecas nos diretórios /hard. Adicione as flags CFLAGS e LFLAGS acima ao seu makefile para permitir que o GCC ou o Clang sejam vinculados às bibliotecas em /hard.
    • O assembler YASM, assim como as sinalizações LOCAL_ASMFLAGS e EXPORT_ASMFLAGS, foram adicionados para destinos x86. O script ndk-build usa prebuilts/*/bin/yasm* para criar LOCAL_SRC_FILES que tem a extensão .asm.
    • O MClinker foi atualizado para 2.6.0, que adiciona compatibilidade com -gc-sections.
    • Foi adicionada compatibilidade experimental para libc++ (upstream r201101). Use esse recurso realizando as seguintes etapas:
      • Adicione APP_STL := c++_static ou APP_STL := c++_shared em Application.mk. Você pode recriar a partir da fonte com LIBCXX_FORCE_REBUILD := true
      • Execute make-standalone-toolchain.sh --stl=libc++ para criar um conjunto de ferramentas autônomo com libc++ headers/lib.
      Para mais informações, consulte CPLUSPLUS-SUPPORT.html (problema 36496).
    Correções importantes de bugs:
    • Foi corrigido um acionamento não capturado de um gerenciador de exceções inesperado para GCC 4.6/4.8 ARM EABI (problema 59392 do GCC, link em inglês).
    • O GCC 4.8 foi corrigido para resolver corretamente a especialização parcial de um modelo com um argumento modelo dependente e sem tipo. (problema 59052 do GCC, link em inglês).
    • Foram adicionados mais módulos para Python pré-compilados (problema 59902, link em inglês):
      • Mac OS X: zlib, bz2, _curses, _curses_panel, _hashlib, _ssl
      • Linux: zlib, nis, crypt, _curses e _curses_panel
    • Foram corrigidos x86 e MIPS gdbserver event_getmsg_helper.
    • Foram corrigidos vários problemas no conjunto de ferramentas do RenderScript NDK, incluindo erros de compatibilidade em dispositivos mais antigos e reflexão C++.

    Outras correções de bugs:
    • Correções de cabeçalho:
      • Foi corrigida a ausência de #include <sys/types.h> em android/asset_manager.h para a API de nível 13 ou mais recente do Android (problema 64988, link em inglês).
      • Foi corrigida a ausência de #include em android/rect_manager.h para a API Android de nível 14 ou posterior.
      • Foram adicionados JNICALL a JNI_OnLoad e JNI_OnUnload em jni.h. Observe que JNICALL é definido como __NDK_FPABI__. Para mais informações, consulte sys/cdefs.h.
      • Foram atualizados os seguintes cabeçalhos para poderem ser incluídos sem a necessidade de adicionar dependências manualmente (problema 64679, link em inglês):
      • 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
      • sys/cachectl.h foi adicionado para todas as arquiteturas. Agora, os desenvolvedores de MIPS podem incluir esse cabeçalho em vez de escrever #ifdef __mips__.
      • O platforms/android-18/include/android/input.h foi corrigido com a adição de __NDK_FPABI__ a funções que tomam ou retornam valores flutuantes ou duplos.
      • Foi corrigido o MIPS struct stat, que estava definido incorretamente como a contraparte de 64 bits para a API Android de nível 12 e posterior. Essa configuração errada foi uma regressão introduzida na versão r9c.
      • Foram definidos __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE e __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE para API Android de nível 9 e anterior.
      • Foram adicionados scalbln, scalblnf e scalblnl ao libm.so x86 para APIs de nível 18 e mais recentes.
      • Foi corrigido um erro de digitação em sources/android/support/include/iconv.h (problema 63806, link em inglês).
    • gabi++ std::unexpected() foi corrigido para chamar std::terminate() para que o gerenciador std::terminate() definido pelo usuário possa ser executado.
    • gabi++ foi corrigido para capturar std::nullptr.
    • Foram corrigidas as amostras de Teapot e MoreTeapots:
      • Resolvemos um problema com os ícones de Tegra 2 e 3 alterando variáveis especulares para usar a precisão média. Os valores para potência especular agora podem ser menores que 1.0.
      • As amostras foram alteradas para que pressionar o botão de volume restaure o modo imersivo e invalide SYSTEM_UI_FLAG_IMMERSIVE_STICKY. A rotação da tela não aciona onSystemUiVisibilityChange e não restaura o modo imersivo.
    • O script ndk-build foi corrigido para adicionar -rpath-link=$SYSROOT/usr/lib e -rpath-link=$TARGET_OUT a fim de usar ld.bfd para vincular executáveis (problema 64266, link em inglês).
    • -Bsymbolic foi removido de todos os builds STL.
    • ndk-gdb-py.cmd foi corrigido configurando SHELL como uma variável de ambiente em vez de transmitir para python.exe, que ignora essa definição (problema 63054, link em inglês).
    • O script make-standalone-toolchain.sh foi corrigido para que a opção --stl=stlport copiasse os cabeçalhos gabi++ em vez de vinculá-los simbolicamente. cmd.exe e os shells de MinGW não entendem links simbólicos criados pelo cygwin.
    Outras mudanças:
    • As permissões de execução foram aplicadas a todos os scripts *cmd destinados anteriormente ao uso exclusivo no shell cmd.exe, caso os desenvolvedores preferissem usar ndk-build.cmd em cygwin em vez do ndk-build script recomendado.
    • A velocidade do script make-standalone-toolchain.sh foi aprimorada ao transferir em vez de copiar se o diretório de destino especificado não existisse.

    Essa é uma versão exclusiva de correção de bugs.

    Correções importantes de bugs:
    • Foi corrigido um problema com GCC 4.8 ARM, em que o ponteiro da pilha é restaurado muito cedo. Esse problema impediu que o ponteiro do frame acessasse de forma confiável uma variável no frame da pilha (problema 58854 do GCC, link em inglês).
    • Foi corrigido um problema com GCC 4.8 libstdc++, em que um bug em std::nth_element causava a geração de um código que produzia uma falha de segmentação aleatória (problema 62910, link em inglês).
    • O GCC 4.8 ICE foi corrigido em cc1/cc1plus com -fuse-ld=mcld, para que o seguinte erro não ocorra mais:
      cc1: internal compiler error: in common_handle_option, at
      opts.c:1774
    • A compatibilidade de -mhard-float foi corrigida para funções matemáticas de __builtin. Para informações atualizadas sobre correções de -mhard-float com STL, veja o problema 61784 (link em inglês).
    Outras correções de bugs:
    • Correções de cabeçalho:
      • O protótipo de poll foi mudado para poll(struct pollfd *, nfds_t, int); em poll.h.
      • O utimensat foi adicionado para libc.so em APIs Android de níveis 12 e 19. Agora, essas bibliotecas são incluídas para todas as APIs Android de nível 12 a 19.
      • futimens foi introduzido a libc.so para a API Android de nível 19.
      • Foram adicionados clock_settime() e clock_nanosleep() ausentes a time.h para APIs Android de nível 8 e posterior.
      • Foram adicionados CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, e CLOCK_BOOTTIME_ALARM em time.h.
      • Foram removidos CLOCK_REALTIME_HR e CLOCK_MONOTONIC_HR., que estão obsoletos.
    • Em amostras Teapot, MoreTeapots e source/android/ndk_helper:
      • Foram mudados para usar um abi de flutuação de hardware para armeabi-v7a.
      • Foram atualizados para usar o modo imersivo em APIs Android de nível 19 e posterior.
      • Foi corrigido o problema com Check_ReleaseStringUTFChars em /system/lib/libdvm.so que estava causando falhas em dispositivos x86.
    • Foi corrigida a falha de ndk-build que ocorre no cygwin quando o pacote NDK é referenciado por um link simbólico.
    • Foi corrigida a falha de ndk-build.cmd que ocorre no cmd.exe do Windows quando LOCAL_SRC_FILES contém caminhos absolutos (problema 69992, link em inglês).
    • Foi corrigido o script ndk-stack para continuar, mesmo quando não é possível analisar um frame devido à impossibilidade de encontrar uma rotina, um nome de arquivo ou um número de linha. Em todos esses casos, será gerado ??.
    • A pilha ndk-stack foi corrigida para os destinos windows-x64_64 para não corresponder mais incorretamente a uma linha de frame com uma linha na seção stack: que não contém pc, eip ou ip. Por exemplo:
      I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
      /system/lib/libc.so
    • Correção de gabi++ para:
      • não usar malloc() para alocar objetos C++ thread-local;
      • evitar deadlocks em gabi++ em casos em que libc.debug.malloc é diferente de zero em compilações userdebug/eng da plataforma Android.
    Outras mudanças:
    • Foi adicionado LOCAL_EXPORT_LDFLAGS.
    • A configuração NDK_PROJECT_PATH=null foi introduzida para o uso em um sistema de criação integrado em que as opções são transmitidas explicitamente para ndk-build. Com essa configuração, ndk-build não faz uma tentativa de busca de NDK_PROJECT_PATH.. Ela também impede que as variáveis derivem de configurações padrão de NDK_PROJECT_PATH. Como resultado, as variáveis a seguir precisam ser explicitamente especificadas (com os valores padrão, se existirem): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (opcional, padrão para 0) e outros APP_* contidos em Application.mk.
    • APP_ABI agora pode ser enumerado em uma lista delimitada por vírgulas. Para exemplo:
      APP_ABI := "armeabi,armeabi-v7a"
    • Foi fornecida a capacidade de recriar todo o STL com informações de depuração em um pacote opcional e separado chamado android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, usando a opção -g. Essa opção ajuda o script ndk-stack a fornecer um despejo de pilha aprimorado no STL. Essa alteração não deve afetar o código/tamanho do arquivo final, removido.
    • As amostras de hello-jni foram aprimoradas para informar APP_ABI na compilação.
    • A ferramenta ar foi usada no modo Deterministic (opção -D) para criar bibliotecas estáticas (problema 60705).
    Mudanças importantes:
    • Foram atualizados include/android/*h e math.h para todos os níveis da API Android até o 18, incluindo a adição dos níveis 13, 15, 16 e 17. Para saber mais sobre as APIs adicionadas, veja as mensagens de confirmação para as alterações 68012 e 68014 (links em inglês) (problemas 47150, 58528 e 38423, links em inglês).
    • Foi adicionada compatibilidade com a API Android de nível 19, incluindo a vinculação de Renderscript.
    • Foi adicionada compatibilidade com -mhard-float na ABI armeabi-v7a existente. Para mais informações e restrições atuais sobre o Clang, consulte tests/device/hard-float/jni/Android.mk.
    • Foi feita a migração de GNU Compiler Collection (GCC) 4.8 para 4.8.2 e adicionada a compatibilidade com cor de diagnóstico. Para ativar as cores de diagnóstico, defina -fdiagnostics-color=auto, -fdiagnostics-color=always, ou exporte GCC_COLORS como mostrado abaixo:
      GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
      
      Para mais informações, consulte GCC Opções independentes de idioma.
    • Foram adicionadas duas novas amostras para demonstrar os recursos de OpenGL ES 3.0: Teapot e MoreTeapots. Esses exemplos funcionam em dispositivos com Android 4.1 (nível 16 da API) e mais recentes.
    • O suporte para GCC 4.7 e Clang 3.2 está obsoleto e será removido na próxima versão.
    Correções importantes de bugs:
    • Foi corrigido um problema com ARM GCC 4.6 thumb2 que falhava ao gerar tabelas de salto relativas de 16 bits (problema do GCC, link em inglês).
    • Foi corrigido um erro do compilador interno (ICE, na sigla em inglês) do GCC 4.8 em g++.dg/cpp0x/lambda/lambda-defarg3.C (mudança 62770, problema do GCC, link em inglês).
    • Foi corrigido um problema com os executáveis *-gdb.exe do Windows de 32 bits que falhavam na inicialização (problema 58975, link em inglês).
    • Foi corrigido o GCC 4.8 na criação da biblioteca de marcadores. A mensagem de erro é a seguinte:
      internal compiler error: verify_flow_info failed
      (Problema 58916, problema do GCC).
    • O build de GDB/ARM foi modificado para pular dados de ARM.exidx para liberação em código de prólogo, e foi adicionado um comando (set arm exidx-unwinding) para controlar a liberação de pilha com base em exidx (problema 55826, link em inglês).
    • Foi corrigido um problema do compilador MIPS do Clang 3.3 em que os registros HI e LO são reutilizados incorretamente.
    • Foi corrigido um problema com o MIPS 4.7 ICE em dbx_reg_number. A mensagem de erro é da seguinte forma:
      external/icu4c/i18n/decimfmt.cpp:1322:1:
      internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
      
      (Patch do GCC, link em inglês)
    Outras correções de bugs:
    • Correções de cabeçalho
      • Foram corrigidos WCHAR_MIN e WCHAR_MAX do ARM para serem não assinados de acordo com a especificação (as versões de X86/MIPS são assinadas). Defina _WCHAR_IS_ALWAYS_SIGNED para restaurar o comportamento antigo (problema 57749).
      • include/netinet/tcp.h foi corrigido para conter o tipo enumerado de estado TCP_INFO (problema 38881).
      • A macro cdefs_elh.h foi corrigida _C_LABEL_STRING para interromper a geração de avisos no conjunto de ferramentas do GCC 4.8 ao usar o modo c++11 (problema 58135, problema 58652, links em inglês).
      • Foram removidas as funções não existentes imaxabs e imaxdiv do cabeçalho inttypes.h.
      • Foi corrigido um problema com valores de retorno pthread_exit() e pthread_self() (problema 60686, link em inglês).
      • Foi adicionada a função mkdtemp() ausente, que já existe no cabeçalho bionic stdlib.h.
    • Foi corrigido o problema de build samples/gles3jni com o Clang na API Android de nível 11.
    • O MCLinker foi corrigido para permitir várias ocorrências das seguintes opções: -gc-sections e --eh-frame-hdr.
    • O MCLinker foi corrigido para aceitar a opção --no-warn-mismatch.
    • A opção cpu-features foi modificada para não presumir que todos os dispositivos VFPv4 são compatíveis com IDIV. Agora, essa opção só adiciona IDIV a dispositivos listados na lista de permissões, incluindo o Nexus 4 (problema 57637, link em inglês).
    • Foi corrigido o problema com android_native_app_glue.c, que gerava erros de forma incorreta em operações de pré-envio de eventos.
    • Todas as operações no encerramento de gabi++ foram corrigidas e unexpected_handler passou a ser thread-safe.
    • Vários erros com a opção -integrated-as do Clang foram corrigidos para poder transmitir testes de ssax-instructions e fenv.
    • O compilador GCC 4.6/4.7/4.8 foi corrigido para transmitir a opção --eh-frame-hdr do vinculador até mesmo para executáveis estáticos. Para saber mais, consulte o patch do GCC (link em inglês).
    • Foi corrigido um apóstrofo extra em CPU-ARCH-ABIS.html. Para mais informações, consulte NDK-DEPENDS.html (problema 60142).
    • Correção de aspas extras na saída do ndk-build no Windows (problema 60649, link em inglês).
    • O Clang 3.3 foi corrigido para compilar operações atômicas e integradas do ARM como __atomic_fetch_add, __atomic_fetch_sub e __atomic_fetch_or.
    • O Clang 3.3 ICE foi corrigido com vfprintf personalizado (problema do Clang, link em inglês).
    Outras mudanças:
    • O OpenMP foi ativado para todas as versões do GCC. Para usar esse recurso, adicione as seguintes sinalizações ao seu configurações de build:
      LOCAL_CFLAGS += -fopenmp
      LOCAL_LDFLAGS += -fopenmp
      
      Para exemplos de código, consulte tests/device/test-openmp
    • O tamanho de ld.mcld foi reduzido significativamente (1,5 MB x ld.bfd 3,5 MB e ld.gold 7,5 MB), resultando em uma melhoria de velocidade de aproximadamente 20%.
    • Foram adicionados LOCAL_CONLYFLAGS e APP_CONLYFLAGS para especificar as opções aplicáveis somente a C, e não a C++. Os recursos LOCAL_CFLAGS e APP_CFLAGS também são usados para a compilação de C++ (para poupar o trabalho de especificar a maioria das opções duas vezes). Dessa forma, as opções como -std=gnu99 podem falhar em versões g++ com um aviso e em versões clang++ com um erro.
    • Foram adicionadas funções auxiliares da matriz gabi++.
    • As criações do GCCs foram modificadas para que todos os arquivos libgcc.a sejam compilados com -funwind-tables, permitindo que a pilha seja liberada após pontos bloqueados anteriormente, como __aeabi_idiv0.
    • Foi adicionada compatibilidade com Ingenic MXU no MIPS GCC4.6/4.7/4.8 com a nova opção -mmxu.
    • O MIPS GCC4.6/4.7/4.8 -mldc1-sdc1 foi estendido para controlar ldxc1/sdxc1 também
    • Foi adicionado um vinculador de labirinto. Para mais informações, consulte sources/android/crazy_linker/README.TXT
    • bitmap-plasma foi corrigido para desenhar na tela inteira em vez de em uma área de 200 x 200 pixels.
    • Os tamanhos dos conjuntos de ferramentas linux e darwin foram reduzidos em 25% com a criação de links simbólicos para arquivos idênticos.
    Mudanças importantes:
    • Foi adicionado suporte para Android 4.3 (API de nível 18) Para mais informações, consulte STABLE-APIS.html e veja novos exemplos de código em samples/gles3jni/README.
    • Foram adicionados cabeçalhos e bibliotecas para OpenGL ES 3.0, que é compatível com Android 4.3 (API de nível 18) e posterior.
    • Foi adicionado o compilador GNU Compiler Collection (GCC) 4.8 ao NDK. Como o GCC 4.6 ainda é o padrão, é preciso ativar explicitamente esta opção:
      • Para as criações do ndk-build, exporte NDK_TOOLCHAIN_VERSION=4.8 ou a adicione em Application.mk.
      • Para criações autônomas, use a opção --toolchain= em make-standalone-toolchain.sh, por exemplo:
        --toolchain=arm-linux-androideabi-4.8

      Observação: a opção -Wunused-local-typedefs é ativada por -Wall. Adicione __attribute__((unused)) caso você use as declarações em tempo de compilação como sources/cxx-stl/stlport/stlport/stl/config/features.h, linha 311. Para mais informações, consulte Mudança 55460.

      Observação: no GCC 4.7 e versões mais recentes, os compiladores ARM geram código de acesso não alinhado por padrão para ARMv6 e destinos de build posteriores. Talvez seja necessário adicionar a opção de criação -mno-unaligned-access ao criar para os kernels que não são compatíveis com esse recurso.

    • Foi adicionada compatibilidade com o Clang 3.3. A opção de criação NDK_TOOLCHAIN_VERSION=clang agora escolhe o Clang 3.3 por padrão.

      Observação: o GCC 4.4.3 e o Clang 3.1 foram descontinuados e vão ser removidos na próxima versão do NDK.

    • O GNU Project Debugger (GDB) foi atualizado para oferecer suporte para o Python 2.7.5.
    • O MCLinker foi adicionado para oferecer compatibilidade com os hosts do Windows. ld.gold será o padrão, quando disponível. Por isso, é preciso adicionar -fuse-ld=mcld em LOCAL_LDFLAGS ou APP_LDFLAGS para ativar o MCLinker.
    • A ferramenta ndk-depends foi adicionada e exibe dependências da biblioteca ELF. Para mais informações, consulte NDK-DEPENDS.html. (problema 53486, link em inglês).
    Correções importantes de bugs:
    • Foi corrigido um problema em potencial com o processamento de eventos em android_native_app_glue (problema 41755).
    • O build ARM/GCC-4.7 foi corrigido para gerar alinhamento suficiente para o carregamento do NEON e armazenar instruções VST e VLD (problema 57271 do GCC, link em inglês).
    • Foi corrigido um erro de compilador interno (ICE) do GCC 4.4.3/4.6/4.7 para um valor de índice negativo constante em um literal de string (Problema 54623, link em inglês)
    • Foi corrigida falha de segmentação do GCC 4.7 para inicialização constante com um endereço de objeto. (problema 56508).
    • Foi corrigida uma falha de segmentação do GCC 4.6 ARM para valores -O no uso do Boost 1.52.0 (problema 42891).
    • libc.so e libc.a foram corrigidos para oferecer compatibilidade com a função wait4() (problema 19854, link em inglês).
    • Os arquivos x86 libc.so e libc.a foram atualizados para incluir a função clone().
    • O bug LOCAL_SHORT_COMMANDS foi corrigido onde o arquivo linker.list está vazio ou não é usado.
    • Foi corrigido o build GCC MICC para Mac OS para usar as diretivas CFI, cuja a ausência causa a falha de ld.mcld --eh-frame-hdr com frequência.
    • O erro do compilador interno Clang 3.2 X86/MIPS foi corrigido em llvm/lib/VMCore/Value.cpp (mudança 59021, link em inglês).
    • Foi corrigida a falha do assembler do Windows de 64 bits com o GCC 4.7 (erro: out of memory allocating 4294967280 bytes).
    • O script ndk-gdb foi atualizado para que as ações --start ou --launch agora aguardem o GNU Debug Server, para que ele possa atingir pontos de interrupção mais confiáveis definidos no início do caminho de execução, como pontos de interrupção no código JNI (problema 41278, link em inglês).

      Observação: esse recurso requer jdb e produz um aviso sobre pontos de interrupção pendentes. Especifique a opção --nowait para restaurar o comportamento anterior.

    • Foi corrigida a falha do GDB quando a lista de bibliotecas está vazia.
    • Foi corrigida uma falha do GDB ao usar um comando stepi após uma instrução Thumb bx pc ou blx pc (problema 56962, problema 36149).
    • O gdbserver de MIPS foi corrigido para buscar DT_MIPS_RLD_MAP em vez de DT_DEBUG (problema 56586).
    • Foi corrigida uma dependência circular no script do ndk-build. Por exemplo: se A->B e B->B, então B foi removido do build (Problema 56690, link em inglês)
    Outras correções de bugs:
    • O script ndk-build foi corrigido para permitir que você especifique uma versão do Clang como uma opção de linha de comando (por exemplo, NDK_TOOLCHAIN_VERSION=clang3.2). Anteriormente, apenas a especificação da versão como uma variável de ambiente funcionava.
    • O tamanho de gabi++ de _Unwind_Exception foi corrigido e definido como 24 para destinos de criação para MIPS no uso do compilador do Clang (mudança 54141).
    • O script ndk-build foi corrigido para garantir que as bibliotecas de build sejam realmente removidas de projetos que incluem bibliotecas estáticas de pré-criadas quando o comando ndk-build clean for usado (mudança 54461, mudança 54480, links em inglês).
    • A opção NDK_ANALYZE=1 foi modificada para ser menos detalhada.
    • gnu-libstdc++/Android.mk foi corrigido para incluir um caminho backward/ para builds que usam compatibilidade com versões anteriores (problema 53404, link em inglês).
    • Foi corrigido um problema em que stlport new às vezes retornava valores aleatórios.
    • O ndk-gdb foi corrigido para corresponder à classificação de CPU_ABIS, e não de APP_ABIS (problema 54033).
    • Foi corrigido um problema em que o build de 64 bits do NDK no MacOSX escolhia o caminho incorreto para o compilador (Problema 53769, link em inglês)
    • Foram corrigidos scripts para detectar o Windows Vista de 64 bits. (problema 54485).
    • Foi corrigido o erro ntonl/swap32 do x86: invalid 'asm': operand number out of range (problema 54465, mudança 57242, links em inglês).
    • ld.gold foi corrigido para mesclar literais de string.
    • ld.gold foi corrigido para processar o alinhamento de um símbolo grande.
    • ld.gold foi atualizado para ativar a opção --sort-section=name.
    • O GCC 4.4.3/4.6/4.7 foi corrigido para suprimir a opção -export-dynamic para programas vinculados estaticamente. O GCC não adiciona mais uma seção .interp para programas vinculados estaticamente.
    • Foi corrigido o erro de compilação stlport do GCC 4.4.3 sobre typedef inconsistente de _Unwind_Control_Block (problema 54426)
    • Os scripts awk foram corrigidos para processar arquivos AndroidManifest.xml criados no Windows e que podem conter caracteres \r à direita e causar erros de compilação (problema 42548, link em inglês).
    • make-standalone-toolchain.sh foi corrigido para testar o diretório prebuilts/ e detectar se o host é de 32 ou 64 bits.
    • A opção -integrated-as do Clang 3.2 foi corrigida.
    • Foram corrigidos os dados do gerenciador pr1 e pr2 do modelo compacto ARM EHABI.
    • A opção -mllvm -arm-enable-ehabi do Clang foi adicionada para corrigir o seguinte erro:
      clang: for the -arm-enable-ehabi option: may only occur zero or one times!
    • Foi corrigida uma falha de compilação quando não há o elemento uses-sdk no manifesto do aplicativo (Problema 57015, link em inglês).
    Outras mudanças:
    • Correções de cabeçalho
      • Os cabeçalhos foram modificados para tornar __set_errno uma função in-line, uma vez que __set_errno em errno.h teve o uso suspenso e libc.so não a exporta mais.
      • elf.h foi modificado para incluir stdint.h (problema 55443).
      • sys/un.h foi corrigido para ser incluído de maneira independente de outros cabeçalhos (problema 53646).
      • Toda a família de APIs MotionEvent_getHistorical foi corrigida para capturar o const AInputEvent* motion_event (problema 55873).
      • malloc_usable_size foi corrigido para capturar const void* (problema 55725).
      • stdint.h foi corrigido para ter maior compatibilidade com C99. (mudança 46821, link em inglês).
      • wchar.h foi modificado para não redefinir WCHAR_MAX e WCHAR_MIN
      • A declaração <inttypes.h> foi corrigida para as macros PRI e SCN relacionadas ao ponteiro (problema 57218).
      • O cabeçalho sys/cdefs.h foi mudado para que __WCHAR_TYPE__ seja de 32 bits para níveis de API anteriores a 9. Isso significa que wchat_t é de 32 bits para todos os níveis da API. Para restaurar o comportamento anterior, defina a variável booleana _WCHAR_IS_8BIT (Problema 57267, link em inglês).
    • Foram adicionadas mais opções de formatação no NDK docs/ e correções em diversas documentações.
    • Foi adicionado suporte para uma técnica de arquivamento leve ao criar bibliotecas estáticas (problema 40303, link em inglês).
    • O script make-standalone-toolchain.sh foi atualizado para oferecer compatibilidade com a biblioteca stlport, além de gnustl, quando você especificar a opção --stl=stlport. Para mais informações, consulte STANDALONE-TOOLCHAIN.html.
    • O script make-standalone-toolchain.sh foi atualizado para que a opção --llvm-version= crie os scripts $TOOLCHAIN_PREFIX-clang e $TOOLCHAIN_PREFIX-clang++, além de clang e clang++, para evitar o uso acidental das definições clang e clang++ de host.
    • Foram adicionados dois sinalizadores para reativar duas otimizações no Clang upstream, mas desativadas no NDK para melhor compatibilidade com o código compilado pelo GCC:
      • Foi adicionada uma sinalização -fcxx-missing-return-semantics para reativar as semânticas de retorno ausentes no Clang 3.2 ou versões posteriores. Normalmente, todos os caminhos precisam terminar com uma instrução de retorno para uma função de retorno de valor. Se esse não for o caso, o clang inserirá uma instrução indefinida (ou a capturará no modo de depuração) no caminho sem uma instrução de retorno. Se você tiver certeza de que seu código está correto, use essa sinalização para permitir que o otimizador aproveite o comportamento indefinido. Se você não tiver certeza, não use essa sinalização. O autor da chamada ainda pode receber um valor incorreto aleatório, mas o otimizador não irá explorá-lo, dificultando a depuração do seu código.
      • A sinalização -fglobal-ctor-const-promotion foi adicionada para reativar a promoção de variáveis globais com o construtor estático para que sejam constantes. Com essa flag, a transmissão de otimização de variável global do LLVM tenta avaliar as variáveis globais com construtores estáticos e promovê-las para constantes globais. Embora essa otimização esteja correta, ela pode causar alguma incompatibilidade com o código compilado pelo GCC. Por exemplo, o código pode fazer com que const_cast transmita a constante como mutável e a modifique. No GCC, a variável está em leitura-gravação e o código é executado por acidente. No Clang, a variável const está na memória somente de leitura e pode fazer com que o app falhe.
    • -mldc1-sdc1 foi adicionado aos compiladores MIPS GCC e Clang. Por padrão, os compiladores alinham objetos de 8 bytes corretamente e emitem as instruções ldc1 e sdc1 para movê-las. Se o app usa um alocador personalizado que nem sempre se alinha ao limite de 8 bytes de um novo objeto da mesma forma que o alocador padrão, talvez ele apresente falhas devido a operações ldc1 e sdc1 na memória não alinhada. Nesse caso, use a sinalização -mno-ldc1-sdc1 para solucionar o problema.
    • Será feito o downgrade da severidade do evento de "aviso" para "informação", caso APP_PLATFORM_LEVEL seja maior que APP_MIN_PLATFORM_LEVEL. APP_PLATFORM_LEVEL pode ser mais baixo que APP_PLATFORM em jni/Application.mk porque o NDK não tem cabeçalhos para todos os níveis. Nesse caso, o nível é reduzido. O APP_MIN_PLATFORM_LEVEL é especificado pela android:minSdkVersion no manifesto do seu aplicativo (problema 39752).
    • Os métodos android_getCpuIdArm() e android_setCpuArm() foram adicionados a cpu-features.c. Essa adição permite a recuperação mais fácil das informações da CPUID do ARM (problema 53689, link em inglês).
    • O ndk-build foi modificado para usar as/ld do GCC 4.7 para compilação do Clang.

      Observação: no GCC 4.7, monotonic_clock e is_monotonic foram renomeados como steady_clock e is_steady, respectivamente.

    • Os novos avisos a seguir foram adicionados ao script ndk-build:
      • Avisos foram adicionados quando LOCAL_LDLIBS/LDFLAGS são usados em módulos de bibliotecas estáticas.
      • Um aviso foi adicionado quando uma configuração não apresenta módulos para criação.
      • Foi adicionado um aviso para bibliotecas sem sistema usadas em LOCAL_LDLIBS/LDFLAGS de uma biblioteca compartilhada ou módulos executáveis.
    • Os scripts de compilação foram atualizados. Assim, se APP_MODULES não for definido e somente bibliotecas estáticas estiverem listadas em Android.mk, o script forçará a criação de todas elas (problema 53502, link em inglês).
    • O ndk-build foi atualizado para oferecer compatibilidade com caminhos absolutos em LOCAL_SRC_FILES.
    • Os executáveis *-gdbtui foram removidos e são cópias dos executáveis *-gdb com a opção -tui ativada.
    • Os scripts de compilação foram atualizados para informar você quando o front-end do compilador Edison Design Group (EDG) ativar _STLP_HAS_INCLUDE_NEXT novamente (problema 53646).
    • A variável de ambiente NDK_LIBS_OUT foi adicionada para permitir a substituição do caminho para libraries/gdbserver do padrão $PROJECT/libs. Para mais informações, consulte OVERVIEW.html.
    • O padrão do script ndk-build foi modificado para compilar o código com proteção da string de formato -Wformat -Werror=format-security. Você pode definir LOCAL_DISABLE_FORMAT_STRING_CHECKS=true para desativar essa opção. Para mais informações, consulte ANDROID-MK.html.
    • O suporte para Pretty-Print STL foi adicionado em ndk-gdb-py. Para mais informações, consulte NDK-GDB.html.
    • Foram adicionados testes baseados nos frameworks do googletest.
    • Foi adicionada uma notificação ao script de criação do conjunto de ferramentas que avisa se o shell atual não é um bash.
    Mudanças importantes:
    • Foi adicionado um grupo do conjunto de ferramentas de host de 64 bits (sufixo de nome de pacote *-x86_64.*). Para ver mais informações, consulte CHANGES.HTML e NDK-BUILD.html.
    • O compilador Clang 3.2 foi adicionado. O GCC 4.6 ainda é usado por padrão. Para ver mais informações sobre como usar o compilador do Clang, consulte CHANGES.HTML.
    • Foi adicionado o analisador de código estático para hosts do Linux/MacOSX. Para mais informações sobre como usar o analisador, consulte CHANGES.HTML.
    • O MCLinker para hosts do Linux/MacOSX foi adicionado como um recurso experimental. O vinculador ld.gold é o padrão quando disponível. Por isso, você precisa ativá-lo explicitamente. Para mais informações, consulte CHANGES.HTML.
    • O ndk-build foi atualizado para usar a classificação topológica para dependências do módulo. Isso significa que o build classifica automaticamente a ordem das bibliotecas especificadas em LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES e LOCAL_SHARED_LIBRARIES. Para saber mais, consulte CHANGES.HTML (problema 39378).
    Correções importantes de bugs:
    • O script de compilação foi corrigido para o build de todos os conjuntos de ferramentas em -O2. Os conjuntos de ferramentas das versões anteriores foram criados incorretamente sem otimização.
    • O script de compilação foi corrigido e compila incondicionalmente Clang/llvm para MacOSX em 64 bits.
    • O erro do compilador interno do GCC 4.6/4.7 foi corrigido: gen_thumb_movhi_clobber at config/arm/arm.md:5832 (problema 52732).
    • Foi corrigido o problema de compilação em que o GCC/ARM 4.6/4.7 falha ao vincular o código usando funções internas atômicas de 64 bits. (Problema 41297, link em inglês)
    • Foram corrigidos erros de incompatibilidade de uso do DIV do vinculador GCC 4.7. (problemas do software de origem, link em inglês).
    • O erro build_data_member_initialization, at cp/semantics.c:5790 do compilador interno do GCC 4.7 foi corrigido.
    • O erro redirect_eh_edge_1, at tree-eh.c:2214 do compilador interno do GCC 4.7 foi corrigido (problema 52909).
    • Foi corrigida a falha de segmentação do GCC 4.7. (problema do GCC, link em inglês).
    • A resolução do relógio <chrono> foi corrigida, e steady_clock foi ativado (problema 39680).
    • O conjunto de ferramentas foi corrigido para ativar _GLIBCXX_HAS_GTHREADS para GCC 4.7 libstdc++ (problema 41770, problema 41859).
    • Foi corrigido o problema com o código X86 MXX/SSE que apresentava falhas na vinculação devido à ausência de posix_memalign (mudança 51872).
    • A falha de segmentação do GCC4.7/X86 foi corrigida em i386.c, função distance_non_agu_define_in_bb() (mudança 50383).
    • O GCC4.7/X86 foi corrigido para restaurar o comportamento cmov anterior (problema do GCC, link em inglês).
    • Foi corrigido o processamento do valor de retorno NULL de setlocale() em libstdc++/GCC4.7 (problema 46718).
    • Foi corrigida a referência indefinida de tempo de execução ld.gold para __exidx_start e __exidx_start_end (mudança 52134).
    • Foi corrigido o erro interno do compilador Clang 3.1 ao usar a biblioteca Eigen. (problema 41246)
    • Foi corrigido o erro do compilador interno Clang 3.1, incluindo <chrono> no modo C++11 (problema 39600).
    • Foi corrigido o erro do compilador interno Clang 3.1 ao gerar o código de objeto para uma chamada de método para um rvalue inicializado e uniforme (problema 41387).
    • O realinhamento da pilha do Clang 3.1/X86 foi corrigido. (Alteração 52154, link em inglês)
    • O problema com o GNU Debugger (GDB) SIGILL durante a depuração no Android 4.1.2 foi corrigido. (problema 40941).
    • Foi corrigido o problema em que o GDB não podia definir pontos de interrupção source:line quando os símbolos continham caminhos de arquivo longos e indiretos (problema 42448).
    • O read_program_header do GDB foi corrigido para executáveis PIE do MIPS (mudança 49592).
    • Foi corrigida a falha de segmentação STLport em uncaught_exception() (mudança 50236, link em inglês).
    • Foi corrigido o erro de barramento STLport no processamento de exceções devido ao acesso sem alinhamento de DW_EH_PE_udata2, DW_EH_PE_udata4 e DW_EH_PE_udata8.
    • O problema de recursão infinita de Gabi++ foi corrigido com o operador nothrow new[] (problema 52833).
    • Foi corrigido o deslocamento incorreto de Gabi++ para o ponteiro do gerenciador de exceções. (mudança 53446).
    • O livre redundante de Gabi++ foi removido no objeto de exceção (mudança 53447).
    Outras correções de bugs:
    • Correção de cabeçalhos do NDK:
      • Foram removidas definições redundantes de size_t, ssize_t e ptrdiff_t.
      • Foram corrigidos os cabeçalhos fenv.h de MIPS e ARM.
      • stddef.h foi corrigido para não redefinir offsetof, porque ele já existe no conjunto de ferramentas.
      • elf.h foi corrigido para conter Elf32_auxv_t e Elf64_auxv_t (problema 38441).
      • As definições #ifdef de C++ foram corrigidas no arquivo principal OpenSLES_AndroidConfiguration.h (Problema 53163, link em inglês).
    • STLport foi corrigido para ser cancelado após o erro de falta de memória, em vez de sair silenciosamente.
    • Os cabeçalhos do sistema e de Gabi ++ foram corrigidos para poderem compilar com a API de nível 8 e mais recentes.
    • cpufeatures foi corrigido para não analisar /proc/self/auxv (problema 43055, link em inglês).
    • ld.gold foi corrigido para não depender do host libstdc++ e, nas plataformas Windows, não depender da biblioteca libgcc_sjlj_1.dll.
    • Foi corrigido o Clang 3.1, que emite uma lista de registro inconsistente em .vsave e apresenta falha no assembler (mudança 49930).
    • O Clang 3.1 foi corrigido para compilar libgabi++ e transmitir os testes de test-stlport para destinos de criação de MIPS (mudança 51961, link em inglês).
    • O Clang 3.1 foi corrigido para só ativar a exceção por padrão para C++, e não para C.
    • Foram corrigidos diversos problemas no Clang 3.1 para transmitir a maioria dos testes de exceção GNU.
    • Os scripts clang e clang++ foram corrigidos no compilador NDK autônomo para detectar -cc1 e não especificar -target quando encontrado.
    • ndk-build foi corrigido para observar NDK_APP_OUT definido em Application.mk.
    • libc.so e lib.a para x86 foram corrigidos porque não apresentavam as funções sigsetjmp e siglongjmp já declaradas em setjmp.h (problema 19851).
    • libstdc++ do GCC 4.4.3/4.6/4.7 foi corrigido para funcionar com o Clang em C++ 11. (problema do Clang, link em inglês).
    • O caminho cygwin foi corrigido no argumento transmitido para HOST_AWK.
    • O aviso do script ndk-build foi corrigido no Windows quando executado pelo diretório JNI do projeto (problema 40192).
    • Foi corrigido um problema em que o script ndk-build não realiza a criação caso o makefile tenha espaços em branco na definição de LOCAL_PATH (Problema 42841, link em inglês).
    Outras mudanças:
    • O suporte para linhas de execução foi ativado no conjunto de ferramentas do GCC/MIPS.
    • Os auxiliares de processamento de exceções do GCC __cxa_begin_cleanup e __cxa_type_match foram atualizados para ter visibilidade padrão, e não mais a visibilidade oculta anterior no GNU libstdc++. Para mais informações, consulte CHANGES.HTML.
    • Os scripts de criação foram atualizados para que as bibliotecas estáticas Gabi++ e STLport agora sejam construídas com visibilidade oculta, exceto para os auxiliares de processamento de exceções.
    • O build foi atualizado para que STLport seja criado para ARM no modo Thumb.
    • Foi adicionada compatibilidade com std::set_new_handler em Gabi++ (problema 52805).
    • A chamada do sistema FUTEX foi ativada em GNU libstdc++.
    • ndk-build foi atualizado para não copiar mais as bibliotecas estáticas pré-compiladas para o diretório obj/local/<abi>/ de um projeto (problema 40302).
    • __ARM_ARCH_5*__ foi removido do script toolchains/*/setup.mk de ARM (problema 21132, link em inglês).
    • Foram compiladas bibliotecas GNU libstdc++ no thumb para ARM.
    • Foram ativadas as instruções madd/msub/nmadd/nmsub/recip/rsqrt do ponto flutuante MIPS com FPU de 32 bits.
    • Foi ativado o otimizador de loop grafite no GCC 4.6 e 4.7 para permitir mais otimizações: -fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all e -ftree-loop-linear (mais informações, link em inglês).
    • polly foi ativado para o Clang 3.1 nos hosts de Linux e Mac OS X de 32 bits, que analisa e otimiza o acesso à memória (mais informações, link em inglês).
    • -flto foi ativado no GCC 4.7, 4.6, no Clang 3.2 e Clang 3.1 no Linux (Clang LTO via LLVMgold.so). Os destinos do compilador MIPS não são compatíveis porque ld.gold não está disponível.
    • --plugin e --plugin-opt foram ativados para ld.gold no GCC 4.6/4.7.
    • --text-reorder foi ativado para ld.gold no GCC 4.7.
    • GNU libstdc++ foi configurado com _GLIBCXX_USE_C99_MATH, que torna indefinido o script isinf no cabeçalho biônico. Para mais informações, consulte CHANGES.html.
    • Foram adicionados APP_LDFLAGS aos scripts de compilação. Para mais informações, consulte ANDROID-MK.html.
    • Os scripts de criação foram atualizados para permitir que NDK_LOG=0 desative o NDK_LOG.
    • Os scripts de criação foram atualizados para permitir que NDK_HOST_32BIT=0 desative o conjunto de ferramentas de 32 bits do ambiente do desenvolvedor de host.
    • As sinalizações padrão do GCC/X86 -march= e -mtune= de pentiumpro e generic foram alteradas para i686 e atom.
    • Os scripts de criação do conjunto de ferramentas foram aprimorados:
      • Uma disputa em build-gcc.sh foi corrigida para o tipo de build mingw, que impedia um número significativo de processamentos de compilação paralelos.
      • build-gabi++.sh e build-stlport.sh foram atualizados e agora podem ser executados pelo pacote de NDK (problema 52835, link em inglês).
      • run-tests.sh foi corrigido na coleção de utilitários de MSys.
      • O conjunto de ferramentas de host de 64 bits e o suporte à versão do Canadian Cross foram aprimorados.
      • O script build-mingw64-toolchain.sh foi atualizado para a versão mais recente.
      • Foi adicionada uma opção para criar libgnustl_static.a e stlport_static.a sem usar a visibilidade oculta.
    Mudanças importantes:
    • O compilador GNU Compiler Collection (GCC) 4.7 foi adicionado ao NDK. O compilador GCC 4.6 ainda é definido por padrão. Por isso, você precisa ativar explicitamente a nova versão, como indicado a seguir:
      • Para o ndk-build, exporte a variável NDK_TOOLCHAIN_VERSION=4.7 ou a adicione a Application.mk.
      • Para builds independentes, adicione a opção --toolchain= a: make-standalone-toolchain.sh, por exemplo:
        --toolchain=arm-linux-androideabi-4.7

      Observação: esse recurso é experimental. Faça o teste e informe sobre qualquer problema.

    • A compatibilidade com exceções stlport foi adicionada via gabi++. O novo gabi++ depende de dlopen e do código relacionado. Isso significa o seguinte:
      • Não é mais possível criar um executável estático usando a opção -static nem incluir libstlport_static.a usando APP_STL := stlport_static. Ainda é possível usar a opção -static com um conjunto de ferramentas autônomo. A compilação de um executável dinâmico usando include $(BUILD_EXECUTABLE) ainda funciona, porque o compilador adiciona automaticamente a opção -ldl.
      • Se você usa -nostdlib e {-Wl,--no-undefined} para vinculações no seu projeto, inclua manualmente a opção -ldl.
      Para mais informações, consulte CPLUSPLUS-SUPPORT.html.

      Observação: esse recurso é experimental e funciona melhor com os compiladores GCC 4.6/4.7 do que com o GCC 4.4.3 ou o Clang 3.1. Faça o teste e informe sobre qualquer problema.

    • Uma opção -mstack-protector-guard= foi adicionada a x86 para escolher entre um caminho global padrão, que é compatível com a antiga biblioteca do Android C (biônica), e um novo caminho tls (%gs:20) para -fstack-protector, -fstack-protector-all e -fstack-protector-strong usando compiladores GCC 4.6 e versões posteriores.

      Observação: a configuração -mstack-protector-guard por si só não ativa as opções -fstack-protector*.

    • A função android_setCpu() foi adicionada a sources/android/cpufeatures/cpu-features.c para ser usada quando não for possível acionar a detecção automática via /proc no Android 4.1 e versões mais recentes (Problema 164154 do Chromium, link em inglês).
    Correções importantes de bugs:
    • Foi corrigida a recriação desnecessária de arquivos de objeto durante o uso do script ndk-build (problema 39810, link em inglês).
    • Foi corrigida uma falha do vinculador com a versão NDK 8c para o Mac OS X 10.6.x que produzia a seguinte erro:
      dyld: lazy symbol binding failed: Symbol not found: _memmem
      Referenced from: ...../arm-linux-androideabi/bin/ld
      Expected in: /usr/lib/libSystem.B.dylib
      Esse problema foi causado pela criação no Mac OS X 10.7, que produzia binários que eram não é compatível com o Mac OS 10.6.x e o NDK.
    • As opções -x c++ foram removidas do script de build autônomo do Clang++ (problema 39089).
    • Foram corrigidos problemas usando a opção NDK_TOOLCHAIN_VERSION=clang3.1 em Cygwin (problema 39585).
    • O script make-standalone-toolchain.sh foi corrigido para permitir a geração de um conjunto de ferramentas autônomo usando os ambientes Cygwin ou MinGW. O conjunto de ferramentas final pode ser usado nos ambientes Cygwin, MingGW ou CMD.exe (problema 39915, problema 39585).
    • Foi adicionada a opção SL_IID_ANDROIDBUFFERQUEUESOURCE ausente nas compilações android-14 para ARM e X86. (problema 40625).
    • Foi corrigida a detecção de CPU do x86 para o recurso ANDROID_CPU_X86_FEATURE_MOVBE. (problema 39317, link em inglês).
    • Foi corrigido um problema que impede que a Biblioteca Standard Template (STL, na sigla em inglês) use fontes C++ sem a extensão de arquivo .cpp.
    • O erro em reload1.c:1061 do compilador interno do GCC 4.6 ARM foi corrigido (problema 20862).
    • Foi corrigido o erro do compilador interno do GCC 4.6 ARM em emit-rtl.c:1954. (problema 22336).
    • Foi corrigido o erro do compilador interno do GCC 4.4.3 ARM em postreload.c:396. (problema 22345).
    • Foi corrigido o problema com o GCC 4.6/4.7 que pulava as funções lambda. (Problema 35933, link em inglês)
    Outras correções de bugs:
    • Correções de arquivo de cabeçalho do NDK:
      • __WINT_TYPE__ e wint_t foram corrigidos para terem o mesmo tipo.
      • Foi corrigido um erro de digitação em android/bitmap.h (problema 15134, link em inglês).
      • Foi corrigido um erro de digitação em errno.h.
      • Foi adicionado um marcador para a presença de __STDC_VERSION__ em sys/cdefs.h (problema 14627, link em inglês).
      • Os cabeçalhos em byteswap.h e dirent.h foram reorganizados.
      • limits.h foi corrigido para incluir page.h, que fornece as configurações PAGE_SIZE (problema 39983, link em inglês).
      • O tipo de retorno de glGetAttribLocation() e glGetUniformLocation() foi corrigido de int para GLint.
      • Foi corrigida a constante __BYTE_ORDER para builds x86 (Problema 39824, link em inglês).
    • Foi corrigido o script ndk-build para não substituir -Os por -O2 para versões ARM.
    • Foram corrigidos scripts de criação para permitir a substituição das configurações HOST_AWK, HOST_SED e HOST_MAKE.
    • Foi corrigido o problema de ld.gold em versões fsck_msdos que vinculam objetos de compilação pelo compilador Intel C/C++ (ICC).
    • O suporte para ARM EHABI no Clang foi corrigido para estar em conformidade com as especificações.
    • O GNU Debugger (GDB) foi corrigido para reduzir o tempo gasto em percursos no mapa do link do destino durante eventos solib (problema 38402, link em inglês).
    • Foi corrigido o arquivo libgcc.a ausente na vinculação de bibliotecas compartilhadas.
    Outras mudanças:
    • As funções atômicas integradas de 64 bits de ARM para GCC 4.6 foram recompiladas.
    • Foi adicionada a documentação para a latência de saída de áudio, além de outras documentações e correções.
    • Foram corrigidas as versões de depuração com o Clang para que as funções não nulas acionem um sinal SIGILL para caminhos sem uma instrução de retorno.
    • make-standalone-toolchain.sh foi atualizado para aceitar o sufixo -clang3.1, que é equivalente a adicionar --llvm-version=3.1 ao conjunto de ferramentas do GCC 4.6.
    • O URL do relatório do bug do GCC e do Clang foi atualizado para https://source.android.com/source/report-bug s.html.
    • Foi adicionada compatibilidade com ARM ELM para llvm-objdump.
    • O aviso de tratamento da entrada c como c++ foi removido nas versões do Clang.
    • Atualização de criação para que somente a versão de 32 bits de libiberty.a seja criada e colocada em lib32/.
    Mudanças importantes:
    • O compilador Clang 3.1 foi adicionado ao NDK. O GNU Compiler Collection (GCC) 4.6 ainda é definido por padrão. Por isso, você precisa ativar explicitamente a opção do compilador Clang da seguinte forma:
      • Para ndk-build, exporte NDK_TOOLCHAIN_VERSION=clang3.1 ou adicione esta configuração de variável de ambiente a Application.mk.
      • Para criações autônomas, adicione --llvm-version=3.1 a make-standalone-toolchain.sh e substitua CC e CXX no seu makefile por <tool-path>/bin/clang e <tool-path>/bin/clang++. Consulte STANDALONE-TOOLCHAIN.html para mais detalhes.

      Observação: esse recurso é experimental. Faça o teste e informe sobre qualquer problema.

    • O vinculador Gold ld.gold foi adicionado para o conjunto de ferramentas do Windows. O vinculador Gold também é o padrão para ARM e X86 em todos os hosts. Você pode substituí-lo para usar o vinculador ld.bfd adicionando LOCAL_LDFLAGS += -fuse-ld=bfd a Android.mk ou transmitindo -fuse-ld=bfd para a linha de comando g++/clang++ que faz a vinculação.
    • Foram adicionadas verificações de espaços no caminho do NDK para os scripts ndk-build[.cmd] e ndk-gdb, para evitar erros de criação difíceis de diagnosticar.
    • Foram feitas as seguintes alterações no tratamento do nível da API:
      • A lógica de criação foi modificada para que projetos que especificam android-10 por meio de android-13 em APP_PLATFORM, project.properties ou default.properties vinculem android-9, em vez de android-14.
      • A versão foi atualizada para que os executáveis que usam android-16 (Jelly Bean) ou posterior sejam compilados com a opção -fPIE para executáveis independentes de posição (PIE, na sigla em inglês). Uma nova opção de APP_PIE permite que você controle esse comportamento. Consulte APPLICATION-MK.html para mais detalhes.

        Observação: todos os níveis de API acima de 14 continuam vinculando platforms/android-14 e nenhum novo platforms/android-N foi adicionado.

      • O ndk-build foi modificado para fornecer avisos se o nível de API ajustado for maior do que android:minSdkVersion no AndroidManifest.xml do projeto.
    • A biblioteca auxiliar cpu-features foi atualizada para incluir mais recursos específicos do ARM. Consulte sources/android/cpufeatures/cpu-features.h para mais detalhes.
    • O longo duplo foi modificado na plataforma X86 para 8 bytes. Esses tipos de dados agora têm o mesmo tamanho de um duplo, mas ainda são tratados como um tipo distinto.
    • A versão foi atualizada para APP_ABI=armeabi-v7a:
      • Esse tipo de criação foi modificado para transmitir o parâmetro -march=armv7-a ao vinculador. Essa mudança garante que as bibliotecas específicas de v7 e crt*.o sejam vinculadas corretamente.
      • -mfpu=vfpv3-d16 foi adicionado ao ndk-build, em vez da opção -mfpu=vfp usada em versões anteriores
    Correções importantes de bugs:
    • Foi corrigido um problema em que a execução de make-standalone-toolchain.sh com privilégios de raiz tornava o conjunto de ferramentas autônomo inacessível para alguns usuários (problema 35279).
      • Todos os arquivos e executáveis no pacote de versão do NDK estão configurados para ter permissões de leitura e execução para todos.
      • A informação de propriedade/grupo de libstdc++.a agora é preservada quando copiada.
    • O \r redundante foi removido da pré-compilação do Windows echo.exe. O \r redundante gerava a falha de gdb.setup no GNU Debugger (GDB) porque se tornou parte do caminho incorretamente (problema 36054).
    • Os builds paralelos do Windows que às vezes falhavam devido a problemas de timing foram corrigidos na implementação de host-mkdir (problema 25875).
    • O GNU libstdc++ do GCC 4.4.3 foi corrigido para não mesclar nomes de typeinfo por padrão. Para mais detalhes, consulte toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo (problema 22165, link em inglês).
    • Foi corrigido um problema no contexto de null no cp/mangle.c::write_unscoped_name do GCC 4.6, em que o GCC podia falhar quando o contexto era null e a referência era cancelada em TREE_CODE.
    • Foram corrigidas as falhas do GCC 4.4.3 em definições de tipo específicas do ARM NEON para dados flutuantes (problema 34613).
    • Foi corrigida a implementação _IteWrapper::operator*() interna de STLport, em que um local de pilha desatualizado que continha o valor não referenciado era retornado e causava falhas no momento da execução (problema 38630, link em inglês).
    • Correções específicas de ARM:
      • O ARM GCC 4.4.3/4.6 g++ foi corrigido para não avisar que mangling de <va_list> foi alterado no GCC 4.4. A solução alternativa de usar a chave -Wno-psabi para evitar esse aviso não é mais obrigatória.
      • Foi corrigido um problema em que um projeto com sufixos .arm ou .neon em LOCAL_SRC_FILES também usava APP_STL. Com APP_STL, o script ndk-build pesquisa arquivos C++ em LOCAL_SRC_FILES antes de adicionar caminhos STL header/lib à compilação. O ndk-build foi modificado para filtrar os sufixos .arm e .neon antes da pesquisa. Caso contrário, os itens em LOCAL_SRC_FILES, como myfile.cpp.arm.neon, não serão compilados como código C++.
      • binutils-2.21/ld.bfd foi corrigido para poder vincular objetos de binutils mais antigos sem tag_FP_arch, o que gerava mensagens de erro como falha na declaração no GNU Binutils (problema 35209, link em inglês).
      • Foi removido o aviso Atributo 44 do objeto EABI desconhecido quando binutils-2.19/ld vincula objetos pré-compilados pelo binutils-2.21 mais recente.
      • Foi corrigido um problema na compilação de stdc++ no GNU com -mthumb e -march=armv7-a, modificando make-standalone-toolchain.sh para preencher headers/libs no subdiretório armv7-a/thumb (problema 35616).
      • Foi corrigido o erro de realocação de R_ARM_THM_CALL sem resolução. (problema 35342).
      • Foi corrigido um erro do compilador interno em reload1.c:3633, causado pelo back-end do ARM esperando o tipo de operando errado ao estender o sinal de char (problema 50099 do GCC, link em inglês).
      • Foi corrigido o erro do compilador interno com valor de deslocamento negativo. (problema do GCC, link em inglês).
    • -fstack-protector foi corrigido para X86, que também é o padrão para o destino de ABI x86 do ndk-build.
    • Correções específicas de MIPS:
      • A extremidade STLport foi corrigida com a configuração de _STLP_LITTLE_ENDIAN como 1 na complilação de libstlport_* de MIPS.
      • O problema com __builtin_unreachable do GCC foi corrigido na compilação de LLVM (problema 54369 do GCC, link em inglês).
      • Foi feito o backport de uma correção para o processo de compilação cc1, que consumia 100% da CPU (problema 50380 do GCC, link em inglês).
    • Correções específicas do GNU Debugger:
      • O suporte a Python foi desativado no build do gdb-7.x. Antes disso, a função de configuração do gdb-7.x podia escolher qualquer versão do Python disponível no host e criava gdb com uma dependência conectada em uma versão específica do Python (problema 36120).
      • ndk-gdb foi corrigido quando APP_ABI contém all e não corresponde a nenhuma das arquiteturas conhecidas (problema 35392).
      • A compatibilidade com o nome do caminho do Windows foi corrigida, mantendo o caractere : caso possa fazer parte de um caminho do Windows que começa com uma letra de drive (problema 12843 do GDB, link em inglês).
      • Foi corrigida a adição de compatibilidade com pontos de interrupção de hardware para ARM em gdbserver (problema do GDB, link em inglês).
      • Foi adicionada uma correção para somente ler o solibs atual quando o vinculador for consistente. Essa mudança acelera o gerenciamento do evento solib (problema 37677).
      • Foi adicionada uma correção para fazer tentativas repetidas de encontrar pontos de interrupção solib. O GDB agora tenta enable_break() novamente durante cada chamada para svr4_current_sos() até a conclusão do processo (mudança 43563).
      • Foi corrigido um problema em que gdb não parava em pontos de interrupção localizados em bibliotecas dlopen-ed (problema 34856).
      • SIGILL foi corrigido no vinculador dinâmico ao chamar dlopen(), no sistema em que /system/bin/linker tinha os símbolos removidos e rtld_db_dlactivity() era implementado como Thumb, devido à não preservação do LSB de sym_addr (Problema 37147, link em inglês).
    Outras correções de bugs:
    • Correção de cabeçalhos do NDK:
      • O código arch-mips/include/asm/* foi corrigido porque tinha sido removido incorretamente do kernel original (mudança 43335, link em inglês).
      • Os dados do membro da estrutura __unused foram substituídos por __linux_unused em linux/sysctl.h e linux/icmp.h para evitar conflito com #define __unused em sys/cdefs.h.
      • fenv.h foi corrigido para funções C delimitadas por __BEGIN_DECLS e __END_DECLS.
      • As funções não implementadas foram removidas em malloc.h.
      • A definição stdint.h de uint64_t foi corrigida para compiladores ANSI (problema 1952, link em inglês).
      • As macros do pré-processador foram corrigidas em <arch>/include/machine/*.
      • link.h foi substituído para MIPS pela nova versão que é compatível com todas as plataformas.
      • linux-unistd.h foi removido.
      • As macros específicas de GLibc LONG_LONG_MIN, LONG_LONG_MAX e ULONG_LONG_MAX foram movidas de <pthread.h> para <limits.h>.
    • Foi corrigido um buffer excedente em ndk-stack-parser.
    • _STLP_USE_EXCEPTIONS foi corrigido, quando não definido, para omitir todas as declarações e usos de __Named_exception. As configurações de compilação e uso de __Named_exceptionocorrem somente quando STLport é autorizado a usar exceções.
    • Foi corrigida a criação de pacotes do NDK somente para Linux sem gerar um código do Windows. Use o configurações abaixo para realizar esse tipo de build:
      ./build/tools/make-release.sh --force --systems=linux-x86
    • libc.so foi corrigido para não exportar atexit() e __do_handler. Esses símbolos são exportados para versões ARM pela versão do sistema da biblioteca C para compatibilidade com bibliotecas nativas legadas. Os itens gerados pelo NDK não devem referenciá-las diretamente. Em vez disso, cada biblioteca ou executável compartilhado precisa incorporar a própria versão desses símbolos, fornecida por crtbegin_*.o.

      Caso seu projeto seja vinculado às opções -nostdlib -Wl,--no-undefined, forneça seu próprio __dso_handle porque crtbegin_so.o não está vinculado nesse caso. O conteúdo de __dso_handle não importa, conforme mostrado no seguinte exemplo de código:

      extern "C" {
       
      extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
       
      void *__dso_handle;
      }
    • O decodificador de símbolos para ARM usado em objdump para entradas plt foi corrigido para gerar uma forma mais legível de function@plt.
    • Foram removidos os símbolos a seguir, que foram introduzidos em GCC 4.6 libgcc.a da biblioteca libc.so da plataforma X86: __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1 e __aeabi_unwind_cpp_pr2.
    • Foram removidos .ctors, .dtors e .eh_frame não usados no crt*_so.S de MIPS.
    • ndk-gdb foi atualizado para só capturar a última linha de saída para ndk-build DUMP_XXXX. Essa mudança garante que, se Application.mk ou Android.mk imprimir algo com a sintaxe $(info ...), isso não será inserido no resultado de DUMP_XXXX (Mais informações, link em inglês).
    Outras mudanças:
    • Os cabeçalhos arch-x86 e arch-mips foram removidos de platforms/android-[3,4,5,8]. Esses cabeçalhos estavam incompletos, já que as ABIs X86 e MIPS são compatíveis somente com a API de nível 9 ou mais recentes.
    • O c ++ simplificado inclui o caminho em pacotes independentes, como mostrado abaixo. (problema 35279).
      <path>/arm-linux-androideabi/include/c++/4.6.x-google
        to:
      <path>/include/c++/4.6/
      
    • O ndk-build foi corrigido para reconhecer novas extensões de arquivo C++ por padrão: .cc .cp .cxx .cpp .CPP .c++ .C. Você ainda pode usar LOCAL_CPP_EXTENSION para substituir essas configurações de extensão.
    • Foi corrigido um problema em samples/san-angeles que gerava uma tela preta ou um frame congelado na reinicialização.
    • As APIs descontinuadas foram substituídas em exemplos do NDK (problema 20017, link em inglês).
      • hello-gl2 do android-5 para android-7
      • native-activity do android-9 para o android-10
      • native-audio do android-9 para o android-10
      • native-plasma do android-9 para o android-10
    • Foi adicionada uma nova marca para executáveis do Android com um esquema mais simples na seção .note.android.ident (definida em crtbegin_static/dynamic.o) para que as ferramentas de depuração possam agir corretamente. O membro da estrutura e os valores são definidos como da seguinte forma:
      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 */
      }

      As antigas opções de marca na seção .note.ABI-tag estão obsoletas.

    • Foi adicionado um novo script run-tests-all.sh, que chama run-tests.sh e standalone/run.sh com várias condições. O script run-tests.sh é executado sem a opção --abi e foi aprimorado para compilar a maioria dos testes para todas as ABIs com suporte e funcionar em todos os dispositivos conectados.

    Os principais recursos desta versão são um novo conjunto de ferramentas GNU Compiler Collection (GCC) 4.6 e o GNU Debugger (GDB) 7.3.x, que adiciona suporte à depuração para a imagem do sistema Android 4.1 (nível 16 da API).

    Correções importantes de bugs:
    • Foram corrigidos problemas de LOCAL_SHORT_COMMANDS nos ambientes do Mac OS e Windows Cygwin para bibliotecas estáticas. A geração de arquivos de lista é mais rápida e não é regenerada para evitar recriações de projetos repetidas.
    • Vários problemas foram corrigidos em ndk-gdb:
      • A ferramenta foi atualizada para transmitir sinalizações -e, -d e -s para o adb de maneira mais consistente.
      • A ferramenta foi atualizada para aceitar nomes de série de dispositivos que contenham espaços.
      • A ferramenta foi atualizada para recuperar informações de /system/bin/link. Assim, o gdb no host pode definir um ponto de interrupção em __dl_rtld_db_dlactivity e estar alerta às atividades do vinculador (por exemplo, fazer nova verificação de símbolos solib quando dlopen() for chamado).
    • O ndk-build clean foi corrigido no Windows, porque falhava ao remover ./libs/*/lib*.so.
    • ndk-build.cmd foi corrigido para retornar um ERRORLEVEL diferente de zero quando make falhar.
    • libc.so foi corrigido para interromper a exportação incorreta de símbolos __exidx_start e __exidx_end.
    • SEGV foi corrigido para liberação da pilha após __libc_init para ARM e MIPS.
    Mudanças importantes:
    • O conjunto de ferramentas do GCC 4.6 (binutils 2.21 com gold e GDB 7.3.x) foi adicionado para coexistir com o original do GCC 4.4.3 (binutils 2.19 e GDB 6.6).
      • Agora, GCC 4.6 é o conjunto de ferramentas padrão. Você pode definir NDK_TOOLCHAIN_VERSION=4.4.3 em Application.mk para selecionar o original.
      • A compatibilidade com o vinculador gold está disponível apenas para arquiteturas ARM e x86 nos hosts do Linux e do Mac OS. Esse suporte fica desativado por padrão. Adicione LOCAL_LDLIBS += -fuse-ld=gold em Android.mk para ativá-la.
      • Os programas compilados com -fPIE exigem o novo GDB para depuração, incluindo binários em imagens do sistema Android 4.1 (API de nível 16).
      • A ferramenta binutils 2.21 do ld contém correções da versão 2.22 que passaram por backport:
        • O ld --gc-sections foi corrigido porque retinha incorretamente referências zumbi a bibliotecas externas (mais informações, link em inglês).
        • O comando strip de ARM foi corrigido para preservar p_align e p_flags originais em GNU_RELRO, caso sejam válidos. Sem essa correção, os programas criados com -fPIE não podiam ser depurados (Mais informações, link em inglês).
      • A otimização de sincos() foi desativada para compatibilidade com plataformas mais antigas.
    • As opções de criação foram atualizadas para ativar o bit Never eXecute (NX) e as proteções relro/bind_now por padrão:
      • --noexecstack foi adicionado ao assembler e -z noexecstack ao vinculador que fornece proteção NX contra ataques de excedente de buffer com a ativação do bit NX na pilha e no heap.
      • -z relro e -z now foram adicionados ao vinculador para aumentar a proteção de seções de dados internos após a vinculação contra vulnerabilidades de segurança causadas por corrupção de memória (mais informações: 1, 2).
      • Esses recursos podem ser desativados usando as seguintes opções:
        1. Desative a proteção NX configurando a opção --execstack para o assembler e -z execstack para o vinculador.
        2. Desative o aumento da proteção de dados internos configurando as opções -z norelro e -z lazy para o vinculador.
        3. Desative essas proteções no NDK jni/Android.mk configurando a seguintes opções:
          LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
          DISABLE_RELRO=true             # disable "-z relro" and "-z now"
          

        Consulte docs/ANDROID-MK.html para mais detalhes.

    • Foi adicionada uma marca para os executáveis do Android com a seção .note.ABI-tag (em crtbegin_static/dynamic.o) para que as ferramentas de depuração funcionem corretamente. A estrutura membro e valores são definidos da seguinte maneira:
      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 */
      }
    Outras correções de bugs:
    • A realocação truncada de mips-linux-gnu foi corrigida para corresponder ao problema de R_MIPS_TLS_LDM (mais informações, link em inglês).
    • As falhas de segmentação da ferramenta ld foram corrigidas durante o uso de --gc-sections (mais informações, link em inglês).
    • O problema de contagem de GOT_PAGE do MIPS foi corrigido. (mais informações, link em inglês).
    • O link do símbolo de aviso para mips_elf_count_got_symbols foi corrigido.
    • O link do símbolo de aviso para mips_elf_allocate_lazy_stub foi corrigido.
    • O .dynamic.de MIPS foi movido para o segmento de dados, por isso, é gravável.
    • Os valores codificados por símbolos foram substituídos por tamanhos de segmento corretos para o MIPS.
    • A opção -mno-shared foi removida dos padrões no conjunto de ferramentas do MIPS. O padrão para o conjunto de ferramentas do Android é -fPIC (ou -fpic, se compatível). Se você não especificar explicitamente -mshared, -fpic, -fPIC, -fpie ou -fPIE, o compilador MIPS adicionará -mno-shared, que desativa PIC. O compilador foi corrigido para não adicionar -mno-shared nesse caso.
    • Foi corrigido o uso de nomes de pacotes incorretos em exemplos hello-jni e two-libs para que o projeto tests abaixo deles possa ser compilado.
    Outras mudanças:
    • Mudança dos locais dos binários:
      • gdbserver foi movido de toolchain/<arch-os-ver>/prebuilt/gdbserver para prebuilt/android-<arch>/gdbserver/gdbserver.
      • O prefixo do conjunto de ferramentas do x86 foi renomeado de i686-android-linux- para i686-linux-android-.
      • sources/cxx-stl/gnu-libstdc++/include e lib foram movidos para sources/cxx-stl/gnu-libstdc++/4.6 quando compilados com o GCC 4.6 ou para sources/cxx-stl/gnu-libstdc++/4.4.3 quando o GCC 4.4.3 é usado para esse processo.
      • libbfd.a e libintl.a foram movidos de lib/ para lib32/.
    • Vários scripts foram adicionados e aprimorados na recriação e teste do conjunto de ferramentas do NDK:
      • build-mingw64-toolchain.sh foi adicionado para gerar um novo conjunto de ferramentas hospedado no Linux que gera arquivos executáveis Win32 e Win64.
      • A velocidade de download-toolchain-sources.sh foi aprimorada com o uso do comando clone e usando checkout somente para os diretórios necessários para a criação de binários do conjunto de ferramentas do NDK.
      • Foram adicionados os scripts build-host-gcc.sh e build-host-gdb.sh.
      • tests/check-release.sh foi adicionado para verificar o conteúdo de determinado diretório de instalação do NDK ou de um pacote do NDK que já existe.
      • Os testes autônomos de tests/standalone/run.sh foram reescritos.
    • O cabeçalho if_dl.h foi removido de todas as plataformas e arquiteturas. Os elementos AF_LINK e sockaddr_dl que ele descreve são específicos para BSD (ou seja, eles não existem no Linux).

    Esta versão do NDK inclui suporte a MIPS ABI e algumas outras correções.

    Novos recursos:
    • Foi adicionado suporte para o MIPS ABI, que permite gerar o código de máquina que é executado em dispositivos Android baseados em MIPS compatíveis. Os principais recursos do MIPS incluem os conjuntos de ferramentas específicos, cabeçalhos de sistema, bibliotecas e compatibilidade com depuração. Para saber mais sobre a compatibilidade com o MIPS, consulte docs/CPU-MIPS.html no pacote do NDK.

      Por padrão, o código é gerado para dispositivos com processador ARM. É possível adicionar mips à sua definição de APP_ABI no arquivo Application.mk para criar para plataformas MIPS. Por exemplo, a linha a seguir instrui o ndk-build a criar seu código para três ABIs diferentes:

      APP_ABI := armeabi armeabi-v7a mips

      A menos que você dependa de fontes assembly específicas de arquitetura, como um código assembly para ARM, você não precisará mexer nos arquivos Android.mk para compilar o criar de máquina MIPS.

    • Você pode criar um conjunto de ferramentas autônomo de MIPS usando a opção --arch=mips ao chamar make-standalone-toolchain.sh. Consulte docs/STANDALONE-TOOLCHAIN.html para ver mais detalhes.

    Observação: para garantir que seus apps sejam disponibilizados aos usuários somente quando puderem ser executados pelos dispositivos deles, o Google Play vai filtrar os apps com base nas informações do conjunto de instruções incluídas neles. Nenhuma ação sua é necessária para ativar a filtragem. Além disso, o próprio sistema Android também verifica seu aplicativo no momento da instalação e permite que esse processo só continue se o aplicativo fornecer uma biblioteca que seja compilada para a arquitetura de CPU do dispositivo.

    Correções importantes de bugs:
    • Foi corrigido um erro de digitação na implementação de GAbi++ em que o resultado de dynamic_cast<D>(b) do objeto de classe de base b para a classe derivada D está ajustado incorretamente na direção oposta da classe de base (problema 28721, link em inglês).
    • Foi corrigido um problema em que make-standalone-toolchain.sh falha ao copiar libsupc++.*.
    Outras correções de bugs:
    • O ndk-build.cmd foi corrigido para garantir que ndk-build.cmd funcione corretamente mesmo que o usuário tenha redefinido a variável de ambiente SHELL, que pode ser modificada ao instalar uma variedade de ferramentas de desenvolvimento em ambientes Windows.

    Esta versão do NDK inclui uma correção importante para dispositivos baseados em Tegra2 e algumas outras correções e melhorias:

    Correções importantes de bugs:
    • Foram corrigidos binários de GNU STL armeabi-v7a para não haver falhas em dispositivos diferentes de NEON. Os arquivos fornecidos com o NDK r7b não foram configurados corretamente, resultando em falhas em dispositivos baseados no Tegra2 e outros ao tentar usar certas funções de ponto flutuante (por exemplo, cosf, sinf, expf).
    Mudanças importantes:
    • Foi adicionado suporte para diretórios de saída personalizados por meio da variável de ambiente NDK_OUT. Quando definida, essa variável é usada para armazenar todos os arquivos intermediários gerados, em vez de $PROJECT_PATH/obj. A variável também é reconhecida por ndk-gdb.
    • Foi adicionada compatibilidade com a criação de módulos com centenas ou até milhares de arquivos de origem, definindo LOCAL_SHORT_COMMANDS para true no seu Android.mk.

      Essa mudança força o sistema de criação do NDK a colocar a maioria das opções de vinculador ou arquivador em arquivos de lista, como uma solução alternativa para limitações de comprimento de linha de comando. Consulte docs/ANDROID-MK.html para saber mais detalhes.

    Outras correções de bugs:
    • A implementação de android_getCpuCount() foi corrigida na biblioteca auxiliar cpufeatures. Em determinados dispositivos, em que os núcleos são ativados dinamicamente pelo sistema, a implementação anterior informava o número total de núcleos ativos na primeira vez em que a função era chamada, em vez do número total de núcleos fisicamente disponíveis.

    Esta versão do NDK inclui correções para versões nativas do Windows, Cygwin e muitas outras melhorias:

    Correções importantes de bugs:
    • sys/atomics.h foi atualizado para evitar problemas de correção em alguns dispositivos com processador ARM com vários núcleos. Recrie suas fontes não modificadas com esta versão do NDK para que esse problema seja completamente eliminado. Para mais detalhes, consulte docs/ANDROID-ATOMICS.html.
    • Reversão do binutils 2.19 para corrigir problemas de depuração que apareceram no NDK r7 (que usa binutils 2.20.1).
    • O ndk-build foi corrigido no Linux de 32 bits. Um erro de empacotamento colocou uma versão de 64 bits do executável awk em prebuilt/linux-x86/bin no NDK r7.
    • A criação do Windows nativa foi corrigida (ndk-build.cmd). Outros modos de criação não foram afetados. Estas foram as correções:
      • Foi removido um bug de loop infinito / pilha excedente que acontecia ao tentar chamar ndk-build.cmd de um diretório que não estava no topo do caminho do projeto (por exemplo, em qualquer subdiretório).
      • Foi corrigido um problema em que os arquivos de dependência gerados automaticamente eram ignorados. Isso significa que a atualização de um cabeçalho não acionou a recompilação de fontes que o incluíam.
      • Foi corrigido um problema em que caracteres especiais em arquivos ou caminhos, além de espaços e aspas, não eram tratados corretamente.
    • O conjunto de ferramentas autônomo foi corrigido para gerar binários apropriados no uso de -lstdc++ (por exemplo, vinculando o tempo de execução do GNU libstdc++ C++). Use -lgnustl_shared se quiser vincular a versão da biblioteca compartilhada ou -lstdc++ para a versão estática.

      Consulte docs/STANDALONE-TOOLCHAIN.html para saber mais sobre essa correção.

    • O gnustl_shared foi corrigido no Cygwin. O vinculador informava que não podia encontrar libsupc++.a, mesmo quando o arquivo estava no local certo.
    • O link do Cygwin C++ foi corrigido quando não usa qualquer tempo de execução C++ especificado por meio de APP_STL.
    Outras mudanças:
    • Quando seu app usar o tempo de execução GNU libstdc++, o compilador não forçará mais a ativação de exceções e RTTI. Essa mudança resulta em um código menor.

      Se você precisar desses recursos, faça o seguinte:

      • Ative exceções e/ou RTTI explicitamente nos seus módulos ou Application.mk (recomendado).
      • Defina APP_GNUSTL_FORCE_CPP_FEATURES para 'exceptions', 'rtti' ou ambos em Application.mk. Consulte docs/APPLICATION-MK.html para saber mais detalhes.
    • ndk-gdb agora funciona corretamente quando seu app tem serviços privados em execução em processos independentes. Ele depura o processo principal do aplicativo, em vez do primeiro listado por ps, que é normalmente um processo de serviço.
    • Foi corrigido um bug raro em que o NDK r7 não cumpre o valor LOCAL_ARM_MODE e sempre compila determinados arquivos de origem (mas não todos) para instruções de 32 bits.
    • STLport: atualize as origens para que correspondam à versão da plataforma Android. Esta atualização corrige alguns pequenos bugs:
      • A instanciação de um tipo incompleto foi corrigida.
      • Foi corrigido um erro de digitação menor, "==" versus "=".
      • memmove foi usado, em vez de memcpy em string::assign
      • Foi adicionado melhor gerenciamento de IsNANorINF, IsINF, IsNegNAN etc.

      Para ver os detalhes completos, consulte o registro de confirmação.

    • STLport: foram removidos cinco inicializadores estáticos desnecessários da biblioteca.
    • As bibliotecas GNU libstdc++ para armeabi-v7a foram compiladas por engano para armeabi. Essa mudança não teve impacto sobre a correção, mas o uso da ABI correta deve fornecer um desempenho um pouco melhor.
    • A biblioteca auxiliar cpu-features foi atualizada para informar três recursos opcionais de CPU x86 (SSSE3, MOVBE e POPCNT). Consulte docs/CPU-FEATURES.html para mais detalhes.
    • docs/NDK-BUILD.html foi atualizado para mencionar NDK_APPLICATION_MK, em vez de NDK_APP_APPLICATION_MK, para selecionar um arquivo Application.mk personalizado.
    • Cygwin: o ndk-build não cria mais um arquivo "NUL" vazio no diretório atual quando invocado.
    • Cygwin: foi adicionada uma melhor detecção automática de dependência. Na versão anterior, ela não funcionava corretamente nos seguintes casos:
      • Quando o prefixo da unidade Cygwin não era /cygdrive.
      • Ao usar montagens sem unidade, por exemplo, quando o Cygwin traduz /home para \\server\subdir, em vez de C:\Some\Dir.
    • Cygwin: ndk-build não tenta usar as ferramentas nativas do Windows em $NDK/prebuilt/windows/bin com determinadas versões do Cygwin e/ou do GNU Make.

    Esta versão do NDK inclui novos recursos para ser compatível com a plataforma Android 4.0, assim como muitas outras adições e melhorias:

    Novos recursos
    • Foram adicionadas as APIs de NDK oficiais para o Android 4.0 (API de nível 14), que adicionam os seguintes recursos nativos à plataforma:
      • Foi adicionada a API multimídia nativa baseada no Khronos Group OpenMAX AL 1.0.1 padrão. Os novos cabeçalhos <OMXAL/OpenMAXAL.h> e <OMXAL/OpenMAXAL_Android.h> permitem que aplicativos direcionados à API de nível 14 executem a saída de multimídia diretamente do código nativo usando uma nova interface de fila de buffer específica do Android. Para mais detalhes, consulte docs/openmaxal/index.html e http://www.khronos.org/openmax/ (link em inglês).
      • A API de áudio nativa baseada no Khronos Group OpenSL ES 1.0.1 padrão foi atualizada. Com o nível 14 da API, é possível decodificar áudio compactado (por exemplo, MP3, AAC, Vorbis) para o PCM. Para saber mais detalhes, consulte docs/opensles/index.html e http://www.khronos.org/opensles/ (link em inglês).
    • Foi adicionado suporte para CCache. Para acelerar recriações grandes, defina a variável de ambiente NDK_CCACHE como ccache (ou o caminho para seu binário ccache). Quando declarado, o sistema de criação do NDK usa automaticamente o CCache ao compilar qualquer arquivo de origem. Por exemplo:
      export NDK_CCACHE=ccache
      

      Observação: o CCache não está incluído na versão do NDK. Por isso, ele precisa estar instalado antes do uso. Para mais informações sobre o CCache, consulte http://ccache.samba.org (link em inglês).

    • Foi adicionada compatibilidade com a configuração APP_ABI para all a fim de indicar que você quer criar seus módulos NDK para todas as ABIs compatíveis com sua versão correspondente. Isso significa que qualquer uma das duas linhas a seguir em seu Application.mk são equivalentes a esta versão:
      APP_ABI := all
      APP_ABI := armeabi armeabi-v7a x86
      

      Isso também funciona se você definir APP_ABI ao chamar ndk-build a partir da linha de comando, que é uma maneira rápida de verificar se o projeto foi criado para todas as ABIs compatíveis sem alterar Application.mk file. Por exemplo:

      ndk-build APP_ABI=all
      
    • Foi adicionada uma variável LOCAL_CPP_FEATURES a Android.mk que permite declarar quais recursos de C++ (RTTI ou Exceções) seu módulo usa. Isso garante que a vinculação final funcione corretamente se você tiver módulos pré-compilados que dependam desses recursos. Consulte docs/ANDROID-MK.html e docs/CPLUSPLUS-SUPPORT.html para mais detalhes.
    • Foram abreviados os caminhos para arquivos de origem e de objeto que são usados em comandos de build. Ao invocar $NDK/ndk-build a partir do caminho do seu projeto, os caminhos para os arquivos binários, de objeto e de origem que são transmitidos para os comandos de criação ficaram significativamente menores porque são transmitidos em relação ao diretório atual. Isso é útil ao criar projetos com muitos arquivos de origem, para evitar limites no comprimento máximo da linha de comando compatível com o sistema operacional do host. O comportamento não se altera se você invoca ndk-build de um subdiretório da sua árvore de projetos nem se você define NDK_PROJECT_PATH para apontar para um diretório específico.
    Recursos experimentais
    Agora, é possível criar seus arquivos de origem do NDK no Windows sem Cygwin chamando o script ndk-build.cmd a partir da linha de comando do caminho do seu projeto. O script usa exatamente os mesmos argumentos que o script ndk-build original. O pacote do Windows NDK vem com seus próprios binários pré-compilados para o GNU Make, Awk e outras ferramentas exigidas pela versão. Você não precisa instalar mais nada para acessar um sistema de criação funcional.

    Importante: o ndk-gdb não funciona no Windows, então ainda é necessário usar o Cygwin para a depuração.

    Esse recurso ainda é experimental. Fique à vontade para testá-lo e informar qualquer problema no banco de dados público de bugs ou no fórum público. Todas as amostras e testes de unidade fornecidos com o NDK são compilados com êxito com esse recurso.

    Correções importantes de bugs:
    • As bibliotecas compartilhadas importadas agora são instaladas por padrão no local de instalação de destino (libs/<abi>) se APP_MODULES não for definido no seu Application.mk. Por exemplo, se um módulo de alto nível foo importar um módulo bar, libfoo.so e libbar.so serão copiados para o local de instalação. Antes disso, apenas libfoo.so era copiado, a menos que você listasse bar no seu APP_MODULES também. Se você definir APP_MODULES explicitamente, o comportamento se manterá inalterado.
    • ndk-gdb agora funciona corretamente para atividades com várias categorias nos filtros de intent MAIN.
    • As importações de bibliotecas estáticas agora são adequadamente transitivas. Por exemplo, se um módulo de alto nível foo importar a biblioteca estática bar que importa zoo, o libfoo.so agora será vinculado a libbar.a e libzoo.a.
    Outras mudanças
    • docs/NATIVE-ACTIVITY.HTML: foi corrigido um erro de digitação. O nível mínimo de API precisa ser 9, e não 8 para atividades nativas.
    • docs/STABLE-APIS.html: foi adicionada a documentação que lista a EGL como uma API estável com suporte (do nível 9 em diante).
    • download-toolchain-sources.sh: atualizado para fazer o download de origens do conjunto de ferramentas de android.googlesource.com, que é o novo local para os servidores AOSP.
    • Foi adicionado um novo tempo de execução de suporte a C++ chamado gabi++. Mais detalhes sobre ele estão disponíveis no docs/CPLUSPLUS-SUPPORT.html atualizado.
    • Foi adicionado um novo tempo de execução do suporte a C++ chamado gnustl_shared, que corresponde à versão da biblioteca compartilhada do GNU libstdc++ v3 (licença GPLv3). Veja mais informações em docs/CPLUSPLUS-SUPPORT.html
    • Foi adicionada compatibilidade com RTTI nos tempos de execução do STLport C++ (não compatível com exceções).
    • Foi adicionada compatibilidade com várias extensões de arquivo em LOCAL_CPP_EXTENSION. Para Por exemplo, para compilar foo.cpp e bar.cxx como fontes C++, declare o seguinte:
      LOCAL_CPP_EXTENSION := .cpp .cxx
      
    • Foram removidos muitos símbolos exportados indesejados das bibliotecas do sistema compartilhado do tempo de link fornecidas pelo NDK. Isso garante que o código gerado com o conjunto de ferramentas autônomo não corra o risco de depender acidentalmente de um símbolo ABI não estável (por exemplo, qualquer símbolo libgcc.a que seja alterado sempre que o conjunto de ferramentas usado para criar a plataforma for modificado).
    • Os cabeçalhos EGL e OpenGLES Khronos foram atualizados para oferecer compatibilidade com mais extensões. Isso não altera as ABIs do NDK para as bibliotecas correspondentes, porque cada extensão precisa ser testada em tempo de execução pelo aplicativo cliente.

      As extensões disponíveis dependem do dispositivo real e dos drivers da GPU, não da versão da plataforma em que o dispositivo é executado. As mudanças no cabeçalho simplesmente adicionam novas constantes e tipos para facilitar o uso das extensões quando elas forem analisadas com eglGetProcAddress() ou glGetProcAddress(). A lista a seguir descreve as extensões com compatibilidade recente:

      GLES 1.x
      • GL_OES_vertex_array_object
      • GL_OES_EGL_image_external
      • GL_APPLE_texture_2D_limited_npot
      • GL_EXT_blend_minmax
      • GL_EXT_discard_framebuffer
      • GL_EXT_multi_draw_arrays
      • GL_EXT_read_format_bgra
      • GL_EXT_texture_filter_anisotropic
      • GL_EXT_texture_format_BGRA8888
      • GL_EXT_texture_lod_bias
      • GL_IMG_read_format
      • GL_IMG_texture_compression_pvrtc
      • GL_IMG_texture_env_enhanced_fixed_function
      • GL_IMG_user_clip_plane
      • GL_IMG_multisampled_render_to_texture
      • GL_NV_fence
      • GL_QCOM_driver_control
      • GL_QCOM_extended_get
      • GL_QCOM_extended_get2
      • GL_QCOM_perfmon_global_mode
      • GL_QCOM_writeonly_rendering
      • GL_QCOM_tiled_rendering
      GLES 2.0
      • GL_OES_element_index_uint
      • GL_OES_get_program_binary
      • GL_OES_mapbuffer
      • GL_OES_packed_depth_stencil
      • GL_OES_texture_3D
      • GL_OES_texture_float
      • GL_OES_texture_float_linear
      • GL_OES_texture_half_float_linear
      • GL_OES_texture_npot
      • GL_OES_vertex_array_object
      • GL_OES_EGL_image_external
      • GL_AMD_program_binary_Z400
      • GL_EXT_blend_minmax
      • GL_EXT_discard_framebuffer
      • GL_EXT_multi_draw_arrays
      • GL_EXT_read_format_bgra
      • GL_EXT_texture_format_BGRA8888
      • GL_EXT_texture_compression_dxt1
      • GL_IMG_program_binary
      • GL_IMG_read_format
      • GL_IMG_shader_binary
      • GL_IMG_texture_compression_pvrtc
      • GL_IMG_multisampled_render_to_texture
      • GL_NV_coverage_sample
      • GL_NV_depth_nonlinear
      • GL_QCOM_extended_get
      • GL_QCOM_extended_get2
      • GL_QCOM_writeonly_rendering
      • GL_QCOM_tiled_rendering
      EGL
      • EGL_ANDROID_recordable
      • EGL_NV_system_time

    Esta versão do NDK não inclui novos recursos em comparação com a r6. A versão r6b aborda os seguintes problemas:

    Correções importantes de bugs:
    • Build corrigido quando APP_ABI="armeabi x86" é usado para criar várias arquiteturas.
    • Foi corrigido o local dos binários STLport pré-compilados no pacote de versão do NDK. Um bug no script de empacotamento os colocou no local errado.
    • O uso de atexit() foi corrigido nas bibliotecas compartilhadas com o conjunto de ferramentas autônomo do x86.
    • make-standalone-toolchain.sh --arch=x86 foi corrigido. Isso costumava falhar ao copiar os binários GNU libstdc++ adequados para o local correto.
    • Foram corrigidos os avisos do vinculador do conjunto de ferramentas autônomo sobre a falta da definição e do tamanho para o símbolo __dso_handle (somente ARM).
    • Foi corrigida a ordem de inclusão de $(SYSROOT)/usr/include para builds x86. Veja o bug para saber mais (link em inglês).
    • As definições de ptrdiff_t e size_t foram corrigidas em sistemas específicos de x86 quando são usadas com o conjunto de ferramentas autônomo de x86.

    Esta versão do NDK inclui compatibilidade com a ABI x86 e outras pequenas mudanças. Para ver informações detalhadas que descrevem as mudanças nesta versão, leia o documento CHANGES.HTML incluído no pacote NDK.

    Observações gerais:
    • Adiciona suporte à ABI x86, que permite gerar o código de máquina que é executado em dispositivos Android compatíveis com x86. Os principais recursos do x86 incluem conjuntos de ferramentas específicos para x86, cabeçalhos de sistema, bibliotecas e compatibilidade com depuração. Para todos os detalhes relacionados à compatibilidade com x86, consulte docs/CPU-X86.html no pacote NDK.

      Por padrão, o código é gerado para dispositivos com processador ARM, mas é possível adicionar x86 à sua definição APP_ABI no arquivo Application.mk para criação de plataformas x86. Por exemplo, a linha a seguir instrui o ndk-build a criar seu código para três ABIs diferentes:

      APP_ABI := armeabi armeabi-v7a x86

      A menos que você use fontes de assembly baseadas em ARM, não será necessário modificar os arquivos Android.mk para criar o código de máquina x86.

    • Você pode criar um conjunto de ferramentas x86 autônomo usando a opção --toolchain=x86-4.4.3 ao chamar make-standalone-toolchain.sh. Veja docs/STANDALONE-TOOLCHAIN.html para mais detalhes.
    • A nova ferramenta ndk-stack permite traduzir rastreamentos de pilha em logcat que são gerados pelo código nativo. A ferramenta converte os endereços de instrução em um formato legível que contém itens como a função, o arquivo de origem e o número de linha correspondente a cada frame da pilha. Para saber mais e ver um exemplo de uso, consulte docs/NDK-STACK.html.
    Outras mudanças:
    arm-eabi-4.4.0, que estava descontinuado desde o NDK r5, foi removido da distribuição do NDK.

    Esta versão do NDK não inclui novos recursos em comparação com a r5b. A versão r5c aborda os seguintes problemas:

    Correções importantes de bugs:
    • ndk-build: foi corrigido um bug raro que aparecia ao tentar executar builds paralelos de projetos depuráveis.
    • Foi corrigido um erro de digitação que impedia LOCAL_WHOLE_STATIC_LIBRARIES de funcionar corretamente com o novo conjunto de ferramentas, e uma documentação para isso foi adicionada em docs/ANDROID-MK.html.
    • Foi corrigido um bug em que o código vinculado a gnustl_static falhava ao ser executado em versões de plataforma anteriores ao nível 8 da API (Android 2.2).
    • ndk-gdb: foi corrigido um bug que causava uma falha de segmentação ao depurar dispositivos Android 3.0 ou mais recentes.
    • <android/input.h>: duas funções introduzidas no nível 9 da API (Android 2.3) estavam incorretas e foram corrigidas. Mesmo isso causando falhas na API de origem, a interface binária para o sistema não é modificada. As funções incorretas tinham um valor history_index. As definições corretas são mostradas abaixo:
      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
      );
    • Foi atualizado o binário ARM da biblioteca C para o nível 9 da API (Android 2.3) para expor corretamente no momento do link novas funções que foram incluídas nesse nível de API (por exemplo, pthread_rwlock_init).
    Correções e melhorias secundárias:
    • Os arquivos de objetos agora são sempre vinculados na ordem em que aparecem em LOCAL_SRC_FILES. Isso não ocorria anteriormente porque os arquivos eram agrupados por extensões de origem.
    • Quando import-module falhar, será capturada a lista de diretórios que foram pesquisados. Isso é útil para verificar se a definição NDK_MODULE_PATH usada pelo sistema de criação está correta.
    • Quando import-module for concluído, será capturado o diretório em que o módulo foi encontrado para o registro (visível com NDK_LOG=1).
    • A velocidade de criação de aplicativos de depuráveis foi ampliada quando há um número muito grande de diretórios incluídos no projeto.
    • ndk-gdb: a versão tem melhor detecção de falhas de adb shell e mensagens de erro aprimoradas.
    • <pthread.h>: a definição de PTHREAD_RWLOCK_INITIALIZER foi corrigida para o nível 9 da API (Android 2.3) ou posterior.
    • Foi corrigido um problema em que um módulo podia se importar sozinho, resultando em um loop infinito no GNU Make.
    • Foi corrigido um bug que causava uma falha na criação caso LOCAL_ARM_NEON fosse definido como verdadeiro (erro de digitação em build/core/build-binary.mk).
    • Foi corrigido um bug que impedia a compilação de arquivos Assembly .s. Os arquivos .S funcionavam corretamente.

    Esta versão do NDK não inclui novos recursos em comparação com a r5. A versão r5b aborda os seguintes problemas:

    • Os binários r5 exigiam glibc 2.11, mas os binários r5b são gerados com um conjunto de ferramentas especial que tem como destino o glibc 2.7 ou posterior. Os binários do conjunto de ferramentas do Linux agora são executados no Ubuntu 8.04 ou posterior.
    • Corrige um bug do compilador no conjunto de ferramentas arm-linux-androideabi-4.4.3. O binário anterior gerou sequências de instruções thumb inválidas ao lidar com caracteres assinados.
    • Adiciona documentação ausente do valor "gnustl_static" para APP_STL, que permite a vinculação a uma versão de biblioteca estática do GNU libstdc ++.
    • o
    • Foram corrigidos os seguintes problemas do ndk-build:
      • Um bug que criava arquivos de dependência inconsistentes quando ocorria um erro de compilação no Windows. Isso impediu uma criação adequada depois que o erro foi corrigido no código-fonte.
      • Um bug específico do Cygwin em que o uso de caminhos muito curtos para a instalação do Android NDK ou o caminho do projeto levou à geração de arquivos de dependência inválidos. Isso tornou as criações incrementais impossíveis.
      • Um erro de digitação que impedia a biblioteca cpufeatures de funcionar corretamente com o novo conjunto de ferramentas do NDK.
      • As criações no Cygwin são mais rápidas, evitando chamadas para cygpath -m a partir do GNU Make para cada arquivo de origem ou objeto, o que causava problemas com árvores de origem muito grandes. Caso isso não funcione, defina NDK_USE_CYGPATH=1 no seu ambiente para usar cygpath -m novamente.
      • A instalação do Cygwin agora notifica o usuário de caminhos de instalação inválidos que contêm espaços. Anteriormente, um caminho inválido gerava um erro que informava uma versão incorreta do GNU Make, mesmo se o caminho certo estivesse instalado.
    • Foi corrigido um erro de digitação que impedia que a variável de ambiente NDK_MODULE_PATH funcionasse corretamente quando continha vários diretórios separados por dois pontos.
    • O script prebuilt-common.sh contém correções para verificar o código de máquina gerado pelo compilador de 64 bits, em vez de depender da tag de host, que permite que o conjunto de ferramentas de 32 bits seja recriado corretamente no Snow Leopard. Os scripts de recriação do conjunto de ferramentas agora também são compatíveis com o uso de um conjunto de ferramentas de host de 32 bits.
    • Uma declaração ausente em INET_ADDRSTRLEN foi adicionada a <netinet/in.h>.
    • Declarações ausentes em IN6_IS_ADDR_MC_NODELOCAL e IN6_IS_ADDR_MC_GLOBAL foram adicionadas a <netinet/in6.h>.
    • "asm" foi substituído por "__asm__" em <asm/byteorder.h> para permitir a compilação com -std=c99.

    Esta versão do NDK inclui muitas novas APIs, a maioria delas foi introduzida para ser compatível com o desenvolvimento de jogos e aplicativos semelhantes que fazem uso extensivo de código nativo. Com as APIs, os desenvolvedores têm acesso nativo direto a eventos, áudio, gráficos e gerenciamento de janelas, recursos e armazenamento. Os desenvolvedores também podem implementar o ciclo de vida do aplicativo para Android em código nativo com a ajuda da nova classe NativeActivity. Para ver informações detalhadas que descrevem as mudanças feitas nesta versão, leia o documento CHANGES.HTML incluído no pacote NDK transferido por download.

    Observações gerais:
    • Adiciona suporte para atividades nativas, o que permite implementar o ciclo de vida do aplicativo para Android em código nativo.
    • Adiciona compatibilidade nativa com para o seguinte:
      • Subsistema de entrada (como o teclado e a tela touchscreen)
      • Acesso aos dados do sensor (acelerômetro, bússola, giroscópio etc.).
      • APIs de loop de evento, para aguardar itens como eventos de entrada e sensores
      • Subsistema de janela e superfície
      • APIs de áudio baseadas no padrão OpenSL ES compatíveis com reprodução, gravação e controle sobre os efeitos de áudio da plataforma
      • Acesso a recursos empacotados em um arquivo .apk.
    • Inclui um novo conjunto de ferramentas (baseado no GCC 4.4.3). Ele gera um código melhor e agora também pode ser usado como um compilador independente para pessoas que querem criar seus itens com ./configure && make. Consulte docs/STANDALONE-TOOLCHAIN.html para saber mais detalhes. Os binários para o GCC 4.4.0 ainda são fornecidos, mas os de 4.2.1 foram removidos.
    • Adiciona suporte a bibliotecas estáticas e compartilhadas pré-compiladas (docs/PREBUILTS.html) e exporta e importa módulos para facilitar o compartilhamento e a reutilização de módulos de terceiros (docs/IMPORT-MODULE.html explica o motivo).
    • Fornece uma implementação STL C ++ padrão (com base no STLport) como um módulo auxiliar. Pode ser usado como uma biblioteca estática ou compartilhada (detalhes e exemplos de uso estão em sources/android/stlport/README). Os binários pré-compilados para STLport (estático ou compartilhado) e GNU libstdc ++ (somente estático) também são fornecidos se você escolher compilar essas bibliotecas em vez da implementação STL C ++ padrão. Não há suporte para C ++ e RTTI na implementação de STL padrão. Para mais informações, consulte docs/CPLUSPLUS-SUPPORT.HTML.
    • Inclui melhorias na biblioteca de ajuda cpufeatures que aprimora o relatório do tipo de CPU. Anteriormente, alguns dispositivos relatavam a CPU ARMv7 quando o dispositivo realmente era, na verdade, um ARMv6. Recomendamos que os desenvolvedores que usam essa biblioteca recriem seus aplicativos e os enviem ao Google Play para se beneficiar das melhorias.
    • Adiciona uma biblioteca EGL que permite criar e gerenciar texturas e serviços do OpenGL ES.
    • Adiciona novos aplicativos de amostra, native-plasma e native-activity, para demonstrar como gravar uma atividade nativa.
    • Inclui muitas correções de bugs e outras pequenas melhorias. Veja docs/CHANGES.html para acessar uma lista mais detalhada de mudanças.
    Observações do NDK r4b:

    Inclui correções para vários problemas nos scripts de compilação e depuração do NDK. Se você estiver usando o NDK r4, recomendamos o download da compilação do NDK r4b. Para informações detalhadas descrevendo as alterações nesta versão, leia o documento CHANGES.TXT incluído no pacote do NDK transferido por download.

    Observações gerais:
    • Fornece um sistema de build simplificado com o novo comando de build ndk-build.
    • Adiciona suporte para facilitar a depuração nativa do código de máquina gerado em dispositivos de produção por meio do novo comando ndk-gdb.
    • Adiciona uma nova ABI específica do Android para arquiteturas de CPU baseadas em ARM, armeabi-v7a. A nova ABI amplia armeabi para incluir estas extensões de conjunto de instruções da CPU:
      • Instruções Thumb-2
      • Instruções VFP de hardware FPU (VFPv3-D16)
      • Suporte opcional para intrínsecos do GCC ARM de SIMD Avançado (NEON) e VFPv3-D32. Compatível com dispositivos como o Verizon Droid da Motorola, o Google Nexus One e outros.
    • Adiciona uma nova biblioteca estática cpufeatures (com fontes) que permite que seu app detecte os recursos da CPU do dispositivo host no tempo de execução. Especificamente, os aplicativos podem verificar a compatibilidade com ARMv7-A, VFPv3-D32 e NEON, além de fornecer caminhos de código separados conforme necessário.
    • Adiciona um aplicativo de amostra, hello-neon, que ilustra como usar a biblioteca cpufeatures para verificar os recursos da CPU e fornecer um caminho de código otimizado usando instrínsecos do NEON, se compatível com a CPU.
    • Permite gerar código de máquina para um ou ambos os conjuntos de instruções compatíveis com NDK. Por exemplo, você pode criar arquiteturas ARMv5 e ARMv7-A ao mesmo tempo e ter tudo armazenado no .apk final do aplicativo.
    • Para garantir que seus aplicativos estejam disponíveis para os usuários somente se os dispositivos forem capazes de executá-los, o Google Play filtrará os aplicativos com base nas informações do conjunto de instruções incluídas neles. Nenhuma ação sua é necessária para ativar a filtragem. Além disso, o próprio sistema Android também verifica seu aplicativo no momento da instalação e permite que esse processo só continue se o aplicativo fornecer uma biblioteca que seja compilada para a arquitetura de CPU do dispositivo.
    • Adiciona compatibilidade com o Android 2.2, incluindo uma nova API estável para acessar os buffers de pixel dos objetos Bitmap pelo código nativo.
    Observações gerais:
    • Adiciona suporte à biblioteca nativa do OpenGL ES 2.0.
    • Adiciona um aplicativo de amostra, hello-gl2, que ilustra o uso de sombreadores de vértice e fragmento do OpenGL ES 2.0.
    • Os binários do conjunto de ferramentas foram atualizados para esta versão com o GCC 4.4.0, que deve gerar um código de máquina um pouco mais compacto e eficiente que o anterior (4.2.1). O NDK também fornece os binários 4.2.1, que você pode usar opcionalmente para criar seu código de máquina.

    Originalmente lançado como "Android 1.6 NDK, versão 1".

    Observações gerais:
    • Adiciona suporte à biblioteca nativa do OpenGL ES 1.1.
    • Adiciona um app de exemplo, o san-angeles, que renderiza gráficos 3D usando as APIs OpenGL ES nativas, enquanto gerencia o ciclo de vida da atividade com um objeto GLSurfaceView.

    Originalmente lançado como "Android 1.5 NDK, versão 1".

    Observações gerais:
    • Inclui suporte para compilador (GCC) para instruções ARMv5TE, incluindo instruções Thumb-1.
    • Inclui cabeçalhos de sistema para APIs nativas estáveis, documentação e apps de exemplo.