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.
Android NDK r29 (outubro de 2025)
Registro de mudanças (link em inglês)- Downloads
-
- Os downloads desta versão estão disponíveis neste link.
Android NDK r28 (fevereiro de 2025)
Registro de mudanças (link em inglês)- Downloads
-
- Os downloads desta versão estão disponíveis neste link.
Android NDK r27 LTS (julho de 2024)
Registro de mudanças (link em inglês)- Downloads
-
- Os downloads desta versão estão disponíveis neste link.
Android NDK r26 LTS (setembro de 2023)
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).
LTS do Android NDK r25 (julho de 2022)
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.
Android NDK r24 (março de 2022)
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.
-
O GNU Assembler (GAS) foi removido. Se você estiver criando com
Android NDK r23 LTS (agosto de 2021)
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-gdbusa 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).
-
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
Android NDK r22b (março de 2021)
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 usandoasdiretamente, useclang. - 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::filesystemestá inclusa. Há dois problemas conhecidos:-
Problema
1258 (link em inglês): o
std::filesystem::perm_options::nofollowpode não ser honrado em dispositivos antigos. -
Problema
1260 (link em inglês): o
std::filesystem::canonicalterá êxito indevidamente ao receber um caminho inexistente em dispositivos antigos.
-
Problema
1258 (link em inglês): o
-
O GNU binutils teve o uso suspenso e será removido em uma próxima versão
do NDK. O conversor GNU (
Android NDK r21e LTS (janeiro de 2021)
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=llddurante 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).
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.
-
Android NDK r20b (junho de 2019)
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=llddurante 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.
-
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
Android NDK r19c (janeiro de 2019)
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=lldna 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 ferramentas autônomo para o ARM da API 26, invoque o compilador diretamente no NDK: Na versão r19, o conjunto de ferramentas também é instalado no caminho antigo para dar aos sistemas de compilação uma chance de se adaptar ao novo layout. Os caminhos antigos serão removidos na versão r20. O script$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.pynão será removido. 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 o Guia de mantenedores do sistema de compilação (link 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.
-
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
Android NDK r18b (setembro de 2018)
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=llddurante 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).
Android NDK r17c (junho de 2018)
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).
Android NDK r16b (dezembro de 2017)
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, olibc++é a STL padrão do CMake e dos conjuntos de ferramentas autônomos. Se você selecionar manualmente uma STL diferente, recomendamos o uso delibc++. 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.
Android NDK r15c (julho de 2017)
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).
- 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). Aandroid-14será usada mesmo seAPP_PLATFORMestiver 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.
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).
- 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.
Android NDK r14b (março de 2017)
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.
- 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:
Para ver mais informações sobre as novidades e mudanças dessa versão, consulte este registro de mudanças.
Android NDK r13b (outubro de 2016)
- 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
-
-
Outras correções para o código
__cxa_bad_castausente.
-
Outras correções para o código
- 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.shagora é 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.
- O código
- 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).
Android NDK r12b (junho de 2016)
- Downloads
- Os downloads desta versão estão arquivados aqui.
- Anúncios
- O comando
ndk-buildassume o padrão de utilização do Clang na r13. Removeremos o GCC em uma versão subsequente. - O script
make-standalone-toolchain.shserá removido na r13. Verifique semake_standalone_toolchain.pyatende às suas necessidades. - Denuncie problemas ao GitHub (link em inglês).
- Corrigimos o
ndk-gdb.py(problema 118, link em inglês). -
Atualizamos o
NdkCameraMetadataTags.hpara 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).
- Para ver informações completas sobre essas mudanças, consulte esta lista de mudanças.
- 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-infofoi 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-idestá 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_CYGPATHnão deve mais causar problemas com libgcc. (problema com o Android 195486, link em inglês).- As opções
-Wl,--warn-shared-textrele-Wl,--fatal-warningsagora 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
libcamera2para dispositivos comINFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDou mais recente. Para saber mais, consulte CameraCharacteristics. - Clang
- O Clang foi atualizado para 3.8svn (r256229, build 2812033).
- Os executáveis
clang.exeeclang++.exeno pacote do Windows de 32 bits são de 64 bits. O executável de 32 bits é chamado declang_32.exe.
- Os executáveis
- 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-pltintroduzida 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-dynamicpara contornar um bug de vinculador dinâmico para versões anteriores do Android. - NDK r11 KI para
dynamic_castnão funciona com Clang. Corrigimos x86,stlport_statice 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++_sharedainda 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.
__thread deve funcionar bem desta vez.
Android NDK r12 (junho de 2016)
- Downloads
- Os downloads desta versão estão arquivados aqui.
- Anúncios
- O comando
ndk-buildusará 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.shserá removido em uma versão futura. Caso você use esse script, migre paramake_standalone_toolchain.pyassim 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-infoseja ativada por padrão. Essa mudança permite uma melhor depuração com LLDB. - A opção
--build-idfoi 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_CYGPATHfoi corrigido e não causará mais problemas com libgcc (problema 195486). - As opções a seguir foram ativadas por padrão:
-Wl,--warn-shared-textrele-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_LIMITEDou mais recente. Para ver mais informações, consulte a referência deCameraCharacteristics. - Clang
- O Clang foi atualizado para 3.8svn (r256229, build 2812033). Os executáveis
clang.exeeclang++.exeno pacote do Windows de 32 bits são de 64 bits. O executável de 32 bits é chamado declang_32.exe. __threadfoi 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
libatomicpara 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-pltpara 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-dynamicpara 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_castnã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.pyforam 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++_sharednã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âmeraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAPfoi listado por acidente e será removido na próxima versão. Use o valorACAMERA_STATISTICS_LENS_SHADING_MAP.
Android NDK r11c (março de 2016)
- Mudanças
- Foram aplicadas mais correções ao script
ndk-gdb.py. - Um argumento de nome de pacote opcional foi adicionado à opção
--attachdo comandondk-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).
Android NDK r11b (março de 2016)
- NDK
-
- Anúncios importantes
- Passamos a usar nosso rastreador de bugs com o GitHub (link em inglês).
- Mudanças
ndk-gdb.pyfoi corrigido. O recurso tinha regredido totalmente na versão r11.ndk-gdbpara 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.hestava ausente. - A documentação de ajuda de
--toolchainfoi corrigida emmake-standalone-toolchain.sh.
- Anúncios importantes
- Clang
-
- Errata
- Diferentemente do que foi informado nas notas da versão r11,
__threadnã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.
Android NDK r11 (março de 2016)
- 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.
- Recomendamos o uso do Clang.
- Adições
- O Clang agora é compatível com o TLS emulado.
- Agora, o compilador é compatível com
__threadpor meio da emulação de TLS ELF com dados específicos de thread pthread. - O C++11
thread_localfunciona 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.
- Agora, o compilador é compatível com
- O Clang agora é compatível com o TLS emulado.
- Anúncios importantes
- 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.
- Foi adicionada uma API nativa de rastreamento a
- Remoções
- A compatibilidade com
_WCHAR_IS_8BITfoi 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.
- A compatibilidade com
- 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
-targetcomoarmv5te-linux-androideabi.
- Para restaurar o comportamento antigo, transmita a opção de especificação
- O sistema de compilação foi alterado para usar
-isystempara 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::__ndk1para evitar problemas de ODR com libc++ da plataforma. - Agora, todas as bibliotecas libc++ são criadas com libc++abi.
- Padrão
APP_PLATFORMpara Gingerbread.- A expectativa é que a compatibilidade com Froyo e os recursos mais antigos sejam descartados em uma versão futura.
- Os conjuntos de ferramentas autônomos da ARM foram mudados por padrão para arm7.
- A estrutura
_Unwind_Exceptionde 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.heuchar.hda ToT Bionic. sys/cdefs.hfoi sincronizado em todos os níveis de API.- Foram corrigidos
fegetenv and fesetenvpara arm. - Foi corrigido o tamanho/alinhamento do ponteiro final de
crtend_*para mips64 e x86_64.
- Anúncios importantes
- Binutils
-
- Adições
- Foi adicionada uma nova opção:
--pic-veneer.
- Foi adicionada uma nova opção:
- 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=goldno 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).
- Adições
- 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.
- Remoções
- YASM
-
- Mudanças
- O YASM foi atualizado para a versão 1.3.0.
- Mudanças
- 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
-O0gera falhas de teste comdynamic_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.
Android NDK r10e (maio de 2015)
- 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=clangagora 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.goldfoi 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.
- Para fazer a compilação com várias linhas de execução, use a opção
- Foi feito upgrade de GDB/gdbserver para 7.7 em todas as arquiteturas.
- O pacote NDK foi removido para o Darwin de 32 bits.
- Foi integrada uma solução alternativa para “Errata 843419 do Cortex-A53” no
vinculador
- 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çãopragmaé 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_*emmedia/NdkMediaDrm.h. - Correção de
sys/ucontext.hparamips64. - A verificação da versão do Clang foi removida para
__builtin_isnane__builtin_isinf. - Foram adicionados
android-21/arch-mips/usr/include/asm/reg.heandroid-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
mipsemips64para criar uma seção.gcc_except_tablegravável, correspondendo ao comportamento do GCC. Essa mudança permite que você evite o seguinte aviso de vinculador:.../ld: warning: creating a DT_TEXTREL in a shared object
- Ocorreu o backport de uma correção para problemas de
compiler-rtque causavam falhas quando o Clang compilava paramips64. 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::comparepara retornar-1e1. Anteriormente, havia retornado números assinados arbitrários. - O
ndk-gdbfoi 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_iterfoi corrigido para GCC. Para saber mais, consulte o problema 22355 do LLVM (link em inglês). - O suporte para
.asmfoi corrigido na ABIx86_64. - Foi implementada uma solução alternativa para o problema de
stlportdo 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 targetque ocorria na compilação de um único arquivo.cpela execução do comandondk-build.cmddogradle(problema 66937, link em inglês). - Foram adicionadas as bibliotecas
libatomic.aelibgomp.aque estavam ausentes nos seguintes conjuntos de ferramentas de host:aarch64-linux-android-4.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_64-4.9
- Outras mudanças:
-
- O
ld.goldfoi adicionado paraaarch64. O vinculador padrão permanece sendold.bfd. Para ativar explicitamenteld.gold, adicione-fuse-ld=goldà variávelLOCAL_LDFLAGSouAPP_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-protectorfoi substituído por-fstack-protector-strongpara 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
--packageparandk-gdb, permitindo que o sistema de build substitua o nome do pacote (problema 56189). - O
-mno-ldc1-stc1está obsoleto para MIPS. Talvez ele não funcione com as novas opções-fpxxe-mno-odd-spregou com o FPXX ABI. - Foi adicionada a detecção de MIPS MSA e R6 para
cpu-features.
- O
Android NDK r10d (dezembro de 2014)
- 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.6ao ndk-build ou adicione--toolchain=arm-linux-androideabi-4.6quando executarmake-standalone-toolchain.shna 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
-mstackrealignpor 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 -piedurante a criação. Nos níveis 16 e posteriores da API, o ndk-build usaPIEno 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.
- 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
- 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/vsscanfque 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-Osera especificado (problema 77571).
- 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,
- Outras correções de bugs:
-
- Foram feitas as seguintes correções em cabeçalhos e bibliotecas:
- O
posix_memalignfoi adicionado à API de nível 16. Também foi incluído um protótipo emstdlib.hàs APIs de nível 16 a 19. (Problema 77861, link em inglês). - O
stdatomic.hfoi corrigido para que inclua<atomic>apenas para C++11. - Os seguintes cabeçalhos foram modificados para uso independente:
sys/user.hegl2ext.h,dlext.h,fts.h,sgidefs.hpara a API de nível 21. - O
sys/user.hfoi modificado para renomearmxcsr_maskcomomxcr_maske para alterar o tipo de dados emu_ar0de - O tipo de valor de retorno de
sysconf()foi mudado deintparalong. - Foi corrigido o processamento de ndk-build de
thumbparaLOCAL_ARM_MODE. Na r10d, o ndk-build adicionaLOCAL_LDFLAGS+=-mthumbpor padrão, a menos que uma das seguintes condições se aplique: - Você definiu
LOCAL_ARM_MODEigual aarm. - Você está fazendo um build de depuração (com configurações como
APP_OPTIM=debugeAndroidManifest.xmlcontendoandroid: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_FILESforam 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_PCHpara melhorar a compatibilidade com Clang (problema 77575). - O aviso “requer pilha executável” foi esclarecido em Id.gold (problema 79115).
unsigned longpara struct user_regs_struct*.
Android NDK r10c (outubro de 2014)
- 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-Lfoi mudado para a designação oficial da versão:android-21. - O GCC 4.9 foi atualizado criando uma nova base do branch
googledo repositório do GCC. As principais diferenças da versão upstream do GCC 4.9 incluem o seguinte: - Agora, a opção
-O2ativa a vetorização, sem loop peeling, mas com unrolling mais agressivo. - Melhorias no FDO e LIPO (link em inglês).
- A compatibilidade com o Clang 3.5 foi adicionada a todos os hosts:
NDK_TOOLCHAIN_VERSION=clangagora 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-ascomo uma solução alternativa. - O Clang 3.5 emite mais avisos para sinalizações não utilizadas, como a opção
-finline-functionscompatível com o GCC. - 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, consulteprebuilt/common/gdb/common.setupno 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.hfoi 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-neonatualizado emsamples/. - Consulte o guia da Intel para fazer a portabilidade de ARM NEON para Intel SSE (link em inglês).
- Acesse o Guia do Programador do NDK (
- Foi documentada a compatibilidade com
_FORTIFY_SOURCEemheaders/libs/android-21, que aparecia em r10 (quandoandroid-21ainda era chamado deAndroid-L), mas não tinha documentação.
Para saber mais, consulte Correções importantes de bugs abaixo.
Ao fazer a migração de projetos usando o GCC, use
-Wno-invalid-command-line-argumente-Wno-unused-command-line-argumentpara ignorar as sinalizações não usadas até que você possa decidir o que fazer com elas em longo prazo. - Correções importantes de bugs:
-
- Foi corrigido um erro do compilador interno com GCC4.9/aarch64 que gerava a seguinte mensagem de erro (problema 77564):
- Foi corrigida a geração incorreta do código de GCC4.9/arm (problema 77567).
- Foi corrigido um erro do compilador interno com o GCC4.9/mips envolvendo inline-assembly (problema 77568).
- Foi corrigido o código incorreto que GCC4.9/arm gerava para
x = (cond) ? y : x(problema 77569). - Foram corrigidos GCC4.9/aarch64 e Clang3.5/aarch64 para solucionar a
Errata Cortex-A53 (835769) por padrão (link em inglês). Desative a solução alternativa especificando
-mno-fix-cortex-a53-835769.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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_getReportingModeeASensor_isWakeUpSensor. - Foi corrigido o
stdatomic.hpara melhorar a compatibilidade com GCC 4.6 e oferecer compatibilidade com o cabeçalho<atomic>. - Foram adicionados
sys/ucontext.hesys/user.ha todos os níveis de API. O cabeçalhosignal.hagora inclui<sys/ucontext.h>. Você pode remover qualquer definição existente destruct 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_nanosleepeclock_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,__getdents64edlmalloc. - 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_tparaintnas seguintes funções:strtoll_l,strtoull_l,wcstoll_lewcstoull_l. - As seguintes funções foram restauradas para a arquitetura de 64 bits:
arc4random,arc4random_bufearc4random_uniform. - O
cxa_*e os operadoresnewedeleteforam movidos de volta paralibstdc++.so. Essa mudança restaura o comportamento de r9d. As versões anteriores de r10 continham arquivos marcadores de posição.
- Foram adicionados mais códigos de teclas para TV:
- 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 emmake-standalone-toolchain.she 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/.
- Foram feitas as seguintes correções em cabeçalhos e bibliotecas para
- Outras mudanças:
-
- Os
cpu-featuresforam 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.heinclude-fixed/linux/compiler.hforam removidos do compilador GCC (problema 73728, link em inglês). - Foi corrigido um problema relacionado a
-fltocom GCC 4.8 no Mac OS X. A mensagem de erro informava o seguinte: - Foi corrigido um erro de digitação em
build-binary.mk.(problema 76992).
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Os
- Problemas conhecidos importantes:
-
- Especificar -Os (
-fauto-profile) no GCC4.9 pode causar falhas (problema 77571).
- Especificar -Os (
Android NDK r10b (setembro de 2014)
- 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:
- Outras correções de bugs:
-
- O
stdio.hfoi removido dos diretóriosinclude-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/esources/third_party/googletest/README.NDK(problema 74069, link em inglês). - As seguintes correções foram feitas nos cabeçalhos do Android-L:
- As seguintes funções foram adicionadas a
ctype.hewchar.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(). - A função
cmsg_nxthdrfoi renomeada como__cmsg_nxthdr. - A função
__libc_malloc_dispatchfoi removida. - O protótipo
ptrace()foi mudado paralong ptrace(int, ...);. - A função
sha1.hfoi removida. - O
android_dlextinfofoi estendido emandroid/dlext.h. - O
__NDK_FPABI__foi anotado para funções que recebem ou retornam os valores float- ou double-type emstdlib.h,time.h,wchar.hecomplex.h.
- O
- Outras mudanças:
-
mipsel-linux-android-4.9emips64el-linux-android-4.9foram atualizados, implementando um novo layout de diretório multilib e fornecendo compatibilidade com gdb-7.7.- Os
cpu-featuresforam aprimorados para detectar mais recursos do arm64 (lista de mudanças 100339).
Android NDK r10 (julho de 2014)
- 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=clangpode 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
all32eall64paraAPP_ABI.APP_ABI=all32é equivalente aAPP_ABI=armeabi,armeabi-v7a,x86,mips.APP_ABI=all64é equivalente aAPP_ABI=arm64-v8a,x86_64,mips64.APP_ABI=allseleciona 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_TR1se 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.hfoi 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.9aApplication.mkou exportando como uma variável de ambiente da linha de comando. - Para um conjunto de ferramentas autônomo, use a opção
--toolchain=no scriptmake-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.8ou4.9para ativar o ndk-gdb e selecionar o GDB 7.6. - A opção de criação
-mssse3foi 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-aliasingse 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::feofe 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
-O3de Clang 3.3/3.4 foi corrigida em: - A seguinte falha do Clang 3.3/3.4 foi corrigida:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef(problema 57381).): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018(problema 66950, link em inglês). - A libc++ foi corrigida e agora compila
- Outras correções de bugs:
-
- Cabeçalhos corrigidos:
- Foi corrigido o
ssize_tde 32 bits para ser definido comoint, em vez delong int. - As opções de
WCHAR_MINeWCHAR_MAXforam 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_ta ser definido como 16 bits, use-fshort-wchar. - Foram removidos símbolos inexistentes de
libc.sode 32 bits e adicionadospread64,pwrite64,ftruncate64para 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
putcharfoi corrigido. Veja uma mensagem de aviso: - 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 usarstrrchr()em vez destrchr()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-piepara segmentações do Android se-sharede-staticnão existissem. Esse comportamento, que estava incorreto, fez com que o vinculador reclamasse que-sharede-pienão poderiam coexistir.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);(lista de mudanças 91185, link em inglês). - Outras mudanças:
-
- O
arm_neon.hfoi 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.
- O
Android NDK r9d (março de 2014)
- Mudanças importantes:
-
- Foi adicionada compatibilidade com o compilador Clang 3.4. A opção
NDK_TOOLCHAIN_VERSION=clangagora escolhe o Clang 3.4. O GCC 4.6 ainda é o compilador padrão. - O
APP_ABI=armeabi-v7a-hardfoi incluído, com a opção de multilib-mfloat-abi=hardadicional. 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 mudanças: - Ao executar o script
ndk-build, adicione as seguintes opções para o destino armeabi-v7a: A biblioteca criada é copiada paraTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a. Para que o comportamento seja o esperado, não especifiquearmeabi-v7aearmeabi-v7a-hardcomo marcas de destino (por exemplo, em APP_ABI= line). Isso fará com que uma delas seja ignorada. Observe queAPP_ABI=allainda é equivalente aarmeabi armeabi-v7a x86 mips. - O script
make-standalone-toolchain.shcopia mais bibliotecas nos diretórios/hard. Adicione as flagsCFLAGSeLFLAGSacima 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_ASMFLAGSeEXPORT_ASMFLAGS, foram adicionados para destinos x86. O scriptndk-buildusaprebuilts/*/bin/yasm*para criarLOCAL_SRC_FILESque 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++_staticouAPP_STL := c++_sharedemApplication.mk. Você pode recriar a partir da fonte comLIBCXX_FORCE_REBUILD := true - Execute
make-standalone-toolchain.sh --stl=libc++para criar um conjunto de ferramentas autônomo com libc++ headers/lib.
CPLUSPLUS-SUPPORT.html(problema 36496). - Adicione
- Foi adicionada compatibilidade com o compilador Clang 3.4. A opção
- 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,_cursese_curses_panel
- Mac OS X:
- 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>emandroid/asset_manager.hpara a API de nível 13 ou mais recente do Android (problema 64988, link em inglês). - Foi corrigida a ausência de
#includeemandroid/rect_manager.hpara a API Android de nível 14 ou posterior. - Foram adicionados
JNICALLaJNI_OnLoadeJNI_OnUnloademjni.h. Observe queJNICALLé definido como__NDK_FPABI__. Para mais informações, consultesys/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):
sys/cachectl.hfoi 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.hfoi 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_VALUEe__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUEpara API Android de nível 9 e anterior. - Foram adicionados
scalbln,scalblnfescalblnlaolibm.sox86 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).
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
- Foi corrigida a ausência de
- gabi++
std::unexpected()foi corrigido para chamarstd::terminate()para que o gerenciadorstd::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 acionaonSystemUiVisibilityChangee não restaura o modo imersivo.
- O script
ndk-buildfoi corrigido para adicionar-rpath-link=$SYSROOT/usr/libe-rpath-link=$TARGET_OUTa fim de usarld.bfdpara vincular executáveis (problema 64266, link em inglês). -Bsymbolicfoi removido de todos os builds STL.ndk-gdb-py.cmdfoi corrigido configurandoSHELLcomo uma variável de ambiente em vez de transmitir parapython.exe, que ignora essa definição (problema 63054, link em inglês).- O script
make-standalone-toolchain.shfoi corrigido para que a opção--stl=stlportcopiasse os cabeçalhos gabi++ em vez de vinculá-los simbolicamente.cmd.exee os shells de MinGW não entendem links simbólicos criados pelo cygwin.
- Correções de cabeçalho:
- Outras mudanças:
-
- As permissões de execução foram aplicadas a todos os scripts
*cmddestinados anteriormente ao uso exclusivo no shellcmd.exe, caso os desenvolvedores preferissem usarndk-build.cmdem cygwin em vez dondk-buildscript recomendado. - A velocidade do script
make-standalone-toolchain.shfoi aprimorada ao transferir em vez de copiar se o diretório de destino especificado não existisse.
- As permissões de execução foram aplicadas a todos os scripts
Android NDK r9c (dezembro de 2013)
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 erro a seguir não ocorra mais:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- A compatibilidade de
-mhard-floatfoi corrigida para funções matemáticas de__builtin. Para informações atualizadas sobre correções de-mhard-floatcom STL, veja o problema 61784 (link em inglês).
- Outras correções de bugs:
-
- Correções de cabeçalho:
- O protótipo de
pollfoi mudado parapoll(struct pollfd *, nfds_t, int);empoll.h. - O
utimensatfoi adicionado paralibc.soem 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. futimensfoi introduzido alibc.sopara a API Android de nível 19.- Foram adicionados
clock_settime()eclock_nanosleep()ausentes atime.hpara APIs Android de nível 8 e posterior. - Foram adicionados
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,eCLOCK_BOOTTIME_ALARMemtime.h. - Foram removidos
CLOCK_REALTIME_HReCLOCK_MONOTONIC_HR., que estão obsoletos.
- O protótipo de
- 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_ReleaseStringUTFCharsem/system/lib/libdvm.soque estava causando falhas em dispositivos x86.
- Foi corrigida a falha de
ndk-buildque ocorre no cygwin quando o pacote NDK é referenciado por um link simbólico. - Foi corrigida a falha de
ndk-build.cmdque ocorre nocmd.exedo Windows quandoLOCAL_SRC_FILEScontém caminhos absolutos (problema 69992, link em inglês). - Foi corrigido o script
ndk-stackpara 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-stackfoi corrigida para os destinos windows-x64_64 para não corresponder mais incorretamente a uma linha de frame com uma linha na seçãostack:que não contémpc,eipouip. 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.
- Correções de cabeçalho:
- Outras mudanças:
-
- Foi adicionado
LOCAL_EXPORT_LDFLAGS. - A configuração
NDK_PROJECT_PATH=nullfoi introduzida para o uso em um sistema de criação integrado em que as opções são transmitidas explicitamente parandk-build. Com essa configuração,ndk-buildnão faz uma tentativa de busca deNDK_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 outrosAPP_*contidos emApplication.mk. APP_ABIagora pode ser enumerado em uma lista delimitada por vírgulas. Por 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 scriptndk-stacka 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-jniforam aprimoradas para informarAPP_ABIna compilação. - A ferramenta
arfoi usada no modo Deterministic (opção-D) para criar bibliotecas estáticas (problema 60705).
- Foi adicionado
Android NDK r9b (outubro de 2013)
- Mudanças importantes:
-
- Foram atualizados
include/android/*hemath.hpara 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-floatna ABI armeabi-v7a existente. Para mais informações e restrições atuais sobre o Clang, consultetests/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 exporteGCC_COLORS, como mostrado abaixo: Para mais informações, consulte as Opções independentes de idioma do GCC (link em inglês).GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- 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.
- Foram atualizados
- Correções importantes de bugs:
-
- Foi corrigido um problema com ARM GCC 4.6
thumb2que 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.exedo 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. Veja a mensagem de erro exibida:
(problema 58916, problema do GCC, links em inglês)internal compiler error: verify_flow_info failed
- O build de GDB/ARM foi modificado para pular dados de
ARM.exidxpara 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. Veja a mensagem de erro exibida: (patch do GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Foi corrigido um problema com ARM GCC 4.6
- Outras correções de bugs:
-
- Correções de cabeçalho
- Foram corrigidos
WCHAR_MINeWCHAR_MAXdo 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_SIGNEDpara restaurar o comportamento antigo (problema 57749). include/netinet/tcp.hfoi corrigido para conter o tipo enumerado de estadoTCP_INFO(problema 38881).- A macro
cdefs_elh.hfoi corrigida_C_LABEL_STRINGpara 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
imaxabseimaxdivdo cabeçalhointtypes.h. - Foi corrigido um problema com valores de retorno
pthread_exit()epthread_self()(problema 60686, link em inglês). - Foi adicionada a função
mkdtemp()ausente, que já existe no cabeçalhobionicstdlib.h.
- Foram corrigidos
- Foi corrigido o problema de build
samples/gles3jnicom o Clang na API Android de nível 11. - O MCLinker foi corrigido para permitir várias ocorrências das seguintes opções:
-gc-sectionse--eh-frame-hdr. - O MCLinker foi corrigido para aceitar a opção
--no-warn-mismatch. - A opção
cpu-featuresfoi 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-asdo Clang foram corrigidos para poder transmitir testes dessax-instructionsefenv. - O compilador GCC 4.6/4.7/4.8 foi corrigido para transmitir a opção
--eh-frame-hdrdo 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, consulteNDK-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_sube__atomic_fetch_or. - O Clang 3.3 ICE foi corrigido com
vfprintfpersonalizado (problema do Clang, link em inglês).
- Correções de cabeçalho
- Outras mudanças:
-
- O OpenMP foi ativado para todas as versões do GCC. Para usar esse recurso, adicione as sinalizações a seguir às suas configurações de criação:
Para exemplos de código, consulteLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp - O tamanho de
ld.mcldfoi reduzido significativamente (1,5 MB xld.bfd3,5 MB eld.gold7,5 MB), resultando em uma melhoria de velocidade de aproximadamente 20%. - Foram adicionados
LOCAL_CONLYFLAGSeAPP_CONLYFLAGSpara especificar as opções aplicáveis somente a C, e não a C++. Os recursosLOCAL_CFLAGSeAPP_CFLAGStambé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=gnu99podem 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.asejam 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-sdc1foi 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-plasmafoi 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.
- O OpenMP foi ativado para todas as versões do GCC. Para usar esse recurso, adicione as sinalizações a seguir às suas configurações de criação:
Android NDK r9 (julho de 2013)
- Mudanças importantes:
-
- Foi adicionado suporte para Android 4.3 (API de nível 18) Para mais informações, consulte
STABLE-APIS.htmle veja novos exemplos de código emsamples/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, exporteNDK_TOOLCHAIN_VERSION=4.8ou a adicione emApplication.mk. - Para criações autônomas, use a opção
--toolchain=emmake-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 comosources/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-accessao criar para os kernels que não são compatíveis com esse recurso. - Para as criações do
- Foi adicionada compatibilidade com o Clang 3.3. A opção de criação
NDK_TOOLCHAIN_VERSION=clangagora 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.goldserá o padrão, quando disponível. Por isso, é preciso adicionar-fuse-ld=mcldemLOCAL_LDFLAGSouAPP_LDFLAGSpara ativar o MCLinker. - A ferramenta
ndk-dependsfoi adicionada e exibe dependências da biblioteca ELF. Para mais informações, consulteNDK-DEPENDS.html. (problema 53486, link em inglês).
- Foi adicionado suporte para Android 4.3 (API de nível 18) Para mais informações, consulte
- 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
-Ono uso do Boost 1.52.0 (problema 42891). libc.soelibc.aforam corrigidos para oferecer compatibilidade com a funçãowait4()(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_COMMANDSfoi corrigido onde o arquivolinker.listestá 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-hdrcom 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-gdbfoi atualizado para que as ações--startou--launchagora 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
--nowaitpara 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
stepiapós uma instrução Thumbbx pcoublx pc(problema 56962, problema 36149). - O
gdbserverde MIPS foi corrigido para buscarDT_MIPS_RLD_MAPem vez deDT_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)
- Foi corrigido um problema em potencial com o processamento de eventos em
- Outras correções de bugs:
-
- O script
ndk-buildfoi 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_Exceptionfoi corrigido e definido como 24 para destinos de criação para MIPS no uso do compilador do Clang (mudança 54141). - O script
ndk-buildfoi corrigido para garantir que as bibliotecas de build sejam realmente removidas de projetos que incluem bibliotecas estáticas de pré-criadas quando o comandondk-build cleanfor usado (mudança 54461, mudança 54480, links em inglês). - A opção
NDK_ANALYZE=1foi modificada para ser menos detalhada. gnu-libstdc++/Android.mkfoi corrigido para incluir um caminhobackward/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-gdbfoi corrigido para corresponder à classificação deCPU_ABIS, e não deAPP_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/swap32do x86:invalid 'asm': operand number out of range(problema 54465, mudança 57242, links em inglês). ld.goldfoi corrigido para mesclar literais de string.ld.goldfoi corrigido para processar o alinhamento de um símbolo grande.ld.goldfoi 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-dynamicpara programas vinculados estaticamente. O GCC não adiciona mais uma seção.interppara programas vinculados estaticamente. - Foi corrigido o erro de compilação
stlportdo GCC 4.4.3 sobretypedefinconsistente de_Unwind_Control_Block(problema 54426) - Os scripts
awkforam corrigidos para processar arquivosAndroidManifest.xmlcriados no Windows e que podem conter caracteres\rà direita e causar erros de compilação (problema 42548, link em inglês). make-standalone-toolchain.shfoi corrigido para testar o diretórioprebuilts/e detectar se o host é de 32 ou 64 bits.- A opção
-integrated-asdo Clang 3.2 foi corrigida. - Foram corrigidos os dados do gerenciador
pr1epr2do modelo compacto ARM EHABI. - A opção
-mllvm -arm-enable-ehabido 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-sdkno manifesto do aplicativo (Problema 57015, link em inglês).
- O script
- Outras mudanças:
-
- Correções de cabeçalho
- Os cabeçalhos foram modificados para tornar
__set_errnouma função in-line, uma vez que__set_errnoemerrno.hteve o uso suspenso elibc.sonão a exporta mais. elf.hfoi modificado para incluirstdint.h(problema 55443).sys/un.hfoi corrigido para ser incluído de maneira independente de outros cabeçalhos (problema 53646).- Toda a família de APIs
MotionEvent_getHistoricalfoi corrigida para capturar oconst AInputEvent* motion_event(problema 55873). malloc_usable_sizefoi corrigido para capturarconst void*(problema 55725).- stdint.h foi corrigido para ter maior compatibilidade com C99. (mudança 46821, link em inglês).
wchar.hfoi modificado para não redefinirWCHAR_MAXeWCHAR_MIN- A declaração
<inttypes.h>foi corrigida para as macrosPRIeSCNrelacionadas ao ponteiro (problema 57218). - O cabeçalho
sys/cdefs.hfoi mudado para que__WCHAR_TYPE__seja de 32 bits para níveis de API anteriores a 9. Isso significa quewchat_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).
- Os cabeçalhos foram modificados para tornar
- 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.shfoi atualizado para oferecer compatibilidade com a bibliotecastlport, além degnustl, quando você especificar a opção--stl=stlport. Para mais informações, consulteSTANDALONE-TOOLCHAIN.html. - O script
make-standalone-toolchain.shfoi atualizado para que a opção--llvm-version=crie os scripts$TOOLCHAIN_PREFIX-clange$TOOLCHAIN_PREFIX-clang++, além declangeclang++, 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-semanticspara 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-promotionfoi 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 queconst_casttransmita 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.
- Foi adicionada uma sinalização
-mldc1-sdc1foi adicionado aos compiladores MIPS GCC e Clang. Por padrão, os compiladores alinham objetos de 8 bytes corretamente e emitem as instruçõesldc1esdc1para 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çõesldc1esdc1na memória não alinhada. Nesse caso, use a sinalização-mno-ldc1-sdc1para solucionar o problema.- Será feito o downgrade da severidade do evento de "aviso" para "informação", caso
APP_PLATFORM_LEVELseja maior queAPP_MIN_PLATFORM_LEVEL.APP_PLATFORM_LEVELpode ser mais baixo queAPP_PLATFORMemjni/Application.mkporque o NDK não tem cabeçalhos para todos os níveis. Nesse caso, o nível é reduzido. OAPP_MIN_PLATFORM_LEVELé especificado pelaandroid:minSdkVersionno manifesto do seu aplicativo (problema 39752). - Os métodos
android_getCpuIdArm()eandroid_setCpuArm()foram adicionados acpu-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-buildfoi modificado para usaras/lddo GCC 4.7 para compilação do Clang.Observação: no GCC 4.7,
monotonic_clockeis_monotonicforam renomeados comosteady_clockeis_steady, respectivamente. - Os novos avisos a seguir foram adicionados ao script
ndk-build:- Avisos foram adicionados quando
LOCAL_LDLIBS/LDFLAGSsã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/LDFLAGSde uma biblioteca compartilhada ou módulos executáveis.
- Avisos foram adicionados quando
- Os scripts de compilação foram atualizados. Assim, se
APP_MODULESnão for definido e somente bibliotecas estáticas estiverem listadas emAndroid.mk, o script forçará a criação de todas elas (problema 53502, link em inglês). - O
ndk-buildfoi atualizado para oferecer compatibilidade com caminhos absolutos emLOCAL_SRC_FILES. - Os executáveis
*-gdbtuiforam removidos e são cópias dos executáveis*-gdbcom a opção-tuiativada. - Os scripts de compilação foram atualizados para informar você quando o front-end do compilador Edison Design Group (EDG)
ativar
_STLP_HAS_INCLUDE_NEXTnovamente (problema 53646). - A variável de ambiente
NDK_LIBS_OUTfoi adicionada para permitir a substituição do caminho paralibraries/gdbserverdo padrão$PROJECT/libs. Para mais informações, consulteOVERVIEW.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 definirLOCAL_DISABLE_FORMAT_STRING_CHECKS=truepara desativar essa opção. Para mais informações, consulteANDROID-MK.html. - O suporte para Pretty-Print STL foi adicionado em
ndk-gdb-py. Para mais informações, consulteNDK-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.
- Correções de cabeçalho
Android NDK r8e (março de 2013)
- 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, consulteCHANGES.HTMLeNDK-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, consulteCHANGES.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_LIBRARIESeLOCAL_SHARED_LIBRARIES. Para saber mais, consulteCHANGES.HTML(problema 39378).
- Foi adicionado um grupo do conjunto de ferramentas de host de 64 bits (sufixo de nome de pacote
- 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:5790do compilador interno do GCC 4.7 foi corrigido. - O erro
redirect_eh_edge_1, at tree-eh.c:2214do 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, esteady_clockfoi ativado (problema 39680). - O conjunto de ferramentas foi corrigido para ativar
_GLIBCXX_HAS_GTHREADSpara 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çãodistance_non_agu_define_in_bb()(mudança 50383). - O GCC4.7/X86 foi corrigido para restaurar o comportamento
cmovanterior (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.goldpara__exidx_starte__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
rvalueinicializado 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:linequando os símbolos continham caminhos de arquivo longos e indiretos (problema 42448). - O
read_program_headerdo GDB foi corrigido para executáveis PIE do MIPS (mudança 49592). - Foi corrigida a falha de segmentação
STLportemuncaught_exception()(mudança 50236, link em inglês). - Foi corrigido o erro de barramento
STLportno processamento de exceções devido ao acesso sem alinhamento deDW_EH_PE_udata2,DW_EH_PE_udata4eDW_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).
- O script de compilação foi corrigido para o build de todos os conjuntos de ferramentas em
- Outras correções de bugs:
-
- Correção de cabeçalhos do NDK:
- Foram removidas definições redundantes de
size_t,ssize_teptrdiff_t. - Foram corrigidos os cabeçalhos
fenv.hde MIPS e ARM. stddef.hfoi corrigido para não redefiniroffsetof, porque ele já existe no conjunto de ferramentas.elf.hfoi corrigido para conterElf32_auxv_teElf64_auxv_t(problema 38441).- As definições
#ifdefde C++ foram corrigidas no arquivo principalOpenSLES_AndroidConfiguration.h(Problema 53163, link em inglês).
- Foram removidas definições redundantes de
STLportfoi 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.
cpufeaturesfoi corrigido para não analisar/proc/self/auxv(problema 43055, link em inglês).ld.goldfoi corrigido para não depender do host libstdc++ e, nas plataformas Windows, não depender da bibliotecalibgcc_sjlj_1.dll.- Foi corrigido o Clang 3.1, que emite uma lista de registro inconsistente em
.vsavee apresenta falha no assembler (mudança 49930). - O Clang 3.1 foi corrigido para compilar libgabi++ e transmitir os testes de
test-stlportpara 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
clangeclang++foram corrigidos no compilador NDK autônomo para detectar-cc1e não especificar-targetquando encontrado. ndk-buildfoi corrigido para observarNDK_APP_OUTdefinido emApplication.mk.libc.soelib.apara x86 foram corrigidos porque não apresentavam as funçõessigsetjmpesiglongjmpjá declaradas emsetjmp.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-buildfoi corrigido no Windows quando executado pelo diretório JNI do projeto (problema 40192). - Foi corrigido um problema em que o script
ndk-buildnão realiza a criação caso o makefile tenha espaços em branco na definição deLOCAL_PATH(Problema 42841, link em inglês).
- Correção de cabeçalhos do NDK:
- 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_cleanupe__cxa_type_matchforam atualizados para ter visibilidade padrão, e não mais a visibilidade oculta anterior no GNU libstdc++. Para mais informações, consulteCHANGES.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
STLportseja criado para ARM no modo Thumb. - Foi adicionada compatibilidade com
std::set_new_handlerem Gabi++ (problema 52805). - A chamada do sistema
FUTEXfoi ativada em GNU libstdc++. ndk-buildfoi atualizado para não copiar mais as bibliotecas estáticas pré-compiladas para o diretórioobj/local/<abi>/de um projeto (problema 40302).__ARM_ARCH_5*__foi removido do scripttoolchains/*/setup.mkde 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/rsqrtdo 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-alle-ftree-loop-linear(mais informações, link em inglês). pollyfoi 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).-fltofoi 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 porqueld.goldnão está disponível.--plugine--plugin-optforam ativados parald.goldno GCC 4.6/4.7.--text-reorderfoi ativado parald.goldno GCC 4.7.- GNU libstdc++ foi configurado com
_GLIBCXX_USE_C99_MATH, que torna indefinido o scriptisinfno cabeçalho biônico. Para mais informações, consulteCHANGES.html. - Foram adicionados
APP_LDFLAGSaos scripts de compilação. Para mais informações, consulteANDROID-MK.html. - Os scripts de criação foram atualizados para permitir que
NDK_LOG=0desative oNDK_LOG. - Os scripts de criação foram atualizados para permitir que
NDK_HOST_32BIT=0desative o conjunto de ferramentas de 32 bits do ambiente do desenvolvedor de host. - As sinalizações padrão do GCC/X86
-march=e-mtune=depentiumproegenericforam alteradas parai686eatom. - Os scripts de criação do conjunto de ferramentas foram aprimorados:
- Uma disputa em
build-gcc.shfoi corrigida para o tipo de buildmingw, que impedia um número significativo de processamentos de compilação paralelos. build-gabi++.shebuild-stlport.shforam atualizados e agora podem ser executados pelo pacote de NDK (problema 52835, link em inglês).run-tests.shfoi corrigido na coleção de utilitários deMSys.- O conjunto de ferramentas de host de 64 bits e o suporte à versão do Canadian Cross foram aprimorados.
- O script
build-mingw64-toolchain.shfoi atualizado para a versão mais recente. - Foi adicionada uma opção para criar
libgnustl_static.aestlport_static.asem usar a visibilidade oculta.
- Uma disputa em
Android NDK r8d (dezembro de 2012)
- 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ávelNDK_TOOLCHAIN_VERSION=4.7ou a adicione aApplication.mk. - Para builds autônomos, adicione a opção
--toolchain=amake-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.
- Para o
- A compatibilidade com exceções
stlportfoi adicionada via gabi++. O novo gabi++ depende dedlopene do código relacionado. Isso significa o seguinte:- Não é mais possível criar um executável estático usando a opção
-staticnem incluirlibstlport_static.ausandoAPP_STL := stlport_static. Ainda é possível usar a opção-staticcom um conjunto de ferramentas autônomo. A compilação de um executável dinâmico usandoinclude $(BUILD_EXECUTABLE)ainda funciona, porque o compilador adiciona automaticamente a opção-ldl. - Se você usa
-nostdlibe {-Wl,--no-undefined} para vinculações no seu projeto, inclua manualmente a opção-ldl.
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.
- Não é mais possível criar um executável estático usando a opção
- 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-alle-fstack-protector-strongusando compiladores GCC 4.6 e versões posteriores.Observação: a configuração
-mstack-protector-guardpor si só não ativa as opções-fstack-protector*. - A função
android_setCpu()foi adicionada asources/android/cpufeatures/cpu-features.cpara ser usada quando não for possível acionar a detecção automática via/procno Android 4.1 e versões mais recentes (Problema 164154 do Chromium, link em inglês).
- 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:
- 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 gerou o seguinte erro:
Esse problema foi causado pela criação no Mac OS X 10.7, que produzia binários que não eram compatíveis com o Mac OS 10.6.x e o NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- 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.1em Cygwin (problema 39585). - O script
make-standalone-toolchain.shfoi 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_ANDROIDBUFFERQUEUESOURCEausente 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)
- Foi corrigida a recriação desnecessária de arquivos de objeto durante o uso do script
- Outras correções de bugs:
-
- Correções de arquivo de cabeçalho do NDK:
__WINT_TYPE__ewint_tforam 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__emsys/cdefs.h(problema 14627, link em inglês). - Os cabeçalhos em
byteswap.hedirent.hforam reorganizados. limits.hfoi corrigido para incluirpage.h, que fornece as configuraçõesPAGE_SIZE(problema 39983, link em inglês).- O tipo de retorno de
glGetAttribLocation()eglGetUniformLocation()foi corrigido deintparaGLint. - Foi corrigida a constante
__BYTE_ORDERpara builds x86 (Problema 39824, link em inglês).
- Foi corrigido o script
ndk-buildpara não substituir-Ospor-O2para versões ARM. - Foram corrigidos scripts de criação para permitir a substituição das configurações
HOST_AWK,HOST_SEDeHOST_MAKE. - Foi corrigido o problema de
ld.goldem versõesfsck_msdosque 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.aausente na vinculação de bibliotecas compartilhadas.
- Correções de arquivo de cabeçalho do NDK:
- 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
SIGILLpara caminhos sem uma instrução de retorno. make-standalone-toolchain.shfoi atualizado para aceitar o sufixo-clang3.1, que é equivalente a adicionar--llvm-version=3.1ao 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.aseja criada e colocada emlib32/.
Android NDK r8c (novembro de 2012)
- 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, exporteNDK_TOOLCHAIN_VERSION=clang3.1ou adicione esta configuração de variável de ambiente aApplication.mk. - Para criações autônomas, adicione
--llvm-version=3.1amake-standalone-toolchain.she substituaCCeCXXno seu makefile por<tool-path>/bin/clange<tool-path>/bin/clang++. ConsulteSTANDALONE-TOOLCHAIN.htmlpara mais detalhes.
Observação: esse recurso é experimental. Faça o teste e informe sobre qualquer problema.
- Para
- O vinculador Gold
ld.goldfoi 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 vinculadorld.bfdadicionandoLOCAL_LDFLAGS += -fuse-ld=bfdaAndroid.mkou transmitindo-fuse-ld=bfdpara 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]endk-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-10por meio deandroid-13emAPP_PLATFORM,project.propertiesoudefault.propertiesvinculemandroid-9, em vez deandroid-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
-fPIEpara executáveis independentes de posição (PIE, na sigla em inglês). Uma nova opção deAPP_PIEpermite que você controle esse comportamento. ConsulteAPPLICATION-MK.htmlpara mais detalhes.Observação: todos os níveis de API acima de 14 continuam vinculando
platforms/android-14e nenhum novoplatforms/android-Nfoi adicionado. - O
ndk-buildfoi modificado para fornecer avisos se o nível de API ajustado for maior do queandroid:minSdkVersionnoAndroidManifest.xmldo projeto.
- A lógica de criação foi modificada para que projetos que especificam
- A biblioteca auxiliar
cpu-featuresfoi atualizada para incluir mais recursos específicos do ARM. Consultesources/android/cpufeatures/cpu-features.hpara 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-aao vinculador. Essa mudança garante que as bibliotecas específicas de v7 ecrt*.osejam vinculadas corretamente. -mfpu=vfpv3-d16foi adicionado aondk-build, em vez da opção-mfpu=vfpusada em versões anteriores
- Esse tipo de criação foi modificado para transmitir o parâmetro
- 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:
- Correções importantes de bugs:
-
- Foi corrigido um problema em que a execução de
make-standalone-toolchain.shcom 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++.aagora é preservada quando copiada.
- O
\rredundante foi removido da pré-compilação do Windowsecho.exe. O\rredundante gerava a falha degdb.setupno 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 detypeinfopor padrão. Para mais detalhes, consultetoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo(problema 22165, link em inglês). - Foi corrigido um problema no contexto de
nullnocp/mangle.c::write_unscoped_namedo GCC 4.6, em que o GCC podia falhar quando o contexto eranulle a referência era cancelada emTREE_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 deSTLport, 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-psabipara evitar esse aviso não é mais obrigatória. - Foi corrigido um problema em que um projeto com sufixos
.armou.neonemLOCAL_SRC_FILEStambém usavaAPP_STL. ComAPP_STL, o scriptndk-buildpesquisa arquivos C++ emLOCAL_SRC_FILESantes de adicionar caminhos STLheader/libà compilação. Ondk-buildfoi modificado para filtrar os sufixos.arme.neonantes da pesquisa. Caso contrário, os itens emLOCAL_SRC_FILES, comomyfile.cpp.arm.neon, não serão compilados como código C++. binutils-2.21/ld.bfdfoi corrigido para poder vincular objetos de binutils mais antigos semtag_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/ldvincula objetos pré-compilados pelobinutils-2.21mais recente. - Foi corrigido um problema na compilação de
stdc++no GNU com-mthumbe-march=armv7-a, modificandomake-standalone-toolchain.shpara preencherheaders/libsno subdiretórioarmv7-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 dechar(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).
- O ARM GCC 4.4.3/4.6
-fstack-protectorfoi corrigido para X86, que também é o padrão para o destino de ABI x86 dondk-build.- Correções específicas de MIPS:
- A extremidade
STLportfoi corrigida com a configuração de_STLP_LITTLE_ENDIANcomo 1 na complilação delibstlport_*de MIPS. - O problema com
__builtin_unreachabledo 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).
- A extremidade
- 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
gdbcom uma dependência conectada em uma versão específica do Python (problema 36120). ndk-gdbfoi corrigido quandoAPP_ABIcontémalle 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
solibsatual quando o vinculador for consistente. Essa mudança acelera o gerenciamento do eventosolib(problema 37677). - Foi adicionada uma correção para fazer tentativas repetidas de encontrar pontos de interrupção
solib. O GDB agora tentaenable_break()novamente durante cada chamada parasvr4_current_sos()até a conclusão do processo (mudança 43563). - Foi corrigido um problema em que
gdbnão parava em pontos de interrupção localizados em bibliotecasdlopen-ed(problema 34856). SIGILLfoi corrigido no vinculador dinâmico ao chamardlopen(), no sistema em que/system/bin/linkertinha os símbolos removidos ertld_db_dlactivity()era implementado comoThumb, devido à não preservação doLSBdesym_addr(Problema 37147, link em inglês).
- 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
- Foi corrigido um problema em que a execução de
- 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
__unusedforam substituídos por__linux_unusedemlinux/sysctl.helinux/icmp.hpara evitar conflito com#define __unusedemsys/cdefs.h. fenv.hfoi corrigido para funções C delimitadas por__BEGIN_DECLSe__END_DECLS.- As funções não implementadas foram removidas em
malloc.h. - A definição
stdint.hdeuint64_tfoi corrigida para compiladores ANSI (problema 1952, link em inglês). - As macros do pré-processador foram corrigidas em
<arch>/include/machine/*. link.hfoi substituído para MIPS pela nova versão que é compatível com todas as plataformas.linux-unistd.hfoi removido.- As macros específicas de GLibc
LONG_LONG_MIN,LONG_LONG_MAXeULONG_LONG_MAXforam movidas de<pthread.h>para<limits.h>.
- O código
- Foi corrigido um buffer excedente em
ndk-stack-parser. _STLP_USE_EXCEPTIONSfoi 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 quandoSTLporté 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 as seguintes configurações para realizar este tipo de criação:
./build/tools/make-release.sh --force --systems=linux-x86
libc.sofoi corrigido para não exportaratexit()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 porcrtbegin_*.o.Caso seu projeto seja vinculado às opções
-nostdlib -Wl,--no-undefined, forneça seu próprio__dso_handleporquecrtbegin_so.onão está vinculado nesse caso. O conteúdo de__dso_handlenã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
objdumppara entradaspltfoi corrigido para gerar uma forma mais legível defunction@plt. - Foram removidos os símbolos a seguir, que foram introduzidos em GCC 4.6
libgcc.ada bibliotecalibc.soda plataforma X86:__aeabi_idiv0,__aeabi_ldiv0,__aeabi_unwind_cpp_pr1e__aeabi_unwind_cpp_pr2. - Foram removidos
.ctors,.dtorse.eh_framenão usados nocrt*_so.Sde MIPS. ndk-gdbfoi atualizado para só capturar a última linha de saída parandk-buildDUMP_XXXX. Essa mudança garante que, seApplication.mkouAndroid.mkimprimir algo com a sintaxe$(info ...), isso não será inserido no resultado deDUMP_XXXX(Mais informações, link em inglês).
- Correção de cabeçalhos do NDK:
- Outras mudanças:
-
- Os cabeçalhos
arch-x86earch-mipsforam removidos deplatforms/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, link em inglês).
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- O
ndk-buildfoi corrigido para reconhecer novas extensões de arquivo C++ por padrão:.cc .cp .cxx .cpp .CPP .c++ .C. Você ainda pode usarLOCAL_CPP_EXTENSIONpara substituir essas configurações de extensão. - Foi corrigido um problema em
samples/san-angelesque 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-gl2do android-5 para android-7native-activitydo android-9 para o android-10native-audiodo android-9 para o android-10native-plasmado 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 emcrtbegin_static/dynamic.o) para que as ferramentas de depuração possam agir corretamente. O membro da estrutura e os valores são definidos da seguinte maneira: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-tagestão obsoletas. - Foi adicionado um novo script
run-tests-all.sh, que chamarun-tests.shestandalone/run.shcom várias condições. O scriptrun-tests.shé executado sem a opção--abie foi aprimorado para compilar a maioria dos testes para todas as ABIs com suporte e funcionar em todos os dispositivos conectados.
- Os cabeçalhos
Android NDK r8b (julho de 2012)
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_COMMANDSnos 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,-de-spara 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, ogdbno host pode definir um ponto de interrupção em__dl_rtld_db_dlactivitye estar alerta às atividades do vinculador (por exemplo, fazer nova verificação de símbolossolibquandodlopen()for chamado).
- A ferramenta foi atualizada para transmitir sinalizações
- O
ndk-build cleanfoi corrigido no Windows, porque falhava ao remover./libs/*/lib*.so. ndk-build.cmdfoi corrigido para retornar umERRORLEVELdiferente de zero quandomakefalhar.libc.sofoi corrigido para interromper a exportação incorreta de símbolos__exidx_starte__exidx_end.SEGVfoi corrigido para liberação da pilha após__libc_initpara ARM e MIPS.
- Foram corrigidos problemas de
- Mudanças importantes:
-
- O conjunto de ferramentas do GCC 4.6 (
binutils2.21 comgolde GDB 7.3.x) foi adicionado para coexistir com o original do GCC 4.4.3 (binutils2.19 e GDB 6.6).- Agora, GCC 4.6 é o conjunto de ferramentas padrão. Você pode definir
NDK_TOOLCHAIN_VERSION=4.4.3emApplication.mkpara selecionar o original. - A compatibilidade com o vinculador
goldestá disponível apenas para arquiteturas ARM e x86 nos hosts do Linux e do Mac OS. Esse suporte fica desativado por padrão. AdicioneLOCAL_LDLIBS += -fuse-ld=goldemAndroid.mkpara ativá-la. - Os programas compilados com
-fPIEexigem o novoGDBpara depuração, incluindo binários em imagens do sistema Android 4.1 (API de nível 16). - A ferramenta
binutils2.21 doldcontém correções da versão 2.22 que passaram por backport:- O
ld --gc-sectionsfoi corrigido porque retinha incorretamente referências zumbi a bibliotecas externas (mais informações, link em inglês). - O comando
stripde ARM foi corrigido para preservarp_alignep_flagsoriginais emGNU_RELRO, caso sejam válidos. Sem essa correção, os programas criados com-fPIEnão podiam ser depurados (Mais informações, link em inglês).
- O
- A otimização de
sincos()foi desativada para compatibilidade com plataformas mais antigas.
- Agora, GCC 4.6 é o conjunto de ferramentas padrão. Você pode definir
- As opções de criação foram atualizadas para ativar o bit Never eXecute (NX) e as proteções
relro/bind_nowpor padrão:--noexecstackfoi adicionado ao assembler e-z noexecstackao 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 relroe-z nowforam 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:
- Desative a proteção NX configurando a opção
--execstackpara o assembler e-z execstackpara o vinculador. - Desative o aumento da proteção de dados internos configurando as opções
-z norelroe-z lazypara o vinculador. - Desative essas proteções no NDK
jni/Android.mkconfigurando as 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.htmlpara ver mais detalhes. - Desative a proteção NX configurando a opção
- Foi adicionada uma marca para os executáveis do Android com a seção
.note.ABI-tag(emcrtbegin_static/dynamic.o) para que as ferramentas de depuração funcionem corretamente. O membro da estrutura e os 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 */ }
- O conjunto de ferramentas do GCC 4.6 (
- Outras correções de bugs:
-
- A realocação truncada de
mips-linux-gnufoi corrigida para corresponder ao problema deR_MIPS_TLS_LDM(mais informações, link em inglês). - As falhas de segmentação da ferramenta
ldforam corrigidas durante o uso de--gc-sections(mais informações, link em inglês). - O problema de contagem de
GOT_PAGEdo MIPS foi corrigido. (mais informações, link em inglês). - O link do símbolo de aviso para
mips_elf_count_got_symbolsfoi corrigido. - O link do símbolo de aviso para
mips_elf_allocate_lazy_stubfoi 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-sharedfoi 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,-fpieou-fPIE, o compilador MIPS adicionará-mno-shared, que desativa PIC. O compilador foi corrigido para não adicionar-mno-sharednesse caso. - Foi corrigido o uso de nomes de pacotes incorretos em exemplos
hello-jnietwo-libspara que o projetotestsabaixo deles possa ser compilado.
- A realocação truncada de
- Outras mudanças:
-
- Mudança dos locais dos binários:
gdbserverfoi movido detoolchain/<arch-os-ver>/prebuilt/gdbserverparaprebuilt/android-<arch>/gdbserver/gdbserver.- O prefixo do conjunto de ferramentas do x86 foi renomeado de
i686-android-linux-parai686-linux-android-. sources/cxx-stl/gnu-libstdc++/includeelibforam movidos parasources/cxx-stl/gnu-libstdc++/4.6quando compilados com o GCC 4.6 ou parasources/cxx-stl/gnu-libstdc++/4.4.3quando o GCC 4.4.3 é usado para esse processo.libbfd.aelibintl.aforam movidos delib/paralib32/.
- Vários scripts foram adicionados e aprimorados na recriação e teste do conjunto de ferramentas do NDK:
build-mingw64-toolchain.shfoi 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.shfoi aprimorada com o uso do comandoclonee usandocheckoutsomente 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.shebuild-host-gdb.sh. tests/check-release.shfoi 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.shforam reescritos.
- O cabeçalho
if_dl.hfoi removido de todas as plataformas e arquiteturas. Os elementosAF_LINKesockaddr_dlque ele descreve são específicos para BSD (ou seja, eles não existem no Linux).
- Mudança dos locais dos binários:
Android NDK r8 (maio de 2012)
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.htmlno pacote do NDK.Por padrão, o código é gerado para dispositivos com processador ARM. É possível adicionar
mipsà sua definição deAPP_ABIno arquivoApplication.mkpara criar para plataformas MIPS. Por exemplo, a linha a seguir instrui ondk-builda 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.mkpara compilar o criar de máquina MIPS. - Você pode criar um conjunto de ferramentas autônomo de MIPS usando a opção
--arch=mipsao chamarmake-standalone-toolchain.sh. Consultedocs/STANDALONE-TOOLCHAIN.htmlpara 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.
- 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
- 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 basebpara a classe derivadaDestá 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.shfalha ao copiarlibsupc++.*.
- Foi corrigido um erro de digitação na implementação de GAbi++ em que o resultado de
- Outras correções de bugs:
-
- O
ndk-build.cmdfoi corrigido para garantir quendk-build.cmdfuncione corretamente mesmo que o usuário tenha redefinido a variável de ambienteSHELL, que pode ser modificada ao instalar uma variedade de ferramentas de desenvolvimento em ambientes Windows.
- O
Android NDK r7c (abril de 2012)
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).
- 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,
- 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 porndk-gdb. - Foi adicionada compatibilidade com a criação de módulos com centenas ou até milhares de arquivos de origem, definindo
LOCAL_SHORT_COMMANDSparatrueno seuAndroid.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.htmlpara saber mais detalhes.
- Foi adicionado suporte para diretórios de saída personalizados por meio da variável de ambiente
- Outras correções de bugs:
-
- A implementação de
android_getCpuCount()foi corrigida na biblioteca auxiliarcpufeatures. 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.
- A implementação de
Android NDK r7b (fevereiro de 2012)
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.hfoi 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, consultedocs/ANDROID-ATOMICS.html.- Reversão do
binutils2.19 para corrigir problemas de depuração que apareceram no NDK r7 (que usabinutils2.20.1). - O
ndk-buildfoi corrigido no Linux de 32 bits. Um erro de empacotamento colocou uma versão de 64 bits do executávelawkemprebuilt/linux-x86/binno 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.cmdde 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.
- Foi removido um bug de loop infinito / pilha excedente que acontecia ao tentar chamar
- 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 GNUlibstdc++C++). Use-lgnustl_sharedse quiser vincular a versão da biblioteca compartilhada ou-lstdc++para a versão estática.Consulte
docs/STANDALONE-TOOLCHAIN.htmlpara saber mais sobre essa correção. - O
gnustl_sharedfoi corrigido no Cygwin. O vinculador informava que não podia encontrarlibsupc++.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_FEATURESpara'exceptions','rtti'ou ambos emApplication.mk. Consultedocs/APPLICATION-MK.htmlpara saber mais detalhes.
- Ative exceções e/ou RTTI explicitamente nos seus módulos ou
ndk-gdbagora 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 porps, que é normalmente um processo de serviço.- Foi corrigido um bug raro em que o NDK r7 não cumpre o valor
LOCAL_ARM_MODEe 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 "=".
memmovefoi usado, em vez dememcpyemstring::assign- Foi adicionado melhor gerenciamento de
IsNANorINF,IsINF,IsNegNANetc.
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-featuresfoi atualizada para informar três recursos opcionais de CPU x86 (SSSE3,MOVBEePOPCNT). Consultedocs/CPU-FEATURES.htmlpara mais detalhes. docs/NDK-BUILD.htmlfoi atualizado para mencionarNDK_APPLICATION_MK, em vez deNDK_APP_APPLICATION_MK, para selecionar um arquivoApplication.mkpersonalizado.- Cygwin: o
ndk-buildnã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
/homepara\\server\subdir, em vez deC:\Some\Dir.
- Quando o prefixo da unidade Cygwin não era
- Cygwin:
ndk-buildnão tenta usar as ferramentas nativas do Windows em$NDK/prebuilt/windows/bincom determinadas versões do Cygwin e/ou do GNU Make.
- Quando seu app usar o tempo de execução GNU
Android NDK r7 (novembro de 2011)
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, consultedocs/openmaxal/index.htmle 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.htmle http://www.khronos.org/opensles/ (link em inglês).
- Foi adicionada a API multimídia nativa baseada no Khronos Group OpenMAX AL 1.0.1
padrão. Os novos cabeçalhos
- Foi adicionado suporte para CCache. Para acelerar recriações grandes, defina a variável de ambiente
NDK_CCACHEcomoccache(ou o caminho para seu binárioccache). 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_ABIparaalla 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 no seuApplication.mksão equivalentes a esta versão:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Isso também funciona se você definir
APP_ABIao chamarndk-builda partir da linha de comando, que é uma maneira rápida de verificar se o projeto foi criado para todas as ABIs compatíveis sem alterarApplication.mk file. Por exemplo:ndk-build APP_ABI=all
- Foi adicionada uma variável
LOCAL_CPP_FEATURESaAndroid.mkque 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. Consultedocs/ANDROID-MK.htmledocs/CPLUSPLUS-SUPPORT.htmlpara 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-builda 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ê invocandk-buildde um subdiretório da sua árvore de projetos nem se você defineNDK_PROJECT_PATHpara apontar para um diretório específico.
- Foram adicionadas as APIs de NDK oficiais para o Android 4.0 (API de nível 14), que adicionam os seguintes
recursos nativos à plataforma:
- Recursos experimentais
-
Agora, é possível criar seus arquivos de origem do NDK no Windows sem Cygwin chamando o script
ndk-build.cmda partir da linha de comando do caminho do seu projeto. O script usa exatamente os mesmos argumentos que o scriptndk-buildoriginal. 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-gdbnã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>) seAPP_MODULESnão for definido no seuApplication.mk. Por exemplo, se um módulo de alto nívelfooimportar um módulobar,libfoo.soelibbar.soserão copiados para o local de instalação. Antes disso, apenaslibfoo.soera copiado, a menos que você listassebarno seuAPP_MODULEStambém. Se você definirAPP_MODULESexplicitamente, o comportamento se manterá inalterado. ndk-gdbagora 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
fooimportar a biblioteca estáticabarque importazoo, olibfoo.soagora será vinculado alibbar.aelibzoo.a.
- As bibliotecas compartilhadas importadas agora são instaladas por padrão no local de instalação de destino (
- 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 nodocs/CPLUSPLUS-SUPPORT.htmlatualizado. - 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 emdocs/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. Por exemplo, para compilarfoo.cppebar.cxxcomo 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()ouglGetProcAddress(). A lista a seguir descreve as extensões com compatibilidade recente:- GLES 1.x
-
GL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_NV_system_time
Android NDK r6b (agosto de 2011)
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=x86foi 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/includepara builds x86. Veja o bug para saber mais (link em inglês). - As definições de
ptrdiff_tesize_tforam corrigidas em sistemas específicos de x86 quando são usadas com o conjunto de ferramentas autônomo de x86.
- Build corrigido quando
Android NDK r6 (julho de 2011)
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.htmlno pacote NDK.Por padrão, o código é gerado para dispositivos com processador ARM, mas é possível adicionar x86 à sua definição
APP_ABIno arquivoApplication.mkpara criação de plataformas x86. Por exemplo, a linha a seguir instrui ondk-builda 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.mkpara 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.3ao chamarmake-standalone-toolchain.sh. Vejadocs/STANDALONE-TOOLCHAIN.htmlpara mais detalhes. - A nova ferramenta
ndk-stackpermite traduzir rastreamentos de pilha emlogcatque 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, consultedocs/NDK-STACK.html.
- 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
- Outras mudanças:
arm-eabi-4.4.0, que estava descontinuado desde o NDK r5, foi removido da distribuição do NDK.
Android NDK r5c (junho de 2011)
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_LIBRARIESde funcionar corretamente com o novo conjunto de ferramentas, e uma documentação para isso foi adicionada emdocs/ANDROID-MK.html. - Foi corrigido um bug em que o código vinculado a
gnustl_staticfalhava 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 parâmetrohistory_indexausente. As definições corrigidas 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-modulefalhar, será capturada a lista de diretórios que foram pesquisados. Isso é útil para verificar se a definiçãoNDK_MODULE_PATHusada pelo sistema de criação está correta. - Quando
import-modulefor concluído, será capturado o diretório em que o módulo foi encontrado para o registro (visível comNDK_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 deadb shelle mensagens de erro aprimoradas.<pthread.h>: a definição dePTHREAD_RWLOCK_INITIALIZERfoi 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_NEONfosse definido como verdadeiro (erro de digitação embuild/core/build-binary.mk). - Foi corrigido um bug que impedia a compilação de arquivos Assembly
.s. Os arquivos.Sfuncionavam corretamente.
- Os arquivos de objetos agora são sempre vinculados na ordem em que aparecem em
Android NDK r5b (janeiro de 2011)
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 -ma 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, definaNDK_USE_CYGPATH=1no seu ambiente para usarcygpath -mnovamente. - 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_PATHfuncionasse corretamente quando continha vários diretórios separados por dois pontos. - O script
prebuilt-common.shconté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_ADDRSTRLENfoi adicionada a<netinet/in.h>. - Declarações ausentes em
IN6_IS_ADDR_MC_NODELOCALeIN6_IS_ADDR_MC_GLOBALforam adicionadas a<netinet/in6.h>. - "asm" foi substituído por "__asm__" em
<asm/byteorder.h>para permitir a compilação com-std=c99.
Android NDK r5 (dezembro de 2010)
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
cpufeaturesque 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-plasmaenative-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.
Android NDK r4b (junho de 2010)
- 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 ampliaarmeabipara 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 bibliotecacpufeaturespara 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
.apkfinal 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
Bitmappelo código nativo.
- Fornece um sistema de build simplificado com o novo comando
de build
Android NDK r3 (março de 2010)
- 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.
Android NDK r2 (setembro de 2009)
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 objetoGLSurfaceView.
Android NDK r1 (junho de 2009)
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.