Esta página fornece informações sobre mudanças em todas as versões estáveis lançadas do NDK. Para fazer o download da versão estável mais recente do NDK ou de qualquer versão Beta disponível no momento, consulte a página Downloads do NDK.
Consulte o grupo do Google android-ndk-announce para ter informações mais completas e inscreva-se para receber anúncios de lançamento.
LTS do Android NDK r27 (julho de 2024)
Registro de mudanças (link em inglês)- Downloads
-
- Os downloads desta versão estão disponíveis neste link.
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-gdb
usa o LLDB por padrão. - O NDK r23 é a última versão compatível com sistemas não Neon. Do NDK r24 em diante, as bibliotecas armeabi-v7a no sysroot vão ser criadas com o Neon. Um número muito pequeno de dispositivos mais antigos não é compatível com o Neon, então a maioria dos apps não será afetada, exceto pela melhoria de desempenho.
- O Jelly Bean (APIs 16, 17 e 18) não será compatível com a próxima versão do NDK. O SO mínimo com suporte ao NDK r24 vai ser o KitKat (nível 19 da API).
-
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 usandoas
diretamente, 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::filesystem
está inclusa. Há dois problemas conhecidos:-
Problema
1258 (link em inglês): o
std::filesystem::perm_options::nofollow
pode não ser honrado em dispositivos antigos. -
Problema
1260 (link em inglês): o
std::filesystem::canonical
terá êxito indevidamente ao receber um caminho inexistente em dispositivos antigos.
-
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=lld
durante a vinculação. Observe que o Problema 843 (link em inglês) afetará builds que usam o LLD com binutils strip e objcopy, e não com llvm-strip e llvm-objcopy. -
Os caminhos de instalação do conjunto de ferramentas legado serão removidos nas próximas versões. Esses caminhos estão obsoletos desde o NDK r19 e ocupam um espaço considerável no NDK. Os caminhos que estão sendo removidos são:
- platforms
- sources/cxx-stl
- sysroot
- toolchains (exceto toolchains/llvm).
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=lld
durante a vinculação. - A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
- APIs do Android Q adicionadas.
-
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=lld
na vinculação. Observação: no momento, o lld não é compatível com símbolos compactados no Windows Problema 888 (link em inglês). O Clang também não pode gerar símbolos compactados no Windows. Isso pode ser um problema ao usar artefatos compilados no Darwin ou Linux. - A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
-
Problema 780 (link em inglês):
os conjuntos de ferramentas
autônomos agora são desnecessários. Clang, binutils, o sysroot e outras partes do conjunto de ferramentas agora são instalados em
$NDK/toolchains/llvm/prebuilt/<host-tag>
, e o Clang os encontrará automaticamente. Em vez de criar um conjunto de dados conjunto de ferramentas para ARM da API 26, invoque o compilador diretamente na o NDK:$ $NDK/toolchains/llvm/prebuilt/
Na versão r19, o conjunto de ferramentas também é instalado no caminho antigo para dar ao build uma chance de se adaptar ao novo layout. Os caminhos antigos serão removidos na versão r20. O script/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
não será removida. O script agora é desnecessário e emitirá um aviso com as informações acima, mas será mantido para preservar os fluxos de trabalho existentes. Se você utiliza o ndk-build, o CMake ou um conjunto de ferramentas autônomo, provavelmente não haverá nenhuma alteração no seu fluxo de trabalho. Essa alteração é significativa para os mantenedores de sistemas de criação de terceiros, que agora poderão excluir alguns códigos específicos do Android. Para mais informações, consulte a Crie Sistema de mantenedores de sistemas (em inglês). - O ndk-depends foi removido. Acreditamos que o ReLinker é uma solução melhor para problemas de carregamento de bibliotecas nativas em versões antigas do Android.
- Problema 862 (link em inglês): os scripts do wrapper do GCC que eram redirecionados para o Clang foram removidos, porque não são funcionais o suficiente para serem substitutos.
-
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=lld
durante a vinculação. - gnustl, gabi++ e stlport foram removidos.
- O suporte para ICS (android-14 e android-15) foi removido. Os apps que usam executáveis não precisam mais fornecer um PIE e um não PIE.
- A partir de agosto de 2019, a Play Store exige suporte a 64 bits no upload de um APK. Comece agora a portabilidade para evitar surpresas quando chegar a hora. Para mais informações, leia esta postagem do blog (em inglês).
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-14
será usada mesmo seAPP_PLATFORM
estiver definida para uma versão anterior a essa. - Agora, o CMake no NDK tem suporte à criação do código Assembly escrito em YASM para execução em arquiteturas x86 e x86-64. Para saber mais, consulte Criação de código Assembly.
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_cast
ausente.
-
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.sh
agora é apenas um wrapper em torno da versão Python da ferramenta. Existem algumas diferenças de comportamento. Veja a mensagem de confirmação para saber mais detalhes. - Algumas bibliotecas para ABIs incompatíveis foram removidas (mips64r2, mips32r6, mips32r2 e x32). Ainda pode haver alguns atrasos.
- Foram resolvidos os problemas com crtbegin_static.o que resultaram na ausência de atexit no momento da vinculação ao criar um executável estático para o ARM android-21 +: problema 132 (link em inglês).
- Foi adicionado o arquivo do conjunto de ferramentas do CMake em build/cmake/android.toolchain.cmake.
- 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-build
assume o padrão de utilização do Clang na r13. Removeremos o GCC em uma versão subsequente. - O script
make-standalone-toolchain.sh
será removido na r13. Verifique semake_standalone_toolchain.py
atende à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.h
para que não contenha mais um valor de tipo enumerado inválido. - Foi corrigido um bug no ndk-build que resultava em avisos errados para bibliotecas estáticas usando libc++. Para saber mais sobre essa mudança, consulte os comentários aqui.
- Os cabeçalhos OpenSLES foram atualizados para o android-24.
- NDK
- Removemos a compatibilidade com a ABI armeabi-v7a-hard. Para saber mais, consulte esta explicação.
- Todos os sysroots foram removidos dos níveis de plataforma pré-GB. Descartamos a compatibilidade com eles na r11, mas não os removemos.
- A manipulação de exceção ao usar c++_shared no ARM32 funciona na maioria das vezes. Agora, o desbobinador será vinculado a cada objeto vinculado em vez da própria libc++. Para saber mais sobre essa manipulação de exceção, consulte Problemas conhecidos.
- Os sinalizadores padrão do compilador foram reduzidos.
(Problema 27).
- 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-info
foi ativado por padrão para builds de depuração do Clang. Essa mudança deve aprimorar a capacidade de depuração com o LLDB.--build-id
está ativado por padrão.- Agora, o ID do build será mostrado em relatórios de falhas nativas para que você possa identificar com facilidade qual versão do seu código estava em execução.
NDK_USE_CYGPATH
não deve mais causar problemas com libgcc. (problema com o Android 195486, link em inglês).- As opções
-Wl
,--warn-shared-textrel
e-Wl,--fatal-warnings
agora estão ativadas por padrão. Se você compartilhou realocações de texto, seu app não poderá ser carregado no Android 6.0 (API de nível 23) ou posterior. As realocações de texto nunca foram permitidas para apps de 64 bits. - Os cabeçalhos pré-compilados devem funcionar melhor agora. (problema 14 e problema 16, links em inglês).
- A bibliotecas STL ARM (não miniaturas) inacessíveis foram removidas.
- Adição de compatibilidade com Vulkan ao android-24.
- Adição da API Choreographer ao android-24.
- Adição das APIs
libcamera2
para dispositivos comINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ou mais recente. Para saber mais, consulte CameraCharacteristics. - Clang
- O Clang foi atualizado para 3.8svn (r256229, build 2812033).
- Os executáveis
clang.exe
eclang++.exe
no 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-plt
introduzida para corrigir erro interno do vinculador que ocorre ao vincular binários arm32 gigantes. - Correção de esboços de tempo de execução errados para AArch64. Isso estava causando o cálculo incorreto de endereços de salto para DSOs muito grandes.
- Introdução da opção padrão
--no-apply-dynamic
para contornar um bug de vinculador dinâmico para versões anteriores do Android. - NDK r11 KI para
dynamic_cast
não funciona com Clang. Corrigimos x86,stlport_static
e otimização. - GDB
- Atualizado para GDB 7.11. Para saber mais, consulte a página GDB News (link em inglês).
- Algumas correções de bugs para
ndk-gdb.py
. - Problemas conhecidos
- x86 ASAN ainda não funciona. Para saber mais, consulte a discussão nesta lista de alterações (link em inglês).
- A exceção liberada com
c++_shared
ainda não funciona para ARM no Android 2.3 (API de nível 9) ou no Android 4.0 (API de nível 14). - Cabeçalhos e bibliotecas Bionic para Android 6.0 (API de nível 23) e Android 7.0 (API de nível 24) ainda não foram expostos apesar da presença do android-24. Essas plataformas ainda apresentam os cabeçalhos e bibliotecas do Android 5.0 (API nível 21) (não uma regressão da r11).
- Ferramentas de RenderScript não estão presentes (não é uma regressão da r11). (Problema 7, link em inglês)
- Este registro de mudanças não serve como uma lista completa de todos os bugs de destaque.
__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-build
usará o Clang por padrão em uma próxima versão. O GCC será removido em uma próxima versão. - O script
make-standalone-toolchain.sh
será removido em uma versão futura. Caso você use esse script, migre paramake_standalone_toolchain.py
assim que possível. - NDK
- A compatibilidade com ABI armeabi-v7a-hard foi removida. Veja a explicação na documentação.
- Todos os sysroots foram removidos dos níveis de plataforma anteriores ao Android 2.3 (API de nível 9). Descartamos a compatibilidade com eles na r11 do NDK, mas não os removemos.
- A manipulação de exceção foi atualizada ao usar c++_shared em ARM32 e funciona na maioria das vezes (consulte Problemas conhecidos). Agora, o desbobinador é vinculado a cada objeto vinculado em vez da própria libc++.
- Os sinalizadores padrão do compilador foram reduzidos (Problema 27 do NDK, link em inglês). Você pode ver detalhes dessa atualização em Mudança 207721 (link em inglês).
- Adição de uma implementação Python de conjuntos de ferramentas autônomos em
build/tools/make_standalone_toolchain.py
. No Windows, não é mais preciso acionar o Cygwin para usar esse recurso. Removeremos a versão do bash em uma próxima versão. Por isso, teste a nova agora. - As criações de depuração do Clang foram configuradas para que a opção
-fno-limit-debug-info
seja ativada por padrão. Essa mudança permite uma melhor depuração com LLDB. - A opção
--build-id
foi ativada como padrão. Isso gerará a exibição de um identificador em relatórios de falhas nativas para que você possa ver com facilidade qual versão do seu código estava em execução. - O erro com
NDK_USE_CYGPATH
foi corrigido e não causará mais problemas com libgcc (problema 195486). - As opções a seguir foram ativadas por padrão:
-Wl,--warn-shared-textrel
e-Wl,--fatal-warnings
. Se você compartilhou realocações de texto, seu app não poderá ser carregado no Android 6.0 (API de nível 23) ou posterior. As realocações de texto nunca foram permitidas para apps de 64 bits. - Alguns problemas foram corrigidos para o melhor funcionamento dos cabeçalhos pré-compilados (problema 14 do NDK, problema 16 do NDK, links em inglês).
- A bibliotecas STL ARM (não miniaturas) inacessíveis foram removidas.
- Adição de compatibilidade com Vulkan ao android-24.
- Adição da API Choreographer ao android-24.
- As APIs libcamera2 foram adicionadas para dispositivos compatíveis com o
nível de recurso
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ou mais recente. Para ver mais informações, consulte a referência deCameraCharacteristics
. - Clang
- O Clang foi atualizado para 3.8svn (r256229, build 2812033). Os executáveis
clang.exe
eclang++.exe
no pacote do Windows de 32 bits são de 64 bits. O executável de 32 bits é chamado declang_32.exe
. __thread
foi corrigido e funciona agora.- GCC
- O compilador foi sincronizado com o ChromeOS GCC @ google/gcc-4_9 r227810.
- Patch de limpeza de cobertura da ToT (r231296) que passou por backport.
- Correção de
libatomic
para não usar ifuncs (problema 31 do NDK, link em inglês). - Binutils
- As mensagens de informação “Errata 843419 encontrada e corrigida” foram silenciadas.
- Introdução da opção
--long-plt
para corrigir um erro interno do vinculador que ocorre ao vincular binários arm32 gigantes. - Correção de esboços de tempo de execução errados para
AArch64
. Isso estava causando o cálculo incorreto de endereços de salto para objetos compartilhados dinamicamente (DSOs, na sigla em inglês) muito grandes. - Introdução da opção padrão
--no-apply-dynamic
para solucionar um bug de vinculação dinâmico para versões anteriores do Android. - Um erro conhecido da versão r11 do NDK foi corrigido, em que
dynamic_cast
não estava funcionando com o Clang, x86, stlport_static e otimização. - GDB
- Atualização para versão 7.11 de GBD. Para saber mais sobre essa versão, consulte as Novidades de GDB.
- Vários bugs no script
ndk-gdb.py
foram corrigidos. - Problemas conhecidos
- No momento, o Address Sanitizer (ASAN) x86 não funciona. Para saber mais, consulte o problema 186276 (link em inglês).
- A exceção liberada com
c++_shared
não funciona para ARM no Android 2.3 (API de nível 9) ou no Android 4.0 (API de nível 14). - Cabeçalhos e bibliotecas Bionic para Android 6.0 (API de nível 23) e posterior ainda não foram expostos apesar da presença do android-24. Essas plataformas ainda têm os cabeçalhos e bibliotecas do Android 5.0 (API de nível 21), o que é consistente com a versão r11 do NDK.
- As ferramentas do RenderScript não estão presentes, o que é inconsistente com a versão r11 do NDK. (problema 7 do NDK, link em inglês).
- No arquivo principal
NdkCameraMetadataTags.h
, o valor de tipo enumerado da tag de metadados da câmeraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
foi 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
--attach
do 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.py
foi corrigido. O recurso tinha regredido totalmente na versão r11.ndk-gdb
para Mac foi corrigido.- Foram adicionados mais atalhos de nível superior para ferramentas de linha de comando:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. Este comando estava totalmente ausente das versões anteriores.
- Os conjuntos de ferramentas autônomos foram corrigidos para libc++, em que
__cxxabi_config.h
estava ausente. - A documentação de ajuda de
--toolchain
foi corrigida emmake-standalone-toolchain.sh
.
- Anúncios importantes
- Clang
-
- Errata
- Diferentemente do que foi informado nas notas da versão r11,
__thread
não funciona. Isso ocorre porque a versão do Clang que enviamos não tem uma correção de bug para compatibilidade com TLS emulado.
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
__thread
por meio da emulação de TLS ELF com dados específicos de thread pthread. - O C++11
thread_local
funciona em alguns casos, mas não para dados com destruidores não triviais, porque exigem suporte da libc. Essa limitação não se aplica ao ser executada no Android 6.0 (API de nível 23) ou mais recente. - O TLS emulado ainda não funciona com o Aarch64 quando as variáveis TLS são acessadas de uma biblioteca compartilhada.
- 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_8BIT
foi removida. - sed foi removido.
- mclinker foi removido.
- Perl foi removido.
- Foram removidos todos os símbolos de todas as versões do NDK libc, m e dl que não são compatíveis com as versões de plataforma dessas bibliotecas.
- A compatibilidade com mips64r2 foi parcialmente removida. O restante será removido no futuro.
- 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
-target
comoarmv5te-linux-androideabi
.
- Para restaurar o comportamento antigo, transmita a opção de especificação
- O sistema de compilação foi alterado para usar
-isystem
para inclusões de plataformas.- Avisos causados pelo Bionic não interrompem mais a criação de apps.
- Foi corrigida uma falha de segmentação que ocorria quando um binário gerava exceções via gabi++ (problema 179410).
- O namespace in-line de libc++ foi mudado para
std::__ndk1
para evitar problemas de ODR com libc++ da plataforma. - Agora, todas as bibliotecas libc++ são criadas com libc++abi.
- Padrão
APP_PLATFORM
para Gingerbread.- A expectativa é que a compatibilidade com Froyo e os recursos mais antigos sejam descartados em uma versão futura.
- Os conjuntos de ferramentas autônomos da ARM foram mudados por padrão para arm7.
- A estrutura
_Unwind_Exception
de gabi++ foi atualizada para 64 bits. - As seguintes funcionalidades foram adicionadas ao cpufeatures:
- Detectar SSE4.1 e SSE4.2.
- Detectar recursos de CPU em x86_64.
- Atualização da libc++abi para o upstream r231075.
- Atualização de
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
euchar.h
da ToT Bionic. sys/cdefs.h
foi sincronizado em todos os níveis de API.- Foram corrigidos
fegetenv and fesetenv
para arm. - Foi corrigido o tamanho/alinhamento do ponteiro final de
crtend_*
para mips64 e x86_64.
- 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=gold
no momento da vinculação para usar Gold em vez de bfd. O padrão provavelmente mudará na próxima versão. - Melhor tempo de vinculação para binários gigantes no back-end do Gold ARM (até 50% de redução do tempo de vinculação para o navegador Chrome depurável).
- 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
-O0
gera 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=clang
agora escolhe essa versão do Clang por padrão. - O Clang 3.4 foi removido.
- O GCC 4.6 foi removido.
- A compatibilidade com várias linhas de execução
ld.gold
foi implementada em ld.gold para todas as arquiteturas. Agora, é possível fazer a vinculação com ou sem o suporte para várias linhas de execução. O padrão é fazer o processo sem esse recurso.- Para fazer a compilação com várias linhas de execução, use a opção
--threads
. - Para fazer a compilação sem várias linhas de execução, use a opção
--no-threads
.
- 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.h
paramips64
. - A verificação da versão do Clang foi removida para
__builtin_isnan
e__builtin_isinf
. - Foram adicionados
android-21/arch-mips/usr/include/asm/reg.h
eandroid-21/arch-mips64/usr/include/asm/reg.h
. - Foi corrigido um alerta falso de limites de matriz que o GCC 4.9 produzia para x86 e foram reativados os limites de matriz que o GCC 4.9 havia produzido para o ARM. O aviso para o ARM foi desativado antes incondicionalmente.
- O Clang 3.5 foi corrigido em
mips
emips64
para criar uma seção.gcc_except_table
gravável, correspondendo ao comportamento do GCC. Essa mudança permite que você para evitar o seguinte aviso do vinculador:.../ld: warning: creating a DT_TEXTREL in a shared object
- Ocorreu o backport de uma correção para problemas de
compiler-rt
que causavam falhas quando o Clang compilava 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::compare
para retornar-1
e1
. Anteriormente, havia retornado números assinados arbitrários. - O
ndk-gdb
foi corrigido para ABIs de 64 bits (problema 118300). - A falha produzida pelo exemplo do HelloComputeNDK para RenderScript no Android 4.4 (API de nível 19 do Android) foi corrigida. Para saber mais, consulte esta página (link em inglês).
- O
libc++ __wrap_iter
foi corrigido para GCC. Para saber mais, consulte o problema 22355 do LLVM (link em inglês). - O suporte para
.asm
foi corrigido na ABIx86_64
. - Foi implementada uma solução alternativa para o problema de
stlport
do GCC 4.8 (problema 127773). - O separador de diretório à direita
\\
foi removido do caminho do projeto no Windows (problema 160584). - Foi corrigido um erro de
no rule to make target
que ocorria na compilação de um único arquivo.c
pela execução do comandondk-build.cmd
dogradle
(problema 66937, link em inglês). - Foram adicionadas as bibliotecas
libatomic.a
elibgomp.a
que estavam ausentes nos seguintes conjuntos de ferramentas de host:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Outras mudanças:
-
- O
ld.gold
foi adicionado paraaarch64
. O vinculador padrão permanece sendold.bfd
. Para ativar explicitamenteld.gold
, adicione-fuse-ld=gold
à variávelLOCAL_LDFLAGS
ouAPP_LDFLAGS
. - Compilação de conjuntos de ferramentas MIPS e MIPS64 com
binutils-2.25
, que fornece compatibilidade aprimorada com R6. - A opção
-fstandalone-debug
(informações de depuração completas) é usada por padrão no Clang. - O
-fstack-protector
foi substituído por-fstack-protector-strong
para os conjuntos de ferramentas ARM, AArch64, X86 e X86_64 no GCC 4.9, Clang 3.5 e Clang 3.6. - Foi adicionada a alternância da linha de comando
--package
parandk-gdb
, permitindo que o sistema de build substitua o nome do pacote (problema 56189). - O
-mno-ldc1-stc1
está obsoleto para MIPS. Talvez ele não funcione com as novas opções-fpxx
e-mno-odd-spreg
ou com o FPXX ABI. - Foi adicionada a detecção de MIPS MSA e R6 para
cpu-features
.
- 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.6
ao ndk-build ou adicione--toolchain=arm-linux-androideabi-4.6
quando executarmake-standalone-toolchain.sh
na linha de comando. O GCC 4.9 permanece sendo o padrão para ABIs de 64 bits. - Todos os conjuntos de ferramentas x86[_64] foram impedidos de adicionar
-mstackrealign
por padrão. O conjunto de ferramentas do NDK supõe um alinhamento de pilha de 16 bytes. As ferramentas e opções usadas por padrão impõem essa regra. Um usuário que está escrevendo o código Assembly precisa preservar o alinhamento da pilha e garantir que outros compiladores também estejam em conformidade com essa regra (bug 38496 do GCC, link em inglês). - A funcionalidade Address Sanitizer foi adicionada ao suporte do Clang 3.5 para ARM e ABIS x86. Para mais informações sobre essa mudança, consulte o projeto Address Sanitizer.
- Foi introduzido o requisito, a partir do nível 21 da API, para usar
-fPIE -pie
durante a criação. Nos níveis 16 e posteriores da API, o ndk-build usaPIE
no processo de criação. Essa mudança tem várias implicações, que são discutidas no problema 888 do Developer Preview (link em inglês). Essas implicações não se aplicam a bibliotecas compartilhadas.
- 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/vsscanf
que ocorria na API de nível 21. A correção em si foi implementada na versão r10c (problema 77988). - Foi corrigida uma falha de AutoFDO (
-fauto-profile
) que ocorria com o GCC 4.9 quando-Os
era especificado (problema 77571).
- 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_memalign
foi 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.h
foi corrigido para que inclua<atomic>
apenas para C++11. - Os seguintes cabeçalhos foram modificados para uso independente:
sys/user.h
egl2ext.h
,dlext.h
,fts.h
,sgidefs.h
para a API de nível 21. - O
sys/user.h
foi modificado para renomearmxcsr_mask
comomxcr_mask
e para alterar o tipo de dados emu_ar0
de - O tipo de valor de retorno de
sysconf()
foi mudado deint
paralong
. - Foi corrigido o processamento de ndk-build de
thumb
paraLOCAL_ARM_MODE
. Na r10d, o ndk-build adicionaLOCAL_LDFLAGS+=-mthumb
por padrão, a menos que uma das seguintes condições se aplique: - Você definiu
LOCAL_ARM_MODE
igual aarm
. - Você está fazendo um build de depuração (com configurações como
APP_OPTIM=debug
eAndroidManifest.xml
contendoandroid:debuggable="true"
), em que o modo ARM é o padrão para manter a compatibilidade com os conjuntos de ferramentas anteriores (problema 74040). - Os
LOCAL_SRC_FILES
foram corrigidos no ndk-build para usar os caminhos absolutos do Windows (problema 74333). - O código específico de bash foi removido do ndk-gdb (problema 73338).
- O código específico de bash foi removido de
make-standalone-toolchain.sh
(problema 74145). - Foi revisada a documentação relativa à correção das dependências transitivas de
System.loadLibrary()
(problema 41790). - Foi corrigido um problema que impedia a extração de pacotes de 64 bits no Ubuntu 14.04 e no OS X 10.10 (Yosemite) (problema 78148).
- Foi corrigido um problema com
LOCAL_PCH
para melhorar a compatibilidade com Clang (problema 77575). - O aviso “requer pilha executável” foi esclarecido em Id.gold (problema 79115).
unsigned long
para 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-L
foi mudado para a designação oficial da versão:android-21
. - O GCC 4.9 foi atualizado criando uma nova base do branch
google
do repositório do GCC. As principais diferenças da versão upstream do GCC 4.9 incluem o seguinte: - Agora, a opção
-O2
ativa a vetorização, sem loop peeling, mas com unrolling mais agressivo. - Melhorias no FDO e LIPO (link em inglês).
- A compatibilidade com o Clang 3.5 foi adicionada a todos os hosts:
NDK_TOOLCHAIN_VERSION=clang
agora escolhe Clang 3.5. Algumas considerações: - O ARM e o x86 usam como padrão o assembler integrado. Se isso causar problemas, use
-fno-integrated-as
como uma solução alternativa. - O Clang 3.5 emite mais avisos para sinalizações não utilizadas, como a opção
-finline-functions
compatível com o GCC. - 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.setup
no diretório que contém o NDK. - A compatibilidade com o Clang 3.3. foi removida.
- O GCC 4.6 está obsoleto e pode ser removido de versões futuras.
- O mclinker foi atualizado para 2.8 com compatibilidade com Identical Code Folding ("ICF"). Especifique o ICF usando a opção
--icf
. - A compatibilidade com
arm_neon.h
foi ampliada em x86 e x86_64, alcançando uma cobertura de 93% dos intrínsecos a NEON. Para saber mais sobre a compatibilidade com o NEON:- Acesse o Guia do Programador do NDK (
docs/Programmers_Guide/html/
) e veja "Architectures and CPUs > Neon". - Analise o exemplo
hello-neon
atualizado 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_SOURCE
emheaders/libs/android-21
, que aparecia em r10 (quandoandroid-21
ainda 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-argument
e-Wno-unused-command-line-argument
para ignorar as sinalizações não usadas até que você possa decidir o que fazer com elas em longo prazo. - 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):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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
. - Outras correções de bugs:
-
- Foram feitas as seguintes correções em cabeçalhos e bibliotecas para
android-21
:- Foram adicionados mais códigos de teclas para TV:
android/keycodes.h
- Foram adicionadas mais constantes e seis novas funções de sensor para
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
eASensor_isWakeUpSensor
. - Foi corrigido o
stdatomic.h
para melhorar a compatibilidade com GCC 4.6 e oferecer compatibilidade com o cabeçalho<atomic>
. - Foram adicionados
sys/ucontext.h
esys/user.h
a todos os níveis de API. O cabeçalhosignal.h
agora 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_nanosleep
eclock_settime
à API de nível 21 (problema 77372, link em inglês). - Os seguintes símbolos foram removidos de todas as arquiteturas:
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
edlmalloc
. - As seguintes funções foram removidas das arquiteturas de 64 bits:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - A função a seguir foi removidas das arquiteturas de 32 bits:
__signalfd4
. - O tipo de terceiro argumento foi mudado
size_t
paraint
nas seguintes funções:strtoll_l
,strtoull_l
,wcstoll_l
ewcstoull_l
. - As seguintes funções foram restauradas para a arquitetura de 64 bits:
arc4random
,arc4random_buf
earc4random_uniform
. - O
cxa_*
e os operadoresnew
edelete
foram 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.sh
e agora é compatível com o uso de um sufixo que especifica uma versão do Clang. - As funções
strtod()
de libc++/armeabi foram corrigidas. - Foram feitas correções na documentação do NDK em
docs/
.
- Foram feitas as seguintes correções em cabeçalhos e bibliotecas para
- Outras mudanças:
-
- Os
cpu-features
foram aprimorados para detectar a compatibilidade com ARMv8 para os seguintes conjuntos de instruções: AES, CRC32, SHA2, SHA1 e PMULL/PMULL2 de 64 bits (problema 106360, link em inglês). - O ndk-build foi modificado para usar
*-gcc-ar
, que está disponível no GCC 4.8, no GCC 4.9 e no Clang. O Clang usa essa especificação, em vez de*-ar
. Essa configuração aprimora a compatibilidade com LTO. - Os cabeçalhos
include-fixed/linux/a.out.h
einclude-fixed/linux/compiler.h
foram removidos do compilador GCC (problema 73728, link em inglês). - Foi corrigido um problema relacionado a
-flto
com GCC 4.8 no Mac OS X. A mensagem de erro informava o seguinte:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Foi corrigido um erro de digitação em
build-binary.mk.
(problema 76992). - 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.h
foi 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.h
ewchar.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_nxthdr
foi renomeada como__cmsg_nxthdr
. - A função
__libc_malloc_dispatch
foi removida. - O protótipo
ptrace()
foi mudado paralong ptrace(int, ...);
. - A função
sha1.h
foi removida. - O
android_dlextinfo
foi 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.h
ecomplex.h
.
- O
- Outras mudanças:
-
mipsel-linux-android-4.9
emips64el-linux-android-4.9
foram atualizados, implementando um novo layout de diretório multilib e fornecendo compatibilidade com gdb-7.7.- Os
cpu-features
foram aprimorados para detectar mais recursos do arm64 (lista de mudanças 100339).
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=clang
pode não funcionar com arm64-v8a e mips64. - O Android-L é o primeiro nível que possui compatibilidade com 64 bits. Esse nível de API é temporário e serve somente para visualização de L. Um número de nível de API real o substituirá na versão de L.
- Essa versão agora inclui as configurações
all32
eall64
paraAPP_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=all
seleciona todas as ABIs.
- O novo GNU libstdc ++ no Android-L contém todos os
<tr1/cmath>
. Antes de definir sua própria função matemática, verifique em_GLIBCXX_USE_C99_MATH_TR1
se já existe uma função com esse nome, a fim de evitar erros de "múltipla definição" do vinculador. - A biblioteca cpu-features foi atualizada para o kernel do ARMv8. A biblioteca cpu-features existente pode falhar em detectar a presença de NEON na plataforma ARMv8. Recompile seu código com a nova versão.
- Foi adicionado um novo diretório de APIs do
platforms/android-L/
. Isso inclui: - Cabeçalhos Bionic atualizados, que não tinham sido alterados nos níveis de API Android de 3 (Cupcake) até 19 (KitKat). Esta nova versão, para o nível L, será sincronizada com o AOSP.
- Novas APIs de mídia e uma amostra do codec nativo.
- Um cabeçalho do
Android.h
foi atualizado para SLES/OpenSLES, permitindo a compatibilidade com AudioPlayer em formato de áudio de ponto flutuante de precisão única. - Extensões GLES 3.1 e AEP para
libGLESv3.so.
- Os cabeçalhos GLES2 e GLES3 foram atualizados para as versões oficiais mais recentes da Khronos.
- Foram adicionados compiladores GCC 4.9 para ABIs de 32 e 64 bits. O GCC 4.9 é o compilador (somente) padrão para ABIs de 64 bits, conforme já mencionado. Para ABIs de 32 bits, você precisa ativar explicitamente o GCC 4.9, já que o GCC 4.6 ainda é o padrão.
- Para o ndk-build, ative a criação do GCC 4.9 de 32 bits adicionando
NDK_TOOLCHAIN_VERSION=4.9
aApplication.mk
ou exportando como uma variável de ambiente da linha de comando. - Para um conjunto de ferramentas autônomo, use a opção
--toolchain=
no 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.8
ou4.9
para ativar o ndk-gdb e selecionar o GDB 7.6. - A opção de criação
-mssse3
foi adicionada para oferecer compatibilidade com SSSE3 e foi definida como padrão para ABI x86 (upgrade de SSE3). A imagem divulgada pelo Google não contém instruções SSSE3. - O GCC 4.8 foi atualizado para 4.8.3.
- O suporte de ARM libc++EH, alternando de gabi++ para libc++abi, foi aprimorado. Para saber mais detalhes, consulte a seção "C++ Support" da documentação. Algumas considerações:
- Todos os testes, exceto para localidade, agora transmitem para o Clang 3.4 e GCC 4.8. Para saber mais, consulte a seção "C++ Support" da documentação.
- As bibliotecas libc++ para X86 e MIPS libc++ ainda usam gabi++.
- O GCC 4.7 e versões mais recentes agora pode usar <atomic>.
- Adicione
-fno-strict-aliasing
se for usar<list>
, porque__list_imp::_end
_ gera erros nas regras TBAA (problema 61571, link em inglês). - A partir do GCC 4.6, LIBCXX_FORCE_REBUILD:=true não recria mais libc++. A recriação requer o uso de um compilador diferente. O Clang 3.3 não foi testado.
- mclinker está agora na versão 2.7 e é compatível com aarch64 Linux.
- Foi adicionada compatibilidade com cabeçalhos pré-compilados para os cabeçalhos especificados por
LOCAL_PCH
. (problema 25412, link em inglês).
- Correções importantes de bugs:
-
- A libc++ foi corrigida e agora compila
std::feof
e outros (problema 66668, link em inglês). - Uma chamada de biblioteca atômica do Clang 3.3/3.4 foi corrigida porque causava falhas em alguns testes de libc++ para ABI armeabi.
- Foram corrigidas falhas do Clang 3.4 que ocorriam na leitura de cabeçalhos pré-compilados (problema 66657, link em inglês).
- A declaração
-O3
de Clang 3.3/3.4 foi corrigida em: - 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_t
de 32 bits para ser definido comoint
, em vez delong int
. - As opções de
WCHAR_MIN
eWCHAR_MAX
foram corrigidas para que pegassem os sinais apropriados de acordo com a arquitetura em que estão sendo executadas: - X86/MIPS: assinado.
- ARM: não assinado.
- Para forçar X86/MIPS a ser definido como não assinado por padrão, use
-D__WCHAR_UNSIGNED__
. - Para forçar
wchar_t
a ser definido como 16 bits, use-fshort-wchar
. - Foram removidos símbolos inexistentes de
libc.so
de 32 bits e adicionadospread64
,pwrite64
,ftruncate64
para a API de nível 12 e mais recentes do Android (problema 69319, link em inglês). Para ver mais informações, veja a mensagem de confirmação que acompanha a lista de mudanças do AOSP 94137. - O aviso do GCC sobre a redefinição de
putchar
foi corrigido. Veja uma mensagem de aviso: - 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-pie
para segmentações do Android se-shared
e-static
não existissem. Esse comportamento, que estava incorreto, fez com que o vinculador reclamasse que-shared
e-pie
não poderiam coexistir.
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.h
foi adicionado ao conjunto de ferramentas x86 e agora emula aproximadamente 47% do Neon. Atualmente, não há compatibilidade com tipos de 64 bits. Para mais informações, consulte a seção sobre o suporte intrínseco ao ARM Neon na documentação do x86. - A otimização de ARM/GOT_PREL (presente no GCC 4.6 construído a partir do branch do Google do GCC) foi adaptada para o ARM GCC 4.8/4.9. Essa otimização às vezes reduz a contagem de instruções ao acessar variáveis globais. Para ver um exemplo, consulte o script build.sh em
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - Foi adicionada a versão ARM para STL gabi++, stlport e libc++. Agora eles têm essa versão e o modo Thumb.
- Agora, é possível chamar o script make-standalone-toolchain.sh com
--toolchain=x86_64-linux-android-4.9
, que é equivalente a--toolchain=x86_64-4.9
.
- 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=clang
agora escolhe o Clang 3.4. O GCC 4.6 ainda é o compilador padrão. - O
APP_ABI=armeabi-v7a-hard
foi incluído, com a opção de multilib-mfloat-abi=hard
adicional. Essas opções são para uso com o ARM GCC 4.6/4.8 e o Clang 3.3/3.4 (que usam assembler, vinculador e libs do 4.8). Ao usar essas opções, observe as seguintes alterações: - Ao executar o script
ndk-build
, adicione o seguintes opções para o destino armeabi-v7a:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
A biblioteca de criação é copiada paralibs/armeabi-v7a
. Para "marcar" se comportam conforme o esperado, não é possível especificararmeabi-v7a
earmeabi-v7a-hard
como marcas de destino (ou seja, em APP_ABI= line). Isso fará com que uma delas seja ignorada. Observe queAPP_ABI=all
ainda é equivalente aarmeabi armeabi-v7a x86 mips
. - O script
make-standalone-toolchain.sh
copia mais bibliotecas nos diretórios/hard
. Adicione as flagsCFLAGS
eLFLAGS
acima ao seu makefile para permitir que o GCC ou o Clang sejam vinculados às bibliotecas em/hard
. - O assembler YASM, assim como as sinalizações
LOCAL_ASMFLAGS
eEXPORT_ASMFLAGS
, foram adicionados para destinos x86. O scriptndk-build
usaprebuilts/*/bin/yasm*
para criarLOCAL_SRC_FILES
que tem a extensão.asm
. - O MClinker foi atualizado para 2.6.0, que adiciona compatibilidade com
-gc-sections
. - Foi adicionada compatibilidade experimental para libc++ (upstream r201101). Use esse recurso realizando as seguintes etapas:
- Adicione
APP_STL := c++_static
ouAPP_STL := c++_shared
emApplication.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
,_curses
e_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.h
para a API de nível 13 ou mais recente do Android (problema 64988, link em inglês). - Foi corrigida a ausência de
#include
emandroid/rect_manager.h
para a API Android de nível 14 ou posterior. - Foram adicionados
JNICALL
aJNI_OnLoad
eJNI_OnUnload
emjni.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):
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
sys/cachectl.h
foi adicionado para todas as arquiteturas. Agora, os desenvolvedores de MIPS podem incluir esse cabeçalho em vez de escrever#ifdef __mips__
.- O
platforms/android-18/include/android/input.h
foi corrigido com a adição de__NDK_FPABI__
a funções que tomam ou retornam valores flutuantes ou duplos. - Foi corrigido o MIPS
struct stat
, que estava definido incorretamente como a contraparte de 64 bits para a API Android de nível 12 e posterior. Essa configuração errada foi uma regressão introduzida na versão r9c. - Foram definidos
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
e__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
para API Android de nível 9 e anterior. - Foram adicionados
scalbln
,scalblnf
escalblnl
aolibm.so
x86 para APIs de nível 18 e mais recentes. - Foi corrigido um erro de digitação em
sources/android/support/include/iconv.h
(problema 63806, link em inglês).
- gabi++
std::unexpected()
foi corrigido para 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 acionaonSystemUiVisibilityChange
e não restaura o modo imersivo.
- O script
ndk-build
foi corrigido para adicionar-rpath-link=$SYSROOT/usr/lib
e-rpath-link=$TARGET_OUT
a fim de usarld.bfd
para vincular executáveis (problema 64266, link em inglês).-Bsymbolic
foi removido de todos os builds STL.ndk-gdb-py.cmd
foi corrigido configurandoSHELL
como 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.sh
foi corrigido para que a opção--stl=stlport
copiasse os cabeçalhos gabi++ em vez de vinculá-los simbolicamente.cmd.exe
e os shells de MinGW não entendem links simbólicos criados pelo cygwin. - Correções de cabeçalho:
- Outras mudanças:
-
- As permissões de execução foram aplicadas a todos os scripts
*cmd
destinados anteriormente ao uso exclusivo no shellcmd.exe
, caso os desenvolvedores preferissem usarndk-build.cmd
em cygwin em vez dondk-build
script recomendado. - A velocidade do script
make-standalone-toolchain.sh
foi aprimorada ao transferir em vez de copiar se o diretório de destino especificado não existisse.
- 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 seguinte erro não ocorra mais:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- A compatibilidade de
-mhard-float
foi corrigida para funções matemáticas de__builtin
. Para informações atualizadas sobre correções de-mhard-float
com STL, veja o problema 61784 (link em inglês).
- Outras correções de bugs:
-
- Correções de cabeçalho:
- O protótipo de
poll
foi mudado parapoll(struct pollfd *, nfds_t, int);
empoll.h
. - O
utimensat
foi adicionado paralibc.so
em APIs Android de níveis 12 e 19. Agora, essas bibliotecas são incluídas para todas as APIs Android de nível 12 a 19. futimens
foi introduzido alibc.so
para a API Android de nível 19.- Foram adicionados
clock_settime()
eclock_nanosleep()
ausentes atime.h
para APIs Android de nível 8 e posterior. - Foram adicionados
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
eCLOCK_BOOTTIME_ALARM
emtime.h.
- Foram removidos
CLOCK_REALTIME_HR
eCLOCK_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_ReleaseStringUTFChars
em/system/lib/libdvm.so
que estava causando falhas em dispositivos x86.
- Foi corrigida a falha de
ndk-build
que ocorre no cygwin quando o pacote NDK é referenciado por um link simbólico. - Foi corrigida a falha de
ndk-build.cmd
que ocorre nocmd.exe
do Windows quandoLOCAL_SRC_FILES
contém caminhos absolutos (problema 69992, link em inglês). - Foi corrigido o script
ndk-stack
para continuar, mesmo quando não é possível analisar um frame devido à impossibilidade de encontrar uma rotina, um nome de arquivo ou um número de linha. Em todos esses casos, será gerado??
. - A pilha
ndk-stack
foi corrigida para os destinos windows-x64_64 para não corresponder mais incorretamente a uma linha de frame com uma linha na seçãostack:
que não contémpc
,eip
ouip
. 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=null
foi 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-build
nã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_ABI
agora pode ser enumerado em uma lista delimitada por vírgulas. Para exemplo:APP_ABI := "armeabi,armeabi-v7a"
- Foi fornecida a capacidade de recriar todo o STL com informações de depuração em um pacote opcional e separado chamado
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, usando a opção-g
. Essa opção ajuda o scriptndk-stack
a fornecer um despejo de pilha aprimorado no STL. Essa alteração não deve afetar o código/tamanho do arquivo final, removido. - As amostras de
hello-jni
foram aprimoradas para informarAPP_ABI
na compilação. - A ferramenta
ar
foi 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/*h
emath.h
para todos os níveis da API Android até o 18, incluindo a adição dos níveis 13, 15, 16 e 17. Para saber mais sobre as APIs adicionadas, veja as mensagens de confirmação para as alterações 68012 e 68014 (links em inglês) (problemas 47150, 58528 e 38423, links em inglês). - Foi adicionada compatibilidade com a API Android de nível 19, incluindo a vinculação de Renderscript.
- Foi adicionada compatibilidade com
-mhard-float
na ABI armeabi-v7a existente. Para mais informações e restrições atuais sobre o Clang, 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:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Para mais informações, consulte GCC Opções independentes de idioma. - Foram adicionadas duas novas amostras para demonstrar os recursos de OpenGL ES 3.0: Teapot e MoreTeapots. Esses exemplos funcionam em dispositivos com Android 4.1 (nível 16 da API) e mais recentes.
- O suporte para GCC 4.7 e Clang 3.2 está obsoleto e será removido na próxima versão.
- Foram atualizados
- Correções importantes de bugs:
-
- Foi corrigido um problema com ARM GCC 4.6
thumb2
que falhava ao gerar tabelas de salto relativas de 16 bits (problema do GCC, link em inglês). - Foi corrigido um erro do compilador interno (ICE, na sigla em inglês) do GCC 4.8 em
g++.dg/cpp0x/lambda/lambda-defarg3.C
(mudança 62770, problema do GCC, link em inglês). - Foi corrigido um problema com os executáveis
*-gdb.exe
do Windows de 32 bits que falhavam na inicialização (problema 58975, link em inglês). - Foi corrigido o GCC 4.8 na criação da biblioteca de marcadores. A mensagem de erro é a seguinte:
internal compiler error: verify_flow_info failed
(Problema 58916, problema do GCC). - O build de GDB/ARM foi modificado para pular dados de
ARM.exidx
para liberação em código de prólogo, e foi adicionado um comando (set arm exidx-unwinding
) para controlar a liberação de pilha com base em exidx (problema 55826, link em inglês). - Foi corrigido um problema do compilador MIPS do Clang 3.3 em que os registros HI e LO são reutilizados incorretamente.
- Foi corrigido um problema com o MIPS 4.7 ICE em
dbx_reg_number
. A mensagem de erro é da seguinte forma:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(Patch do GCC, link em inglês)
- Foi corrigido um problema com ARM GCC 4.6
- Outras correções de bugs:
-
- Correções de cabeçalho
- Foram corrigidos
WCHAR_MIN
eWCHAR_MAX
do ARM para serem não assinados de acordo com a especificação (as versões de X86/MIPS são assinadas). Defina_WCHAR_IS_ALWAYS_SIGNED
para restaurar o comportamento antigo (problema 57749). include/netinet/tcp.h
foi corrigido para conter o tipo enumerado de estadoTCP_INFO
(problema 38881).- A macro
cdefs_elh.h
foi corrigida_C_LABEL_STRING
para interromper a geração de avisos no conjunto de ferramentas do GCC 4.8 ao usar o modo c++11 (problema 58135, problema 58652, links em inglês). - Foram removidas as funções não existentes
imaxabs
eimaxdiv
do 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çalhobionic
stdlib.h
.
- Foram corrigidos
- Foi corrigido o problema de build
samples/gles3jni
com o Clang na API Android de nível 11. - O MCLinker foi corrigido para permitir várias ocorrências das seguintes opções:
-gc-sections
e--eh-frame-hdr
. - O MCLinker foi corrigido para aceitar a opção
--no-warn-mismatch
. - A opção
cpu-features
foi modificada para não presumir que todos os dispositivos VFPv4 são compatíveis com IDIV. Agora, essa opção só adiciona IDIV a dispositivos listados na lista de permissões, incluindo o Nexus 4 (problema 57637, link em inglês). - Foi corrigido o problema com
android_native_app_glue.c
, que gerava erros de forma incorreta em operações de pré-envio de eventos. - Todas as operações no encerramento de
gabi++
foram corrigidas e unexpected_handler passou a ser thread-safe. - Vários erros com a opção
-integrated-as
do Clang foram corrigidos para poder transmitir testes dessax-instructions
efenv
. - O compilador GCC 4.6/4.7/4.8 foi corrigido para transmitir a opção
--eh-frame-hdr
do vinculador até mesmo para executáveis estáticos. Para saber mais, consulte o patch do GCC (link em inglês). - Foi corrigido um apóstrofo extra em
CPU-ARCH-ABIS.html
. Para mais informações, 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_sub
e__atomic_fetch_or
. - O Clang 3.3 ICE foi corrigido com
vfprintf
personalizado (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 seguintes sinalizações ao seu
configurações de build:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Para exemplos de código, consultetests/device/test-openmp
- O tamanho de
ld.mcld
foi reduzido significativamente (1,5 MB xld.bfd
3,5 MB eld.gold
7,5 MB), resultando em uma melhoria de velocidade de aproximadamente 20%. - Foram adicionados
LOCAL_CONLYFLAGS
eAPP_CONLYFLAGS
para especificar as opções aplicáveis somente a C, e não a C++. Os recursosLOCAL_CFLAGS
eAPP_CFLAGS
também são usados para a compilação de C++ (para poupar o trabalho de especificar a maioria das opções duas vezes). Dessa forma, as opções como-std=gnu99
podem falhar em versões g++ com um aviso e em versões clang++ com um erro. - Foram adicionadas funções auxiliares da matriz
gabi++
. - As criações do GCCs foram modificadas para que todos os arquivos
libgcc.a
sejam compilados com-funwind-tables
, permitindo que a pilha seja liberada após pontos bloqueados anteriormente, como__aeabi_idiv0
. - Foi adicionada compatibilidade com Ingenic MXU no MIPS GCC4.6/4.7/4.8 com a nova opção
-mmxu
. - O MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
foi estendido para controlar ldxc1/sdxc1 também - Foi adicionado um vinculador de labirinto. Para mais informações, consulte
sources/android/crazy_linker/README.TXT
bitmap-plasma
foi corrigido para desenhar na tela inteira em vez de em uma área de 200 x 200 pixels.- Os tamanhos dos conjuntos de ferramentas linux e darwin foram reduzidos em 25% com a criação de links simbólicos para arquivos idênticos.
- O OpenMP foi ativado para todas as versões do GCC. Para usar esse recurso, adicione as seguintes sinalizações ao seu
configurações de build:
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.html
e 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.8
ou 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-access
ao 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=clang
agora escolhe o Clang 3.3 por padrão.Observação: o GCC 4.4.3 e o Clang 3.1 foram descontinuados e vão ser removidos na próxima versão do NDK.
- O GNU Project Debugger (GDB) foi atualizado para oferecer suporte para o Python 2.7.5.
- O MCLinker foi adicionado para oferecer compatibilidade com os hosts do Windows.
ld.gold
será o padrão, quando disponível. Por isso, é preciso adicionar-fuse-ld=mcld
emLOCAL_LDFLAGS
ouAPP_LDFLAGS
para ativar o MCLinker. - A ferramenta
ndk-depends
foi 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
-O
no uso do Boost 1.52.0 (problema 42891). libc.so
elibc.a
foram 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_COMMANDS
foi corrigido onde o arquivolinker.list
está vazio ou não é usado. - Foi corrigido o build GCC MICC para Mac OS para usar as diretivas CFI,
cuja a ausência causa a falha de
ld.mcld --eh-frame-hdr
com frequência. - O erro do compilador interno Clang 3.2 X86/MIPS foi corrigido em
llvm/lib/VMCore/Value.cpp
(mudança 59021, link em inglês). - Foi corrigida a falha do assembler do Windows de 64 bits com o GCC 4.7 (erro:
out of memory allocating 4294967280 bytes
). - O script
ndk-gdb
foi atualizado para que as ações--start
ou--launch
agora aguardem o GNU Debug Server, para que ele possa atingir pontos de interrupção mais confiáveis definidos no início do caminho de execução, como pontos de interrupção no código JNI (problema 41278, link em inglês).Observação: esse recurso requer jdb e produz um aviso sobre pontos de interrupção pendentes. Especifique a opção
--nowait
para restaurar o comportamento anterior. - Foi corrigida a falha do GDB quando a lista de bibliotecas está vazia.
- Foi corrigida uma falha do GDB ao usar um comando
stepi
após uma instrução Thumbbx pc
oublx pc
(problema 56962, problema 36149). - O
gdbserver
de MIPS foi corrigido para buscarDT_MIPS_RLD_MAP
em 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-build
foi corrigido para permitir que você especifique uma versão do Clang como uma opção de linha de comando (por exemplo,NDK_TOOLCHAIN_VERSION=clang3.2
). Anteriormente, apenas a especificação da versão como uma variável de ambiente funcionava. - O tamanho de gabi++ de
_Unwind_Exception
foi corrigido e definido como 24 para destinos de criação para MIPS no uso do compilador do Clang (mudança 54141). - O script
ndk-build
foi corrigido para garantir que as bibliotecas de build sejam realmente removidas de projetos que incluem bibliotecas estáticas de pré-criadas quando o comandondk-build clean
for usado (mudança 54461, mudança 54480, links em inglês). - A opção
NDK_ANALYZE=1
foi modificada para ser menos detalhada. gnu-libstdc++/Android.mk
foi corrigido para incluir um 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-gdb
foi 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/swap32
do x86:invalid 'asm': operand number out of range
(problema 54465, mudança 57242, links em inglês). ld.gold
foi corrigido para mesclar literais de string.ld.gold
foi corrigido para processar o alinhamento de um símbolo grande.ld.gold
foi atualizado para ativar a opção--sort-section=name
.- O GCC 4.4.3/4.6/4.7 foi corrigido para suprimir a opção
-export-dynamic
para programas vinculados estaticamente. O GCC não adiciona mais uma seção.interp
para programas vinculados estaticamente. - Foi corrigido o erro de compilação
stlport
do GCC 4.4.3 sobretypedef
inconsistente de_Unwind_Control_Block
(problema 54426) - Os scripts
awk
foram corrigidos para processar arquivosAndroidManifest.xml
criados no Windows e que podem conter caracteres\r
à direita e causar erros de compilação (problema 42548, link em inglês). make-standalone-toolchain.sh
foi corrigido para testar o diretórioprebuilts/
e detectar se o host é de 32 ou 64 bits.- A opção
-integrated-as
do Clang 3.2 foi corrigida. - Foram corrigidos os dados do gerenciador
pr1
epr2
do modelo compacto ARM EHABI. - A opção
-mllvm -arm-enable-ehabi
do Clang foi adicionada para corrigir o seguinte erro:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Foi corrigida uma falha de compilação quando não há o elemento
uses-sdk
no manifesto do aplicativo (Problema 57015, link em inglês).
- O script
- Outras mudanças:
-
- Correções de cabeçalho
- Os cabeçalhos foram modificados para tornar
__set_errno
uma função in-line, uma vez que__set_errno
emerrno.h
teve o uso suspenso elibc.so
não a exporta mais. elf.h
foi modificado para incluirstdint.h
(problema 55443).sys/un.h
foi corrigido para ser incluído de maneira independente de outros cabeçalhos (problema 53646).- Toda a família de APIs
MotionEvent_getHistorical
foi corrigida para capturar oconst AInputEvent* motion_event
(problema 55873). malloc_usable_size
foi corrigido para capturarconst void*
(problema 55725).- stdint.h foi corrigido para ter maior compatibilidade com C99. (mudança 46821, link em inglês).
wchar.h
foi modificado para não redefinirWCHAR_MAX
eWCHAR_MIN
- A declaração
<inttypes.h>
foi corrigida para as macrosPRI
eSCN
relacionadas ao ponteiro (problema 57218). - O cabeçalho
sys/cdefs.h
foi mudado para que__WCHAR_TYPE__
seja de 32 bits para níveis de API anteriores a 9. Isso significa 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.sh
foi 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.sh
foi atualizado para que a opção--llvm-version=
crie os scripts$TOOLCHAIN_PREFIX-clang
e$TOOLCHAIN_PREFIX-clang++
, além declang
eclang++
, para evitar o uso acidental das definições clang e clang++ de host. - Foram adicionados dois sinalizadores para reativar duas otimizações no Clang upstream, mas desativadas no NDK para melhor compatibilidade com o código compilado pelo GCC:
- Foi adicionada uma sinalização
-fcxx-missing-return-semantics
para reativar as semânticas de retorno ausentes no Clang 3.2 ou versões posteriores. Normalmente, todos os caminhos precisam terminar com uma instrução de retorno para uma função de retorno de valor. Se esse não for o caso, o clang inserirá uma instrução indefinida (ou a capturará no modo de depuração) no caminho sem uma instrução de retorno. Se você tiver certeza de que seu código está correto, use essa sinalização para permitir que o otimizador aproveite o comportamento indefinido. Se você não tiver certeza, não use essa sinalização. O autor da chamada ainda pode receber um valor incorreto aleatório, mas o otimizador não irá explorá-lo, dificultando a depuração do seu código. - A sinalização
-fglobal-ctor-const-promotion
foi adicionada para reativar a promoção de variáveis globais com o construtor estático para que sejam constantes. Com essa flag, a transmissão de otimização de variável global do LLVM tenta avaliar as variáveis globais com construtores estáticos e promovê-las para constantes globais. Embora essa otimização esteja correta, ela pode causar alguma incompatibilidade com o código compilado pelo GCC. Por exemplo, o código pode fazer com queconst_cast
transmita a constante como mutável e a modifique. No GCC, a variável está em leitura-gravação e o código é executado por acidente. No Clang, a variável const está na memória somente de leitura e pode fazer com que o app falhe.
- Foi adicionada uma sinalização
-mldc1-sdc1
foi adicionado aos compiladores MIPS GCC e Clang. Por padrão, os compiladores alinham objetos de 8 bytes corretamente e emitem as instruçõesldc1
esdc1
para movê-las. Se o app usa um alocador personalizado que nem sempre se alinha ao limite de 8 bytes de um novo objeto da mesma forma que o alocador padrão, talvez ele apresente falhas devido a operaçõesldc1
esdc1
na memória não alinhada. Nesse caso, use a sinalização-mno-ldc1-sdc1
para solucionar o problema.- Será feito o downgrade da severidade do evento de "aviso" para "informação", caso
APP_PLATFORM_LEVEL
seja maior queAPP_MIN_PLATFORM_LEVEL
.APP_PLATFORM_LEVEL
pode ser mais baixo queAPP_PLATFORM
emjni/Application.mk
porque o NDK não tem cabeçalhos para todos os níveis. Nesse caso, o nível é reduzido. OAPP_MIN_PLATFORM_LEVEL
é especificado pelaandroid:minSdkVersion
no 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-build
foi modificado para usaras/ld
do GCC 4.7 para compilação do Clang.Observação: no GCC 4.7,
monotonic_clock
eis_monotonic
foram renomeados comosteady_clock
eis_steady
, respectivamente. - Os novos avisos a seguir foram adicionados ao script
ndk-build
:- Avisos foram adicionados quando
LOCAL_LDLIBS/LDFLAGS
são usados em módulos de bibliotecas estáticas. - Um aviso foi adicionado quando uma configuração não apresenta módulos para criação.
- Foi adicionado um aviso para bibliotecas sem sistema usadas em
LOCAL_LDLIBS/LDFLAGS
de uma biblioteca compartilhada ou módulos executáveis.
- Avisos foram adicionados quando
- Os scripts de compilação foram atualizados. Assim, se
APP_MODULES
nã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-build
foi atualizado para oferecer compatibilidade com caminhos absolutos emLOCAL_SRC_FILES
. - Os executáveis
*-gdbtui
foram removidos e são cópias dos executáveis*-gdb
com a opção-tui
ativada. - Os scripts de compilação foram atualizados para informar você quando o front-end do compilador Edison Design Group (EDG)
ativar
_STLP_HAS_INCLUDE_NEXT
novamente (problema 53646). - A variável de ambiente
NDK_LIBS_OUT
foi adicionada para permitir a substituição do caminho paralibraries/gdbserver
do 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=true
para 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.HTML
eNDK-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_LIBRARIES
eLOCAL_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:5790
do compilador interno do GCC 4.7 foi corrigido. - O erro
redirect_eh_edge_1, at tree-eh.c:2214
do compilador interno do GCC 4.7 foi corrigido (problema 52909). - Foi corrigida a falha de segmentação do GCC 4.7. (problema do GCC, link em inglês).
- A resolução do relógio
<chrono>
foi corrigida, esteady_clock
foi ativado (problema 39680). - O conjunto de ferramentas foi corrigido para ativar
_GLIBCXX_HAS_GTHREADS
para GCC 4.7 libstdc++ (problema 41770, problema 41859). - Foi corrigido o problema com o código X86 MXX/SSE que apresentava falhas na vinculação devido à ausência de
posix_memalign
(mudança 51872). - A falha de segmentação do GCC4.7/X86 foi corrigida em
i386.c
, funçãodistance_non_agu_define_in_bb()
(mudança 50383). - O GCC4.7/X86 foi corrigido para restaurar o comportamento
cmov
anterior (problema do GCC, link em inglês). - Foi corrigido o processamento do valor de retorno NULL de
setlocale()
em libstdc++/GCC4.7 (problema 46718). - Foi corrigida a referência indefinida de tempo de execução
ld.gold
para__exidx_start
e__exidx_start_end
(mudança 52134). - Foi corrigido o erro interno do compilador Clang 3.1 ao usar a biblioteca Eigen. (problema 41246)
- Foi corrigido o erro do compilador interno Clang 3.1, incluindo
<chrono>
no modo C++11 (problema 39600). - Foi corrigido o erro do compilador interno Clang 3.1 ao gerar o código de objeto para uma chamada de
método para um
rvalue
inicializado e uniforme (problema 41387). - O realinhamento da pilha do Clang 3.1/X86 foi corrigido. (Alteração 52154, link em inglês)
- O problema com o GNU Debugger (GDB) SIGILL durante a depuração no Android 4.1.2 foi corrigido. (problema 40941).
- Foi corrigido o problema em que o GDB não podia definir pontos de interrupção
source:line
quando os símbolos continham caminhos de arquivo longos e indiretos (problema 42448). - O
read_program_header
do GDB foi corrigido para executáveis PIE do MIPS (mudança 49592). - Foi corrigida a falha de segmentação
STLport
emuncaught_exception()
(mudança 50236, link em inglês). - Foi corrigido o erro de barramento
STLport
no processamento de exceções devido ao acesso sem alinhamento deDW_EH_PE_udata2
,DW_EH_PE_udata4
eDW_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_t
eptrdiff_t
. - Foram corrigidos os cabeçalhos
fenv.h
de MIPS e ARM. stddef.h
foi corrigido para não redefiniroffsetof
, porque ele já existe no conjunto de ferramentas.elf.h
foi corrigido para conterElf32_auxv_t
eElf64_auxv_t
(problema 38441).- As definições
#ifdef
de C++ foram corrigidas no arquivo principalOpenSLES_AndroidConfiguration.h
(Problema 53163, link em inglês).
- Foram removidas definições redundantes de
STLport
foi corrigido para ser cancelado após o erro de falta de memória, em vez de sair silenciosamente.- Os cabeçalhos do sistema e de Gabi ++ foram corrigidos para poderem compilar com a API de nível 8 e mais recentes.
cpufeatures
foi corrigido para não analisar/proc/self/auxv
(problema 43055, link em inglês).ld.gold
foi corrigido para não depender do host libstdc++ e, nas plataformas Windows, não depender da bibliotecalibgcc_sjlj_1.dll
.- Foi corrigido o Clang 3.1, que emite uma lista de registro inconsistente em
.vsave
e apresenta falha no assembler (mudança 49930). - O Clang 3.1 foi corrigido para compilar libgabi++ e transmitir os testes de
test-stlport
para destinos de criação de MIPS (mudança 51961, link em inglês). - O Clang 3.1 foi corrigido para só ativar a exceção por padrão para C++, e não para C.
- Foram corrigidos diversos problemas no Clang 3.1 para transmitir a maioria dos testes de exceção GNU.
- Os scripts
clang
eclang++
foram corrigidos no compilador NDK autônomo para detectar-cc1
e não especificar-target
quando encontrado. ndk-build
foi corrigido para observarNDK_APP_OUT
definido emApplication.mk
.libc.so
elib.a
para x86 foram corrigidos porque não apresentavam as funçõessigsetjmp
esiglongjmp
já 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-build
foi corrigido no Windows quando executado pelo diretório JNI do projeto (problema 40192). - Foi corrigido um problema em que o script
ndk-build
não realiza a criação caso o makefile tenha espaços em branco na definição 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_cleanup
e__cxa_type_match
foram atualizados para ter visibilidade padrão, e não mais a visibilidade oculta anterior no GNU libstdc++. Para mais informações, 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
STLport
seja criado para ARM no modo Thumb. - Foi adicionada compatibilidade com
std::set_new_handler
em Gabi++ (problema 52805). - A chamada do sistema
FUTEX
foi ativada em GNU libstdc++. ndk-build
foi atualizado para não copiar mais as bibliotecas estáticas pré-compiladas para o diretórioobj/local/<abi>/
de um projeto (problema 40302).__ARM_ARCH_5*__
foi removido do scripttoolchains/*/setup.mk
de ARM (problema 21132, link em inglês).- Foram compiladas bibliotecas GNU libstdc++ no thumb para ARM.
- Foram ativadas as instruções
madd/msub/nmadd/nmsub/recip/rsqrt
do ponto flutuante MIPS com FPU de 32 bits. - Foi ativado o otimizador de loop grafite no GCC 4.6 e 4.7 para permitir mais otimizações:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
e-ftree-loop-linear
(mais informações, link em inglês). polly
foi ativado para o Clang 3.1 nos hosts de Linux e Mac OS X de 32 bits, que analisa e otimiza o acesso à memória (mais informações, link em inglês).-flto
foi ativado no GCC 4.7, 4.6, no Clang 3.2 e Clang 3.1 no Linux (Clang LTO via LLVMgold.so). Os destinos do compilador MIPS não são compatíveis porqueld.gold
não está disponível.--plugin
e--plugin-opt
foram ativados parald.gold
no GCC 4.6/4.7.--text-reorder
foi ativado parald.gold
no GCC 4.7.- GNU libstdc++ foi configurado com
_GLIBCXX_USE_C99_MATH
, que torna indefinido o scriptisinf
no cabeçalho biônico. Para mais informações, consulteCHANGES.html
. - Foram adicionados
APP_LDFLAGS
aos scripts de compilação. Para mais informações, consulteANDROID-MK.html
. - Os scripts de criação foram atualizados para permitir que
NDK_LOG=0
desative oNDK_LOG
. - Os scripts de criação foram atualizados para permitir que
NDK_HOST_32BIT=0
desative o conjunto de ferramentas de 32 bits do ambiente do desenvolvedor de host. - As sinalizações padrão do GCC/X86
-march=
e-mtune=
depentiumpro
egeneric
foram alteradas parai686
eatom
. - Os scripts de criação do conjunto de ferramentas foram aprimorados:
- Uma disputa em
build-gcc.sh
foi corrigida para o tipo de buildmingw
, que impedia um número significativo de processamentos de compilação paralelos. build-gabi++.sh
ebuild-stlport.sh
foram atualizados e agora podem ser executados pelo pacote de NDK (problema 52835, link em inglês).run-tests.sh
foi corrigido na coleção de utilitários 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.sh
foi atualizado para a versão mais recente. - Foi adicionada uma opção para criar
libgnustl_static.a
estlport_static.a
sem 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.7
ou a adicione aApplication.mk
. - Para builds independentes, adicione a opção
--toolchain=
a:make-standalone-toolchain.sh
, por exemplo:--toolchain=arm-linux-androideabi-4.7
Observação: esse recurso é experimental. Faça o teste e informe sobre qualquer problema.
- Para o
- A compatibilidade com exceções
stlport
foi adicionada via gabi++. O novo gabi++ depende dedlopen
e do código relacionado. Isso significa o seguinte:- Não é mais possível criar um executável estático usando a opção
-static
nem incluirlibstlport_static.a
usandoAPP_STL := stlport_static
. Ainda é possível usar a opção-static
com um conjunto de ferramentas autônomo. A compilação de um executável dinâmico usandoinclude $(BUILD_EXECUTABLE)
ainda funciona, porque o compilador adiciona automaticamente a opção-ldl
. - Se você usa
-nostdlib
e {-Wl,--no-undefined} para vinculações no seu projeto, inclua manualmente a opção-ldl
.
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-all
e-fstack-protector-strong
usando compiladores GCC 4.6 e versões posteriores.Observação: a configuração
-mstack-protector-guard
por si só não ativa as opções-fstack-protector*
. - A função
android_setCpu()
foi adicionada asources/android/cpufeatures/cpu-features.c
para ser usada quando não for possível acionar a detecção automática via/proc
no Android 4.1 e versões mais recentes (Problema 164154 do Chromium, link em inglês).
- 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 produzia a
seguinte erro:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
Esse problema foi causado pela criação no Mac OS X 10.7, que produzia binários que eram não é compatível com o Mac OS 10.6.x e o NDK. - As opções
-x c++
foram removidas do script de build autônomo do Clang++ (problema 39089). - Foram corrigidos problemas usando a opção
NDK_TOOLCHAIN_VERSION=clang3.1
em Cygwin (problema 39585). - O script
make-standalone-toolchain.sh
foi corrigido para permitir a geração de um conjunto de ferramentas autônomo usando os ambientes Cygwin ou MinGW. O conjunto de ferramentas final pode ser usado nos ambientes Cygwin, MingGW ou CMD.exe (problema 39915, problema 39585). - Foi adicionada a opção
SL_IID_ANDROIDBUFFERQUEUESOURCE
ausente nas compilações android-14 para ARM e X86. (problema 40625). - Foi corrigida a detecção de CPU do x86 para o recurso
ANDROID_CPU_X86_FEATURE_MOVBE
. (problema 39317, link em inglês). - Foi corrigido um problema que impede que a Biblioteca Standard Template (STL, na sigla em inglês) use fontes C++
sem a extensão de arquivo
.cpp
. - O erro em reload1.c:1061 do compilador interno do GCC 4.6 ARM foi corrigido (problema 20862).
- Foi corrigido o erro do compilador interno do GCC 4.6 ARM em emit-rtl.c:1954. (problema 22336).
- Foi corrigido o erro do compilador interno do GCC 4.4.3 ARM em postreload.c:396. (problema 22345).
- Foi corrigido o problema com o GCC 4.6/4.7 que pulava as funções lambda. (Problema 35933, link em inglês)
- 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_t
foram corrigidos para terem o mesmo tipo.- Foi corrigido um erro de digitação em
android/bitmap.h
(problema 15134, link em inglês). - Foi corrigido um erro de digitação em
errno.h
. - Foi adicionado um marcador para a presença de
__STDC_VERSION__
emsys/cdefs.h
(problema 14627, link em inglês). - Os cabeçalhos em
byteswap.h
edirent.h
foram reorganizados. limits.h
foi 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 deint
paraGLint
. - Foi corrigida a constante
__BYTE_ORDER
para builds x86 (Problema 39824, link em inglês).
- Foi corrigido o script
ndk-build
para não substituir-Os
por-O2
para versões ARM. - Foram corrigidos scripts de criação para permitir a substituição das configurações
HOST_AWK
,HOST_SED
eHOST_MAKE
. - Foi corrigido o problema de
ld.gold
em versõesfsck_msdos
que vinculam objetos de compilação pelo compilador Intel C/C++ (ICC). - O suporte para ARM EHABI no Clang foi corrigido para estar em conformidade com as especificações.
- O GNU Debugger (GDB) foi corrigido para reduzir o tempo gasto em percursos no mapa do link do destino
durante eventos
solib
(problema 38402, link em inglês). - Foi corrigido o arquivo
libgcc.a
ausente na vinculação de bibliotecas compartilhadas.
- 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
SIGILL
para caminhos sem uma instrução de retorno. make-standalone-toolchain.sh
foi atualizado para aceitar o sufixo-clang3.1
, que é equivalente a adicionar--llvm-version=3.1
ao conjunto de ferramentas do GCC 4.6.- O URL do relatório do bug do GCC e do Clang foi atualizado para https://source.android.com/source/report-bug s.html.
- Foi adicionada compatibilidade com ARM ELM para
llvm-objdump
. - O aviso de tratamento da entrada c como c++ foi removido nas versões do Clang.
- Atualização de criação para que somente a versão de 32 bits de
libiberty.a
seja criada e colocada 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.1
ou adicione esta configuração de variável de ambiente aApplication.mk
. - Para criações autônomas, adicione
--llvm-version=3.1
amake-standalone-toolchain.sh
e substituaCC
eCXX
no seu makefile por<tool-path>/bin/clang
e<tool-path>/bin/clang++
. ConsulteSTANDALONE-TOOLCHAIN.html
para mais detalhes.
Observação: esse recurso é experimental. Faça o teste e informe sobre qualquer problema.
- Para
- O vinculador Gold
ld.gold
foi adicionado para o conjunto de ferramentas do Windows. O vinculador Gold também é o padrão para ARM e X86 em todos os hosts. Você pode substituí-lo para usar o vinculadorld.bfd
adicionandoLOCAL_LDFLAGS += -fuse-ld=bfd
aAndroid.mk
ou transmitindo-fuse-ld=bfd
para a linha de comando g++/clang++ que faz a vinculação. - Foram adicionadas verificações de espaços no caminho do NDK para os scripts
ndk-build[.cmd]
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-10
por meio deandroid-13
emAPP_PLATFORM
,project.properties
oudefault.properties
vinculemandroid-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
-fPIE
para executáveis independentes de posição (PIE, na sigla em inglês). Uma nova opção deAPP_PIE
permite que você controle esse comportamento. ConsulteAPPLICATION-MK.html
para mais detalhes.Observação: todos os níveis de API acima de 14 continuam vinculando
platforms/android-14
e nenhum novoplatforms/android-N
foi adicionado. - O
ndk-build
foi modificado para fornecer avisos se o nível de API ajustado for maior do queandroid:minSdkVersion
noAndroidManifest.xml
do projeto.
- A lógica de criação foi modificada para que projetos que especificam
- A biblioteca auxiliar
cpu-features
foi atualizada para incluir mais recursos específicos do ARM. Consultesources/android/cpufeatures/cpu-features.h
para mais detalhes. - O longo duplo foi modificado na plataforma X86 para 8 bytes. Esses tipos de dados agora têm o mesmo tamanho de um duplo, mas ainda são tratados como um tipo distinto.
- A versão foi atualizada para
APP_ABI=armeabi-v7a
:- Esse tipo de criação foi modificado para transmitir o parâmetro
-march=armv7-a
ao vinculador. Essa mudança garante que as bibliotecas específicas de v7 ecrt*.o
sejam vinculadas corretamente. -mfpu=vfpv3-d16
foi adicionado aondk-build
, em vez da opção-mfpu=vfp
usada 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.sh
com privilégios de raiz tornava o conjunto de ferramentas autônomo inacessível para alguns usuários (problema 35279).- Todos os arquivos e executáveis no pacote de versão do NDK estão configurados para ter permissões de leitura e execução para todos.
- A informação de propriedade/grupo de
libstdc++.a
agora é preservada quando copiada.
- O
\r
redundante foi removido da pré-compilação do Windowsecho.exe
. O\r
redundante gerava a falha degdb.setup
no GNU Debugger (GDB) porque se tornou parte do caminho incorretamente (problema 36054). - Os builds paralelos do Windows que às vezes falhavam devido a problemas de timing foram corrigidos na
implementação de
host-mkdir
(problema 25875). - O GNU
libstdc++
do GCC 4.4.3 foi corrigido para não mesclar nomes detypeinfo
por 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
null
nocp/mangle.c::write_unscoped_name
do GCC 4.6, em que o GCC podia falhar quando o contexto eranull
e 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-psabi
para evitar esse aviso não é mais obrigatória. - Foi corrigido um problema em que um projeto com sufixos
.arm
ou.neon
emLOCAL_SRC_FILES
também usavaAPP_STL
. ComAPP_STL
, o scriptndk-build
pesquisa arquivos C++ emLOCAL_SRC_FILES
antes de adicionar caminhos STLheader/lib
à compilação. Ondk-build
foi modificado para filtrar os sufixos.arm
e.neon
antes 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.bfd
foi 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/ld
vincula objetos pré-compilados pelobinutils-2.21
mais recente. - Foi corrigido um problema na compilação de
stdc++
no GNU com-mthumb
e-march=armv7-a
, modificandomake-standalone-toolchain.sh
para preencherheaders/libs
no 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-protector
foi 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
STLport
foi corrigida com a configuração de_STLP_LITTLE_ENDIAN
como 1 na complilação delibstlport_*
de MIPS. - O problema com
__builtin_unreachable
do GCC foi corrigido na compilação de LLVM (problema 54369 do GCC, link em inglês). - Foi feito o backport de uma correção para o processo de compilação
cc1
, que consumia 100% da CPU (problema 50380 do GCC, link em inglês).
- 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
gdb
com uma dependência conectada em uma versão específica do Python (problema 36120). ndk-gdb
foi corrigido quandoAPP_ABI
contémall
e não corresponde a nenhuma das arquiteturas conhecidas (problema 35392).- A compatibilidade com o nome do caminho do Windows foi corrigida, mantendo o caractere
:
caso possa fazer parte de um caminho do Windows que começa com uma letra de drive (problema 12843 do GDB, link em inglês). - Foi corrigida a adição de compatibilidade com pontos de interrupção de hardware para ARM em
gdbserver
(problema do GDB, link em inglês). - Foi adicionada uma correção para somente ler o
solibs
atual quando o vinculador for consistente. Essa mudança acelera o gerenciamento do 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
gdb
não parava em pontos de interrupção localizados em bibliotecasdlopen-ed
(problema 34856). SIGILL
foi corrigido no vinculador dinâmico ao chamardlopen()
, no sistema em que/system/bin/linker
tinha os símbolos removidos ertld_db_dlactivity()
era implementado comoThumb
, devido à não preservação doLSB
desym_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
__unused
foram substituídos por__linux_unused
emlinux/sysctl.h
elinux/icmp.h
para evitar conflito com#define __unused
emsys/cdefs.h
. fenv.h
foi corrigido para funções C delimitadas por__BEGIN_DECLS
e__END_DECLS
.- As funções não implementadas foram removidas em
malloc.h
. - A definição
stdint.h
deuint64_t
foi corrigida para compiladores ANSI (problema 1952, link em inglês). - As macros do pré-processador foram corrigidas em
<arch>/include/machine/*
. link.h
foi substituído para MIPS pela nova versão que é compatível com todas as plataformas.linux-unistd.h
foi removido.- As macros específicas de GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
eULONG_LONG_MAX
foram movidas de<pthread.h>
para<limits.h>
.
- O código
- Foi corrigido um buffer excedente em
ndk-stack-parser
. _STLP_USE_EXCEPTIONS
foi corrigido, quando não definido, para omitir todas as declarações e usos de__Named_exception
. As configurações de compilação e uso de__Named_exception
ocorrem 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 o
configurações abaixo para realizar esse tipo de build:
./build/tools/make-release.sh --force --systems=linux-x86
libc.so
foi corrigido para não 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_handle
porquecrtbegin_so.o
não está vinculado nesse caso. O conteúdo de__dso_handle
não importa, conforme mostrado no seguinte exemplo de código:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- O decodificador de símbolos para ARM usado em
objdump
para entradasplt
foi 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.a
da bibliotecalibc.so
da plataforma X86:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
e__aeabi_unwind_cpp_pr2
. - Foram removidos
.ctors
,.dtors
e.eh_frame
não usados nocrt*_so.S
de MIPS. ndk-gdb
foi atualizado para só capturar a última linha de saída parandk-build
DUMP_XXXX
. Essa mudança garante que, seApplication.mk
ouAndroid.mk
imprimir 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-x86
earch-mips
foram 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).
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- O
ndk-build
foi corrigido para reconhecer novas extensões de arquivo C++ por padrão:.cc .cp .cxx .cpp .CPP .c++ .C
. Você ainda pode usarLOCAL_CPP_EXTENSION
para substituir essas configurações de extensão. - Foi corrigido um problema em
samples/san-angeles
que gerava uma tela preta ou um frame congelado na reinicialização. - As APIs descontinuadas foram substituídas em exemplos do NDK
(problema 20017, link em inglês).
hello-gl2
do android-5 para android-7native-activity
do android-9 para o android-10native-audio
do android-9 para o android-10native-plasma
do android-9 para o android-10
- Foi adicionada uma nova marca para executáveis do Android com um esquema mais simples na seção
.note.android.ident
(definida emcrtbegin_static/dynamic.o
) para que as ferramentas de depuração possam agir corretamente. O membro da estrutura e os valores são definidos como da seguinte forma:static const struct { int32_t namesz; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
As antigas opções de marca na seção
.note.ABI-tag
estão obsoletas. - Foi adicionado um novo script
run-tests-all.sh
, que chamarun-tests.sh
estandalone/run.sh
com várias condições. O scriptrun-tests.sh
é executado sem a opção--abi
e foi aprimorado para compilar a maioria dos testes para todas as ABIs com suporte e funcionar em todos os dispositivos conectados.
- Os 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_COMMANDS
nos ambientes do Mac OS e Windows Cygwin para bibliotecas estáticas. A geração de arquivos de lista é mais rápida e não é regenerada para evitar recriações de projetos repetidas. - Vários problemas foram corrigidos em
ndk-gdb
:- A ferramenta foi atualizada para transmitir sinalizações
-e
,-d
e-s
para o adb de maneira mais consistente. - A ferramenta foi atualizada para aceitar nomes de série de dispositivos que contenham espaços.
- A ferramenta foi atualizada para recuperar informações de
/system/bin/link
. Assim, ogdb
no host pode definir um ponto de interrupção em__dl_rtld_db_dlactivity
e estar alerta às atividades do vinculador (por exemplo, fazer nova verificação de símbolossolib
quandodlopen()
for chamado).
- A ferramenta foi atualizada para transmitir sinalizações
- O
ndk-build clean
foi corrigido no Windows, porque falhava ao remover./libs/*/lib*.so
. ndk-build.cmd
foi corrigido para retornar umERRORLEVEL
diferente de zero quandomake
falhar.libc.so
foi corrigido para interromper a exportação incorreta de símbolos__exidx_start
e__exidx_end
.SEGV
foi corrigido para liberação da pilha após__libc_init
para ARM e MIPS.
- Foram corrigidos problemas de
- Mudanças importantes:
-
- O conjunto de ferramentas do GCC 4.6 (
binutils
2.21 comgold
e GDB 7.3.x) foi adicionado para coexistir com o original do GCC 4.4.3 (binutils
2.19 e GDB 6.6).- Agora, GCC 4.6 é o conjunto de ferramentas padrão. Você pode definir
NDK_TOOLCHAIN_VERSION=4.4.3
emApplication.mk
para selecionar o original. - A compatibilidade com o vinculador
gold
está disponível apenas para arquiteturas ARM e x86 nos hosts do Linux e do Mac OS. Esse suporte fica desativado por padrão. AdicioneLOCAL_LDLIBS += -fuse-ld=gold
emAndroid.mk
para ativá-la. - Os programas compilados com
-fPIE
exigem o novoGDB
para depuração, incluindo binários em imagens do sistema Android 4.1 (API de nível 16). - A ferramenta
binutils
2.21 dold
contém correções da versão 2.22 que passaram por backport:- O
ld --gc-sections
foi corrigido porque retinha incorretamente referências zumbi a bibliotecas externas (mais informações, link em inglês). - O comando
strip
de ARM foi corrigido para preservarp_align
ep_flags
originais emGNU_RELRO
, caso sejam válidos. Sem essa correção, os programas criados com-fPIE
não podiam ser depurados (Mais informações, link em inglês).
- 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_now
por padrão:--noexecstack
foi adicionado ao assembler e-z noexecstack
ao vinculador que fornece proteção NX contra ataques de excedente de buffer com a ativação do bit NX na pilha e no heap.-z relro
e-z now
foram adicionados ao vinculador para aumentar a proteção de seções de dados internos após a vinculação contra vulnerabilidades de segurança causadas por corrupção de memória (mais informações: 1, 2).- Esses recursos podem ser desativados usando as seguintes opções:
- Desative a proteção NX configurando a opção
--execstack
para o assembler e-z execstack
para o vinculador. - Desative o aumento da proteção de dados internos configurando as opções
-z norelro
e-z lazy
para o vinculador. - Desative essas proteções no NDK
jni/Android.mk
configurando a seguintes opções:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Consulte
docs/ANDROID-MK.html
para mais detalhes. - 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. A estrutura membro e valores são definidos da seguinte maneira:static const struct { int32_t namesz; /* = 4, sizeof ("GNU") */ int32_t descsz; /* = 6 * sizeof(int32_t) */ int32_t type; /* = 1 */ char name[sizeof "GNU"]; /* = "GNU" */ int32_t os; /* = 0 */ int32_t major; /* = 2 */ int32_t minor; /* = 6 */ int32_t teeny; /* = 15 */ int32_t os_variant; /* = 1 */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
- O conjunto de ferramentas do GCC 4.6 (
- Outras correções de bugs:
-
- A realocação truncada de
mips-linux-gnu
foi corrigida para corresponder ao problema deR_MIPS_TLS_LDM
(mais informações, link em inglês). - As falhas de segmentação da ferramenta
ld
foram corrigidas durante o uso de--gc-sections
(mais informações, link em inglês). - O problema de contagem de
GOT_PAGE
do MIPS foi corrigido. (mais informações, link em inglês). - O link do símbolo de aviso para
mips_elf_count_got_symbols
foi corrigido. - O link do símbolo de aviso para
mips_elf_allocate_lazy_stub
foi corrigido. - O
.dynamic
.de MIPS foi movido para o segmento de dados, por isso, é gravável. - Os valores codificados por símbolos foram substituídos por tamanhos de segmento corretos para o MIPS.
- A opção
-mno-shared
foi removida dos padrões no conjunto de ferramentas do MIPS. O padrão para o conjunto de ferramentas do Android é-fPIC
(ou-fpic
, se compatível). Se você não especificar explicitamente-mshared
,-fpic
,-fPIC
,-fpie
ou-fPIE
, o compilador MIPS adicionará-mno-shared
, que desativa PIC. O compilador foi corrigido para não adicionar-mno-shared
nesse caso. - Foi corrigido o uso de nomes de pacotes incorretos em exemplos
hello-jni
etwo-libs
para que o projetotests
abaixo deles possa ser compilado.
- A realocação truncada de
- Outras mudanças:
-
- Mudança dos locais dos binários:
gdbserver
foi movido detoolchain/<arch-os-ver>/prebuilt/gdbserver
paraprebuilt/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++/include
elib
foram movidos parasources/cxx-stl/gnu-libstdc++/4.6
quando compilados com o GCC 4.6 ou parasources/cxx-stl/gnu-libstdc++/4.4.3
quando o GCC 4.4.3 é usado para esse processo.libbfd.a
elibintl.a
foram movidos delib/
paralib32/
.
- Vários scripts foram adicionados e aprimorados na recriação e teste do conjunto de ferramentas do NDK:
build-mingw64-toolchain.sh
foi adicionado para gerar um novo conjunto de ferramentas hospedado no Linux que gera arquivos executáveis Win32 e Win64.- A velocidade de
download-toolchain-sources.sh
foi aprimorada com o uso do comandoclone
e usandocheckout
somente para os diretórios necessários para a criação de binários do conjunto de ferramentas do NDK. - Foram adicionados os scripts
build-host-gcc.sh
ebuild-host-gdb.sh
. tests/check-release.sh
foi adicionado para verificar o conteúdo de determinado diretório de instalação do NDK ou de um pacote do NDK que já existe.- Os testes autônomos de
tests/standalone/run.sh
foram reescritos.
- O cabeçalho
if_dl.h
foi removido de todas as plataformas e arquiteturas. Os elementosAF_LINK
esockaddr_dl
que 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.html
no pacote do NDK.Por padrão, o código é gerado para dispositivos com processador ARM. É possível adicionar
mips
à sua definição deAPP_ABI
no arquivoApplication.mk
para criar para plataformas MIPS. Por exemplo, a linha a seguir instrui ondk-build
a criar seu código para três ABIs diferentes:APP_ABI := armeabi armeabi-v7a mips
A menos que você dependa de fontes assembly específicas de arquitetura, como um código assembly para ARM, você não precisará mexer nos arquivos
Android.mk
para compilar o criar de máquina MIPS. - Você pode criar um conjunto de ferramentas autônomo de MIPS usando a opção
--arch=mips
ao chamarmake-standalone-toolchain.sh
. Consultedocs/STANDALONE-TOOLCHAIN.html
para ver mais detalhes.
Observação: para garantir que seus apps sejam disponibilizados aos usuários somente quando puderem ser executados pelos dispositivos deles, o Google Play vai filtrar os apps com base nas informações do conjunto de instruções incluídas neles. Nenhuma ação sua é necessária para ativar a filtragem. Além disso, o próprio sistema Android também verifica seu aplicativo no momento da instalação e permite que esse processo só continue se o aplicativo fornecer uma biblioteca que seja compilada para a arquitetura de CPU do dispositivo.
- 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 baseb
para a classe derivadaD
está ajustado incorretamente na direção oposta da classe de base (problema 28721, link em inglês). - Foi corrigido um problema em que
make-standalone-toolchain.sh
falha ao 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.cmd
foi corrigido para garantir quendk-build.cmd
funcione 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_COMMANDS
paratrue
no 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.html
para 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.h
foi atualizado para evitar problemas de correção em alguns dispositivos com processador ARM com vários núcleos. Recrie suas fontes não modificadas com esta versão do NDK para que esse problema seja completamente eliminado. Para mais detalhes, consultedocs/ANDROID-ATOMICS.html
.- Reversão do
binutils
2.19 para corrigir problemas de depuração que apareceram no NDK r7 (que usabinutils
2.20.1). - O
ndk-build
foi corrigido no Linux de 32 bits. Um erro de empacotamento colocou uma versão de 64 bits do executávelawk
emprebuilt/linux-x86/bin
no NDK r7. - A criação do Windows nativa foi corrigida (
ndk-build.cmd
). Outros modos de criação não foram afetados. Estas foram as correções:- Foi removido um bug de loop infinito / pilha excedente que acontecia ao tentar chamar
ndk-build.cmd
de um diretório que não estava no topo do caminho do projeto (por exemplo, em qualquer subdiretório). - Foi corrigido um problema em que os arquivos de dependência gerados automaticamente eram ignorados. Isso significa que a atualização de um cabeçalho não acionou a recompilação de fontes que o incluíam.
- Foi corrigido um problema em que caracteres especiais em arquivos ou caminhos, além de espaços e aspas, não eram tratados corretamente.
- 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_shared
se quiser vincular a versão da biblioteca compartilhada ou-lstdc++
para a versão estática.Consulte
docs/STANDALONE-TOOLCHAIN.html
para saber mais sobre essa correção. - O
gnustl_shared
foi corrigido no Cygwin. O vinculador informava que não podia 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_FEATURES
para'exceptions'
,'rtti'
ou ambos emApplication.mk
. Consultedocs/APPLICATION-MK.html
para saber mais detalhes.
- Ative exceções e/ou RTTI explicitamente nos seus módulos ou
ndk-gdb
agora funciona corretamente quando seu app tem serviços privados em execução em processos independentes. Ele depura o processo principal do aplicativo, em vez do primeiro listado 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_MODE
e sempre compila determinados arquivos de origem (mas não todos) para instruções de 32 bits. STLport
: atualize as origens para que correspondam à versão da plataforma Android. Esta atualização corrige alguns pequenos bugs:- A instanciação de um tipo incompleto foi corrigida.
- Foi corrigido um erro de digitação menor, "==" versus "=".
memmove
foi usado, em vez dememcpy
emstring::assign
- Foi adicionado melhor gerenciamento de
IsNANorINF
,IsINF
,IsNegNAN
etc.
Para ver os detalhes completos, consulte o registro de confirmação.
STLport
: foram removidos cinco inicializadores estáticos desnecessários da biblioteca.- As bibliotecas GNU libstdc++ para armeabi-v7a foram compiladas por engano para armeabi. Essa mudança não teve impacto sobre a correção, mas o uso da ABI correta deve fornecer um desempenho um pouco melhor.
- A biblioteca auxiliar
cpu-features
foi atualizada para informar três recursos opcionais de CPU x86 (SSSE3
,MOVBE
ePOPCNT
). Consultedocs/CPU-FEATURES.html
para mais detalhes. docs/NDK-BUILD.html
foi atualizado para mencionarNDK_APPLICATION_MK
, em vez deNDK_APP_APPLICATION_MK
, para selecionar um arquivoApplication.mk
personalizado.- Cygwin: o
ndk-build
não cria mais um arquivo "NUL" vazio no diretório atual quando invocado. - Cygwin: foi adicionada uma melhor detecção automática de dependência. Na versão anterior, ela não funcionava corretamente nos seguintes casos:
- Quando o prefixo da unidade Cygwin não era
/cygdrive
. - Ao usar montagens sem unidade, por exemplo, quando o Cygwin traduz
/home
para\\server\subdir
, em vez deC:\Some\Dir
.
- Quando o prefixo da unidade Cygwin não era
- Cygwin:
ndk-build
não tenta usar as ferramentas nativas do Windows em$NDK/prebuilt/windows/bin
com determinadas versões do Cygwin e/ou do GNU Make.
- 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.html
e http://www.khronos.org/openmax/ (link em inglês). - A API de áudio nativa baseada no Khronos Group OpenSL ES 1.0.1 padrão foi
atualizada. Com o nível 14 da API, é possível decodificar áudio compactado (por exemplo, MP3, AAC, Vorbis) para o PCM. Para saber mais detalhes, consulte
docs/opensles/index.html
e http://www.khronos.org/opensles/ (link em inglês).
- Foi 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_CCACHE
comoccache
(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_ABI
paraall
a fim de indicar que você quer criar seus módulos NDK para todas as ABIs compatíveis com sua versão correspondente. Isso significa que qualquer uma das duas linhas a seguir em seuApplication.mk
são equivalentes a esta versão:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Isso também funciona se você definir
APP_ABI
ao chamarndk-build
a partir da linha de comando, que é uma maneira rápida de verificar se o projeto foi criado para todas as ABIs compatíveis sem alterarApplication.mk file
. Por exemplo:ndk-build APP_ABI=all
- Foi adicionada uma variável
LOCAL_CPP_FEATURES
aAndroid.mk
que permite declarar quais recursos de C++ (RTTI ou Exceções) seu módulo usa. Isso garante que a vinculação final funcione corretamente se você tiver módulos pré-compilados que dependam desses recursos. Consultedocs/ANDROID-MK.html
edocs/CPLUSPLUS-SUPPORT.html
para mais detalhes. - Foram abreviados os caminhos para arquivos de origem e de objeto que são usados em comandos de build. Ao invocar
$NDK/ndk-build
a partir do caminho do seu projeto, os caminhos para os arquivos binários, de objeto e de origem que são transmitidos para os comandos de criação ficaram significativamente menores porque são transmitidos em relação ao diretório atual. Isso é útil ao criar projetos com muitos arquivos de origem, para evitar limites no comprimento máximo da linha de comando compatível com o sistema operacional do host. O comportamento não se altera se você invocandk-build
de um subdiretório da sua árvore de projetos nem se você defineNDK_PROJECT_PATH
para 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.cmd
a partir da linha de comando do caminho do seu projeto. O script usa exatamente os mesmos argumentos que o scriptndk-build
original. O pacote do Windows NDK vem com seus próprios binários pré-compilados para o GNU Make, Awk e outras ferramentas exigidas pela versão. Você não precisa instalar mais nada para acessar um sistema de criação funcional.Importante: o
ndk-gdb
não funciona no Windows, então ainda é necessário usar o Cygwin para a depuração.Esse recurso ainda é experimental. Fique à vontade para testá-lo e informar qualquer problema no banco de dados público de bugs ou no fórum público. Todas as amostras e testes de unidade fornecidos com o NDK são compilados com êxito com esse recurso.
- Correções importantes de bugs:
-
- As bibliotecas compartilhadas importadas agora são instaladas por padrão no local de instalação de destino (
libs/<abi>
) seAPP_MODULES
não for definido no seuApplication.mk
. Por exemplo, se um módulo de alto nívelfoo
importar um módulobar
,libfoo.so
elibbar.so
serão copiados para o local de instalação. Antes disso, apenaslibfoo.so
era copiado, a menos que você listassebar
no seuAPP_MODULES
também. Se você definirAPP_MODULES
explicitamente, o comportamento se manterá inalterado. ndk-gdb
agora funciona corretamente para atividades com várias categorias nos filtros de intent MAIN.- As importações de bibliotecas estáticas agora são adequadamente transitivas. Por exemplo, se um módulo de alto nível
foo
importar a biblioteca estáticabar
que importazoo
, olibfoo.so
agora será vinculado alibbar.a
elibzoo.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.html
atualizado. - Foi adicionado um novo tempo de execução do suporte a C++ chamado
gnustl_shared
, que corresponde à versão da biblioteca compartilhada do GNU libstdc++ v3 (licença GPLv3). Veja mais informações 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
. Para Por exemplo, para compilarfoo.cpp
ebar.cxx
como fontes C++, declare o seguinte:LOCAL_CPP_EXTENSION := .cpp .cxx
- Foram removidos muitos símbolos exportados indesejados das bibliotecas do sistema compartilhado do tempo de link fornecidas pelo NDK. Isso garante que o código gerado com o conjunto de ferramentas autônomo não corra o risco de depender acidentalmente de um símbolo ABI não estável (por exemplo, qualquer símbolo libgcc.a que seja alterado sempre que o conjunto de ferramentas usado para criar a plataforma for modificado).
- Os cabeçalhos EGL e OpenGLES Khronos foram atualizados para oferecer compatibilidade com mais extensões. Isso não altera as ABIs do NDK para as bibliotecas correspondentes, porque cada extensão precisa ser testada em tempo de execução pelo aplicativo cliente.
As extensões disponíveis dependem do dispositivo real e dos drivers da GPU, não da versão da plataforma em que o dispositivo é executado. As mudanças no cabeçalho simplesmente adicionam novas constantes e tipos para facilitar o uso das extensões quando elas forem analisadas com
eglGetProcAddress()
ouglGetProcAddress()
. A lista a seguir descreve as extensões com compatibilidade recente:- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
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=x86
foi corrigido. Isso costumava falhar ao copiar os binários GNU libstdc++ adequados para o local correto.- Foram corrigidos os avisos do vinculador do conjunto de ferramentas autônomo sobre a falta da definição e
do tamanho para o símbolo
__dso_handle
(somente ARM). - Foi corrigida a ordem de inclusão de
$(SYSROOT)/usr/include
para builds x86. Veja o bug para saber mais (link em inglês). - As definições de
ptrdiff_t
esize_t
foram 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.html
no pacote NDK.Por padrão, o código é gerado para dispositivos com processador ARM, mas é possível adicionar x86 à sua definição
APP_ABI
no arquivoApplication.mk
para criação de plataformas x86. Por exemplo, a linha a seguir instrui ondk-build
a criar seu código para três ABIs diferentes:APP_ABI := armeabi armeabi-v7a x86
A menos que você use fontes de assembly baseadas em ARM, não será necessário modificar os arquivos
Android.mk
para criar o código de máquina x86. - Você pode criar um conjunto de ferramentas x86 autônomo usando a opção
--toolchain=x86-4.4.3
ao chamarmake-standalone-toolchain.sh
. Vejadocs/STANDALONE-TOOLCHAIN.html
para mais detalhes. - A nova ferramenta
ndk-stack
permite traduzir rastreamentos de pilha emlogcat
que são gerados pelo código nativo. A ferramenta converte os endereços de instrução em um formato legível que contém itens como a função, o arquivo de origem e o número de linha correspondente a cada frame da pilha. Para saber mais e ver um exemplo de uso, 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_LIBRARIES
de 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_static
falhava ao ser executado em versões de plataforma anteriores ao nível 8 da API (Android 2.2). ndk-gdb
: foi corrigido um bug que causava uma falha de segmentação ao depurar dispositivos Android 3.0 ou mais recentes.<android/input.h>
: duas funções introduzidas no nível 9 da API (Android 2.3) estavam incorretas e foram corrigidas. Mesmo isso causando falhas na API de origem, a interface binária para o sistema não é modificada. As funções incorretas tinham um valorhistory_index
. As definições corretas são mostradas abaixo:float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- Foi atualizado o binário ARM da biblioteca C para o nível 9 da API (Android 2.3) para expor corretamente no momento do link novas funções que foram incluídas nesse nível de API (por exemplo,
pthread_rwlock_init
).
- Correções e melhorias secundárias:
-
- Os arquivos de objetos agora são sempre vinculados na ordem em que aparecem em
LOCAL_SRC_FILES
. Isso não ocorria anteriormente porque os arquivos eram agrupados por extensões de origem. - Quando
import-module
falhar, será capturada a lista de diretórios que foram pesquisados. Isso é útil para verificar se a definiçãoNDK_MODULE_PATH
usada pelo sistema de criação está correta. - Quando
import-module
for concluído, será capturado o diretório em que o módulo foi encontrado para o registro (visível 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 shell
e mensagens de erro aprimoradas.<pthread.h>
: a definição dePTHREAD_RWLOCK_INITIALIZER
foi corrigida para o nível 9 da API (Android 2.3) ou posterior.- Foi corrigido um problema em que um módulo podia se importar sozinho, resultando em um loop infinito no GNU Make.
- Foi corrigido um bug que causava uma falha na criação caso
LOCAL_ARM_NEON
fosse definido como verdadeiro (erro de digitação embuild/core/build-binary.mk
). - Foi corrigido um bug que impedia a compilação de arquivos Assembly
.s
. Os arquivos.S
funcionavam 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 -m
a partir do GNU Make para cada arquivo de origem ou objeto, o que causava problemas com árvores de origem muito grandes. Caso isso não funcione, definaNDK_USE_CYGPATH=1
no seu ambiente para usarcygpath -m
novamente. - A instalação do Cygwin agora notifica o usuário de caminhos de instalação inválidos que contêm espaços. Anteriormente, um caminho inválido gerava um erro que informava uma versão incorreta do GNU Make, mesmo se o caminho certo estivesse instalado.
- Foi corrigido um erro de digitação que impedia que a variável de ambiente
NDK_MODULE_PATH
funcionasse corretamente quando continha vários diretórios separados por dois pontos. - O script
prebuilt-common.sh
contém correções para verificar o código de máquina gerado pelo compilador de 64 bits, em vez de depender da tag de host, que permite que o conjunto de ferramentas de 32 bits seja recriado corretamente no Snow Leopard. Os scripts de recriação do conjunto de ferramentas agora também são compatíveis com o uso de um conjunto de ferramentas de host de 32 bits. - Uma declaração ausente em
INET_ADDRSTRLEN
foi adicionada a<netinet/in.h>
. - Declarações ausentes em
IN6_IS_ADDR_MC_NODELOCAL
eIN6_IS_ADDR_MC_GLOBAL
foram adicionadas a<netinet/in6.h>
. - "asm" foi substituído por "__asm__" em
<asm/byteorder.h>
para permitir a compilação com-std=c99
.
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
cpufeatures
que aprimora o relatório do tipo de CPU. Anteriormente, alguns dispositivos relatavam a CPU ARMv7 quando o dispositivo realmente era, na verdade, um ARMv6. Recomendamos que os desenvolvedores que usam essa biblioteca recriem seus aplicativos e os enviem ao Google Play para se beneficiar das melhorias. - Adiciona uma biblioteca EGL que permite criar e gerenciar texturas e serviços do OpenGL ES.
- Adiciona novos aplicativos de amostra,
native-plasma
enative-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 ampliaarmeabi
para incluir estas extensões de conjunto de instruções da CPU:- Instruções Thumb-2
- Instruções VFP de hardware FPU (VFPv3-D16)
- Suporte opcional para intrínsecos do GCC ARM de SIMD Avançado (NEON) e VFPv3-D32. Compatível com dispositivos como o Verizon Droid da Motorola, o Google Nexus One e outros.
- Adiciona uma nova biblioteca estática
cpufeatures
(com fontes) que permite que seu app detecte os recursos da CPU do dispositivo host no tempo de execução. Especificamente, os aplicativos podem verificar a compatibilidade com ARMv7-A, VFPv3-D32 e NEON, além de fornecer caminhos de código separados conforme necessário. - Adiciona um aplicativo de amostra,
hello-neon
, que ilustra como usar a bibliotecacpufeatures
para verificar os recursos da CPU e fornecer um caminho de código otimizado usando instrínsecos do NEON, se compatível com a CPU. - Permite gerar código de máquina para um ou ambos os conjuntos de instruções compatíveis com NDK. Por exemplo, você pode criar arquiteturas ARMv5 e ARMv7-A ao mesmo tempo e ter tudo armazenado no
.apk
final do aplicativo. - Para garantir que seus aplicativos estejam disponíveis para os usuários somente se os dispositivos forem capazes de executá-los, o Google Play filtrará os aplicativos com base nas informações do conjunto de instruções incluídas neles. Nenhuma ação sua é necessária para ativar a filtragem. Além disso, o próprio sistema Android também verifica seu aplicativo no momento da instalação e permite que esse processo só continue se o aplicativo fornecer uma biblioteca que seja compilada para a arquitetura de CPU do dispositivo.
- Adiciona compatibilidade com o Android 2.2, incluindo uma nova API estável para acessar os buffers de
pixel dos objetos
Bitmap
pelo código nativo.
- 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.