Questa pagina fornisce informazioni sulle modifiche apportate a tutte le versioni stabili rilasciate dell'NDK. Per scaricare l'ultima versione stabile dell'NDK o qualsiasi versione beta attualmente disponibile, consulta la pagina Download dell'NDK.
Per informazioni più complete, consulta il gruppo Google android-ndk-announce e iscriviti per ricevere gli annunci di rilascio.
Android NDK r29 (ottobre 2025)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
Android NDK r28 (febbraio 2025)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
Android NDK r27 LTS (luglio 2024)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
Android NDK r26 LTS (settembre 2023)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
- KitKat (API 19 e 20) non è più supportato.
Android NDK r25 LTS (luglio 2022)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
- Include le API Android 13.
- LLVM è stato aggiornato a clang-r450784d, basato sullo sviluppo di LLVM 14.
Android NDK r24 (marzo 2022)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
GNU Assembler (GAS) è stato rimosso. Se hai creato la build con
-fno-integrated-as
, devi rimuovere questo flag. Consulta Clang Migration Notes per suggerimenti su come rendere l'assembly compatibile con LLVM. - GDB è stato rimosso. Utilizza LLDB. Tieni presente che ndk-gdb utilizza LLDB per impostazione predefinita e Android Studio ha sempre supportato solo LLDB.
- Jelly Bean (API 16, 17 e 18) non è più supportato. Il sistema operativo minimo supportato dall'NDK è KitKat (livello API 19).
- I dispositivi non Neon non sono più supportati. Un numero molto ridotto di dispositivi molto vecchi non supporta Neon, quindi la maggior parte delle app non noterà nulla a parte il miglioramento delle prestazioni.
- Il supporto per la build RenderScript è stato rimosso. RenderScript è stato ritirato in Android 12. Se non hai completato la migrazione delle tue app da RenderScript, puoi utilizzare NDK r23 LTS.
-
GNU Assembler (GAS) è stato rimosso. Se hai creato la build con
Android NDK r23 LTS (agosto 2021)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
GNU binutils, escluso GNU Assembler (GAS), è stato rimosso. GAS
verrà rimosso nella prossima release. Se utilizzi
-fno-integrated-as
, segnala i bug se qualcosa ti impedisce di rimuovere questo flag. -
Il supporto per GDB è terminato. GDB verrà rimosso dalla prossima release.
Utilizza LLDB. Tieni presente che
ndk-gdb
utilizza LLDB per impostazione predefinita. - NDK r23 è l'ultima release che supporterà non-Neon. A partire da NDK r24, le librerie armeabi-v7a in sysroot verranno create con Neon. Un numero molto ridotto di dispositivi molto vecchi non supporta Neon, quindi la maggior parte delle app non noterà nulla, a parte il miglioramento delle prestazioni.
- Jelly Bean (API 16, 17 e 18) non sarà supportato nella prossima release dell'NDK. Il sistema operativo minimo supportato dall'NDK per la versione r24 sarà KitKat (livello API 19).
-
GNU binutils, escluso GNU Assembler (GAS), è stato rimosso. GAS
verrà rimosso nella prossima release. Se utilizzi
Android NDK r22b (marzo 2021)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
GNU binutils è deprecato e verrà rimosso in una prossima release dell'NDK. Tieni presente che l'assembler GNU (
as
) is a part of this. Se utilizzi-fno-integrated-as
, segnala i bug se qualcosa ti impedisce di rimuovere questo flag. Se utilizzias
direttamente, usaclang
. - LLD è ora il linker predefinito. ndk-build e il nostro file della toolchain CMake sono stati migrati anche per l'utilizzo di llvm-ar e llvm-strip.
- ndk-gdb ora utilizza lldb come debugger. gdb è deprecato e verrà rimosso in una release futura. Per tornare a gdb, utilizza l'opzione --no-lldb. Tuttavia, ti invitiamo a inviare una segnalazione di bug spiegando perché non hai potuto utilizzare lldb.
-
Ora è incluso il supporto per
std::filesystem
. Esistono due problemi noti:-
Problema
1258:
std::filesystem::perm_options::nofollow
potrebbe non essere rispettato sui dispositivi meno recenti. -
Problema
1260:
std::filesystem::canonical
avrà esito positivo in modo errato quando viene passato un percorso inesistente su vecchi dispositivi.
-
Problema
1258:
-
GNU binutils è deprecato e verrà rimosso in una prossima release dell'NDK. Tieni presente che l'assembler GNU (
Android NDK r21e LTS (gennaio 2021)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
Windows a 32 bit non è più supportato. Questa operazione non influisce sulla stragrande maggioranza degli utenti. Se hai ancora bisogno di creare app NDK dalle versioni a 32 bit di Windows, continua a utilizzare NDK r20.
Per saperne di più su questa modifica negli strumenti per sviluppatori Android, consulta il post del blog sull'argomento.
-
LLD è ora disponibile per i test.
AOSP è passato all'utilizzo di LLD per impostazione predefinita e l'NDK seguirà
(tempistiche sconosciute). Testa LLD nella tua app passando
-fuse-ld=lld
durante il collegamento. Tieni presente che l'Issue 843 influenzerà le build che utilizzano LLD con binutils strip e objcopy anziché llvm-strip e llvm-objcopy. -
I percorsi di installazione della toolchain precedente verranno rimossi nelle prossime
release. Questi percorsi sono obsoleti a partire dall'NDK r19 e occupano
una quantità considerevole di spazio nell'NDK. I percorsi che verranno rimossi sono:
- piattaforme
- sources/cxx-stl
- sysroot
- toolchain (ad eccezione di toolchain/llvm)
make_standalone_toolchain.py
(anche se questo script non è più necessario dalla versione r19). Per informazioni sulla migrazione dal layout della toolchain precedente, consulta la Guida per i manutentori del sistema di compilazione per la versione dell'NDK che stai utilizzando. - Il Play Store richiederà il supporto a 64 bit durante il caricamento di un APK a partire da agosto 2019. Inizia subito il trasferimento per evitare sorprese quando arriverà il momento. Per ulteriori informazioni, consulta questo post del blog.
- Un bundle di app per macOS firmato e autenticato è ora disponibile per il download dal nostro wiki e dal nostro sito web. Tieni presente che poiché solo i bundle possono utilizzare RPATH e superare la notarizzazione, il pacchetto NDK tradizionale per macOS non può essere notarizzato. L'SDK continuerà a utilizzare il pacchetto tradizionale perché l'app bundle richiede modifiche al layout che lo renderebbero incompatibile con Android Studio. L'NDK non viene messo in quarantena quando viene scaricato tramite SDK Manager, pertanto al momento è consentito da Gatekeeper. Al momento, SDK Manager è il modo più affidabile per ottenere l'NDK per macOS.
-
Android NDK r20b (giugno 2019)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
LLD è ora disponibile per i test.
AOSP sta passando all'utilizzo di LLD per impostazione predefinita e l'NDK seguirà (tempistiche sconosciute). Testa il collegamento dinamico nella tua app passando
-fuse-ld=lld
durante il collegamento. - Il Play Store richiederà il supporto a 64 bit durante il caricamento di un APK a partire da agosto 2019. Inizia subito il trasferimento per evitare sorprese quando arriverà il momento. Per ulteriori informazioni, consulta questo post del blog.
- Sono state aggiunte le API di Android Q.
-
LLD è ora disponibile per i test.
AOSP sta passando all'utilizzo di LLD per impostazione predefinita e l'NDK seguirà (tempistiche sconosciute). Testa il collegamento dinamico nella tua app passando
Android NDK r19c (gennaio 2019)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
-
Gli sviluppatori devono iniziare a testare le proprie app con LLD. AOSP è passato all'utilizzo di
LLD per impostazione predefinita e l'NDK lo utilizzerà per impostazione predefinita nella prossima
release. BFD e Gold verranno rimossi una volta che LLD avrà completato un ciclo di rilascio senza problemi gravi irrisolti (r21 stimato). Testa
LLD nella tua app passando
-fuse-ld=lld
durante il collegamento. Nota: al momento lld non supporta i simboli compressi su Windows. Problema 888. Inoltre, Clang non può generare simboli compressi su Windows, ma questo può essere un problema quando si utilizzano artefatti creati da Darwin o Linux. - Il Play Store richiederà il supporto a 64 bit durante il caricamento di un APK a partire da agosto 2019. Inizia subito il trasferimento per evitare sorprese quando arriverà il momento. Per ulteriori informazioni, consulta questo post del blog.
-
Problema 780:
Le toolchain
autonome ora sono inutili. Clang, binutils, sysroot e altri componenti della toolchain sono ora tutti installati in
$NDK/toolchains/llvm/prebuilt/<host-tag>
e Clang li troverà automaticamente. Anziché creare una toolchain autonoma per l'API 26 ARM, richiama il compilatore direttamente dall'NDK: Per la r19, la toolchain viene installata anche nel vecchio percorso per consentire ai sistemi di build di adattarsi al nuovo layout. I vecchi percorsi verranno rimossi nella versione r20. Lo script$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
non verrà rimosso. Ora è superfluo ed emetterà un avviso con le informazioni sopra riportate, ma lo script rimarrà per preservare i flussi di lavoro esistenti. Se utilizzi ndk-build, CMake o una toolchain autonoma, non dovrebbe esserci alcuna modifica al tuo flusso di lavoro. Questa modifica è significativa per i manutentori di sistemi di build di terze parti, che ora dovrebbero essere in grado di eliminare parte del codice specifico per Android. Per saperne di più, consulta la guida Build System Maintainers. - ndk-depends è stato rimosso. Riteniamo che ReLinker sia una soluzione migliore ai problemi di caricamento delle librerie native nelle versioni precedenti di Android.
- Problema 862: Gli script wrapper GCC che reindirizzavano a Clang sono stati rimossi, in quanto non sono sufficientemente funzionali per essere sostituzioni immediate.
-
Gli sviluppatori devono iniziare a testare le proprie app con LLD. AOSP è passato all'utilizzo di
LLD per impostazione predefinita e l'NDK lo utilizzerà per impostazione predefinita nella prossima
release. BFD e Gold verranno rimossi una volta che LLD avrà completato un ciclo di rilascio senza problemi gravi irrisolti (r21 stimato). Testa
LLD nella tua app passando
Android NDK r18b (settembre 2018)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
- GCC è stato rimosso.
-
LLD è ora disponibile per i test.
AOSP sta passando all'utilizzo di LLD per impostazione predefinita e l'NDK seguirà (tempistiche sconosciute). Testa il collegamento dinamico nella tua app passando
-fuse-ld=lld
durante il collegamento. - gnustl, gabi++ e stlport sono stati rimossi.
- Il supporto di ICS (android-14 e android-15) è stato rimosso. Le app che utilizzano eseguibili non devono più fornire un eseguibile PIE e non PIE.
- Il Play Store richiederà il supporto a 64 bit durante il caricamento di un APK a partire da agosto 2019. Inizia subito il trasferimento per evitare sorprese quando arriverà il momento. Per ulteriori informazioni, consulta questo post del blog.
Android NDK r17c (giugno 2018)
Log delle modifiche- I download
-
- I download per questa release sono disponibili qui.
- Annunci
-
- GCC non è più supportato. Verrà rimosso in NDK r18.
-
libc++ è ora la STL predefinita per CMake e le toolchain autonome. Se
hai selezionato manualmente un STL diverso, ti consigliamo vivamente di
passare a
libc++
. Tieni presente che ndk-build continua a non utilizzare STL per impostazione predefinita. Per ulteriori dettagli, consulta questo post del blog. - gnustl e stlport sono deprecati e verranno rimossi in NDK r18.
- Il supporto per ARMv5 (armeabi), MIPS e MIPS64 è stato rimosso. Il tentativo di creare una di queste ABI genererà un errore.
- Il supporto di ICS (android-14 e android-15) verrà rimosso dalla versione r18.
- Il Play Store richiederà il supporto a 64 bit durante il caricamento di un APK a partire da agosto 2019. Inizia subito il trasferimento per evitare sorprese quando arriverà il momento. Per ulteriori informazioni, consulta questo post del blog.
Android NDK r16b (dicembre 2017)
Log delle modifiche- I download
- I download per questa release sono disponibili qui.
- Annunci
-
- Le intestazioni deprecate sono state rimosse. Le intestazioni unificate ora sono semplicemente "Le intestazioni". Per suggerimenti sulla migrazione, vedi Note sulla migrazione delle intestazioni unificate.
- GCC non è più supportato. Non verrà ancora rimosso dall'NDK, ma non riceve più backport. Non può essere rimosso finché libc++ non sarà sufficientemente stabile da diventare il valore predefinito, poiché alcune parti di gnustl sono ancora incompatibili con Clang. Verrà rimosso quando gli altri STL verranno rimossi nella versione r18.
libc++
non è più in versione beta ed è ora la STL preferita nell'NDK. A partire dalla versione r17,libc++
è la STL predefinita per CMake e le toolchain autonome. Se hai selezionato manualmente un altro STL, ti consigliamo vivamente di passare alibc++
. Per ulteriori dettagli, consulta questo post del blog.- Il supporto per ARM5 (armeabi), MIPS e MIPS64 è stato ritirato. Non verranno più compilate per impostazione predefinita con ndk-build, ma sono comunque compilabili se vengono denominate esplicitamente e verranno incluse da "all", "all32" e "all64". Il supporto per ciascuno di questi è stato rimosso nella versione r17. Sia CMake che ndk-build emetteranno un avviso se scegli come target una di queste ABI.
- API
-
Sono state aggiunte API native per Android 8.1. Per scoprire di più su queste API, consulta la panoramica delle API native.
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo changelog.
Android NDK r15c (luglio 2017)
Log delle modifiche- I download
- I download per questa release sono disponibili qui.
- Annunci
-
- Le intestazioni unificate sono attive per impostazione predefinita. Per scoprire come utilizzare queste intestazioni, vedi Intestazioni unificate.
- GCC non è più supportato. Non è ancora stata rimossa dall'NDK, ma non riceve più backport. Non può essere rimosso finché libc++ non si stabilizza abbastanza da diventare il valore predefinito, poiché alcune parti di gnustl sono ancora incompatibili con Clang.
- Android 2.3 (
android-9
) non è più supportato. Il livello API target minimo nell'NDK è ora Android 4.0 (android-14
). SeAPP_PLATFORM
è impostato su un valore inferiore aandroid-14
, viene utilizzatoandroid-14
. - CMake in NDK ora supporta la creazione di codice assembly scritto in YASM da eseguire su architetture x86 e x86-64. Per saperne di più, consulta Creazione di codice assembly.
Nota: le intestazioni deprecate verranno rimosse in una versione futura. Se riscontri problemi con queste intestazioni, segnala un bug.
Per suggerimenti sulla migrazione, consulta le note sulla migrazione delle intestazioni unificate.
- API
-
Sono state aggiunte API native per Android 8.0. Per scoprire di più su queste API, consulta la panoramica delle API native.
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo changelog.
Android NDK r14b (marzo 2017)
Log delle modifiche- I download
- I download per questa release sono disponibili qui.
- Annunci
-
- Intestazioni unificate:questa release introduce intestazioni della piattaforma sincronizzate
e sempre aggiornate e accurate con la piattaforma Android. Le correzioni di bug solo nell'intestazione ora
riguardano tutti i livelli API. L'introduzione di intestazioni unificate corregge le incongruenze nelle versioni precedenti dell'NDK, ad esempio:
- Le intestazioni in M e N erano in realtà intestazioni per L.
- Le dichiarazioni di funzione nelle intestazioni non corrispondevano correttamente ai livelli della piattaforma; le intestazioni dichiaravano funzioni inesistenti o non dichiaravano funzioni disponibili.
- In diversi livelli API precedenti mancavano costanti o erano errate, mentre erano presenti nei livelli API più recenti.
Queste nuove intestazioni unificate non sono attivate per impostazione predefinita. Per scoprire come attivare e utilizzare queste intestazioni, consulta Intestazioni unificate.
- Ritiro di GCC:questa release termina il supporto attivo per GCC. GCC non è ancora stato rimosso dall'NDK, ma non riceverà più backport. Poiché alcune parti di gnustl sono ancora incompatibili con Clang, GCC non verrà rimosso completamente finché libc++ non sarà sufficientemente stabile da diventare l'impostazione predefinita.
- Intestazioni unificate:questa release introduce intestazioni della piattaforma sincronizzate
e sempre aggiornate e accurate con la piattaforma Android. Le correzioni di bug solo nell'intestazione ora
riguardano tutti i livelli API. L'introduzione di intestazioni unificate corregge le incongruenze nelle versioni precedenti dell'NDK, ad esempio:
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo changelog.
Android NDK r13b (ottobre 2016)
- I download
- I download per questa release sono archiviati qui.
- Annunci
-
- GCC non è più supportato. Non verrà ancora rimosso dall'NDK, ma non riceve più backport. Non può essere rimosso finché libc++ non sarà sufficientemente stabile da diventare l'impostazione predefinita, poiché alcune parti di gnustl sono ancora incompatibili con Clang. Probabilmente verrà rimosso dopo questo punto.
- Aggiunto simpleperf, un profiler della CPU per Android.
- r13b
-
-
Correzioni aggiuntive per
__cxa_bad_cast
mancanti.
-
Correzioni aggiuntive per
- NDK
-
NDK_TOOLCHAIN_VERSION
ora utilizza Clang per impostazione predefinita.- libc++ è stato aggiornato alla versione r263688.
- Abbiamo eseguito il reset a una versione upstream (quasi) pulita. In questo modo dovrebbero essere rimossi diversi bug, ma dobbiamo ancora pulire libandroid_support prima di poterla consigliare come predefinita.
-
make-standalone-toolchain.sh
è ora semplicemente un wrapper per la versione Python dello strumento. Esistono alcune differenze comportamentali. Per maggiori dettagli, consulta il messaggio di commit. - Sono state rimosse alcune librerie per ABI non supportate (mips64r2, mips32r6, mips32r2 e x32). Potrebbero esserci ancora alcuni ritardatari.
- Sono stati risolti i problemi relativi a crtbegin_static.o che hanno comportato la mancata visualizzazione di atexit in fase di collegamento durante la creazione di un eseguibile statico per ARM android-21+: Issue 132
- È stato aggiunto il file della toolchain CMake in build/cmake/android.toolchain.cmake.
- Problemi noti
-
- Questo non vuole essere un elenco completo di tutti i bug in sospeso.
- Le toolchain autonome che utilizzano libc++ e GCC non funzionano. Sembra che si tratti di un bug in GCC. Per ulteriori dettagli, consulta il messaggio di commit.
- Le intestazioni e le librerie bioniche per Marshmallow e N non sono ancora esposte nonostante la presenza di android-24. Queste piattaforme sono ancora le intestazioni e librerie Lollipop (non una regressione dalla versione r11).
- Gli strumenti RenderScript non sono presenti (non si tratta di una regressione dalla versione r11): Issue 7.
Android NDK r12b (giugno 2016)
- I download
- I download per questa release sono archiviati qui.
- Annunci
- Il comando
ndk-build
utilizza Clang per impostazione predefinita nella versione r13. Rimuoveremo GCC in una release successiva. - Lo script
make-standalone-toolchain.sh
verrà rimosso nella versione r13. Assicurati chemake_standalone_toolchain.py
soddisfi le tue esigenze. - Segnala i problemi a GitHub.
- Abbiamo risolto il problema
ndk-gdb.py
. (Numero 118) -
Abbiamo aggiornato
NdkCameraMetadataTags.h
in modo che non contenga più un valore enum non valido. - È stato corretto un bug in ndk-build che generava avvisi spuri per le librerie statiche che utilizzano libc++. Per ulteriori informazioni su questa modifica, consulta i commenti qui.
- Le intestazioni OpenSLES sono state aggiornate per android-24.
- NDK
- Abbiamo rimosso il supporto per l'ABI armeabi-v7a-hard. Per saperne di più, consulta questa spiegazione.
- Sono state rimosse tutte le sysroot per i livelli della piattaforma precedenti a GB. Abbiamo interrotto il supporto nella revisione 11, ma abbiamo omesso di rimuoverli.
- La gestione delle eccezioni quando si utilizza c++_shared su ARM32 ora funziona per la maggior parte. L'unwinder verrà ora collegato a ogni oggetto collegato anziché a libc++. Per saperne di più su questa gestione delle eccezioni, consulta la sezione Problemi noti.
- I flag del compilatore predefiniti sono stati eliminati.
(numero 27).
- Per informazioni complete su queste modifiche, consulta questo elenco di modifiche.
- È stata aggiunta un'implementazione Python di toolchain autonome:
build/tools/make_standalone_toolchain.py
.- Gli utenti Windows non hanno più bisogno di Cygwin per utilizzare questa funzionalità.
- Rimuoveremo la variante bash nella versione r13, quindi prova subito la nuova.
-fno-limit-debug-info
è stato abilitato per impostazione predefinita per le build di debug di Clang. Questa modifica dovrebbe migliorare la capacità di eseguire il debug con LLDB.--build-id
è ora abilitato per impostazione predefinita.- L'ID build ora verrà visualizzato nei report sugli arresti anomali nativi, in modo da poter identificare facilmente la versione del codice in esecuzione.
NDK_USE_CYGPATH
non dovrebbe più causare problemi con libgcc. (Android Issue 195486)- Le opzioni
-Wl
,--warn-shared-textrel
e-Wl,--fatal-warnings
sono ora abilitate per impostazione predefinita. Se hai condiviso le ricollocazioni di testo, la tua app non può essere caricata su Android 6.0 (livello API 23) o versioni successive. Le rilocazioni di testo non sono mai state consentite per le app a 64 bit. - Le intestazioni precompilate dovrebbero funzionare meglio. (problema 14 e problema 16)
- Sono state rimosse le librerie STL ARM (non thumb) non raggiungibili.
- È stato aggiunto il supporto di Vulkan ad android-24.
- Aggiunta dell'API Choreographer ad android-24.
- Sono state aggiunte le API
libcamera2
per i dispositivi conINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o versioni successive. Per ulteriori informazioni, vedi Caratteristiche della videocamera. - Clang
- Clang è stato aggiornato alla versione 3.8svn (r256229, build 2812033).
- I file eseguibili
clang.exe
eclang++.exe
nel pacchetto Windows a 32 bit sono in realtà a 64 bit. L'eseguibile a 32 bit si chiamaclang_32.exe
.
- I file eseguibili
- GCC
- Sincronizzato con ChromeOS GCC @ google/gcc-4_9 r227810.
- Patch di sanificazione della copertura di backporting da ToT (r231296).
- È stata corretta la libreria libatomic in modo che non utilizzi
ifuncs
. (Numero 31) - Binutils
- Sono stati disattivati i messaggi informativi "È stato trovato e corretto l'errore 843419".
- È stata introdotta l'opzione
--long-plt
per correggere l'errore del linker interno che si verifica durante il collegamento di enormi file binari arm32. - Sono stati corretti gli stub di runtime errati per AArch64. Ciò causava il calcolo errato degli indirizzi di salto per i DSO di grandi dimensioni.
- È stata introdotta l'opzione predefinita
--no-apply-dynamic
per risolvere un bug del linker dinamico per le versioni precedenti di Android. - L'NDK r11 KI per
dynamic_cast
non funziona con Clang. Abbiamo corretto x86,stlport_static
e l'ottimizzazione. - GDB
- Aggiornato a GDB 7.11. Per ulteriori informazioni, consulta la pagina GDB News.
- Correzioni di alcuni bug per
ndk-gdb.py
. - Problemi noti
- x86 ASAN ancora non funziona. Per ulteriori informazioni, consulta la discussione in questo elenco delle modifiche.
- L'annullamento delle eccezioni con
c++_shared
non funziona ancora per ARM su Android 2.3 (livello API 9) o Android 4.0 (livello API 14). - Le intestazioni e le librerie Bionic per Android 6.0 (livello API 23) e Android 7.0 (livello API 24) non sono ancora esposte nonostante la presenza di android-24. Queste piattaforme sono ancora le intestazioni e le librerie di Android 5.0 (livello API 21) (non una regressione dalla versione r11).
- Gli strumenti RenderScript non sono presenti (non si tratta di una regressione dalla revisione 11). (Problema 7)
- Questo changelog non ha lo scopo di essere un elenco completo di tutti i bug in sospeso.
__thread
dovrebbe funzionare davvero questa volta.
Android NDK r12 (giugno 2016)
- I download
- I download per questa release sono archiviati qui.
- Annunci
- Il comando
ndk-build
utilizzerà Clang per impostazione predefinita in una release futura. GCC verrà rimosso in una release futura. - Lo script
make-standalone-toolchain.sh
verrà rimosso in una release futura. Se utilizzi questo script, pianifica la migrazione amake_standalone_toolchain.py
il prima possibile. - NDK
- È stato rimosso il supporto per l'ABI armeabi-v7a-hard. Consulta la spiegazione nella documentazione.
- Sono state rimosse tutte le sysroot per i livelli della piattaforma precedenti ad Android 2.3 (livello API 9). Abbiamo interrotto il supporto per questi elementi in NDK r11, ma non li abbiamo rimossi.
- Gestione delle eccezioni aggiornata quando si utilizza c++_shared su ARM32, in modo che funzioni per la maggior parte (vedi Problemi noti). L'unwinder ora è collegato a ogni oggetto collegato anziché a libc++.
- Sono stati eliminati i flag del compilatore predefiniti (NDK Issue 27). Puoi visualizzare i dettagli di questo aggiornamento nella modifica 207721.
- È stata aggiunta un'implementazione Python di toolchain autonome in
build/tools/make_standalone_toolchain.py
. Su Windows, non è più necessario Cygwin per utilizzare questa funzionalità. Tieni presente che la variante bash verrà rimossa in una release futura, quindi testa subito la nuova. - Le build di debug di Clang configurate hanno l'opzione
-fno-limit-debug-info
attivata per impostazione predefinita. Questa modifica consente un debug migliore con LLDB. - È stata attivata l'opzione
--build-id
per impostazione predefinita. Questa opzione fa sì che un identificatore venga mostrato nei report sugli arresti anomali nativi in modo da poter identificare facilmente la versione del codice in esecuzione. - È stato risolto il problema relativo a
NDK_USE_CYGPATH
, che non causa più problemi con libgcc (Issue 195486). - Sono state attivate le seguenti opzioni come predefinite:
-Wl,--warn-shared-textrel
e-Wl,--fatal-warnings
. Se hai condiviso le rilocazioni di testo, la tua app non viene caricata su Android 6.0 (livello API 23) e versioni successive. Tieni presente che questa configurazione non è mai stata consentita per le app a 64 bit. - Sono stati risolti alcuni problemi in modo che le intestazioni precompilate funzionino meglio (NDK Issue 14, NDK Issue 16).
- Sono state rimosse le librerie STL ARM (non thumb) non raggiungibili.
- È stato aggiunto il supporto di Vulkan ad android-24.
- Aggiunta dell'API Choreographer ad android-24.
- Sono state aggiunte API libcamera2 per i dispositivi che supportano il livello di funzionalità
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o versioni successive. Per ulteriori informazioni, consulta il riferimentoCameraCharacteristics
. - Clang
- Clang è stato aggiornato alla versione 3.8svn (r256229, build 2812033). I file eseguibili
clang.exe
eclang++.exe
nel pacchetto Windows a 32 bit sono in realtà a 64 bit. L'eseguibile a 32 bit si chiamaclang_32.exe
. - È stato corretto il problema
__thread
, quindi questa volta dovrebbe funzionare. - GCC
- È stato sincronizzato il compilatore con ChromeOS GCC @ google/gcc-4_9 r227810.
- Patch di sanificazione della copertura di backporting da ToT (r231296).
- È stato corretto
libatomic
in modo che non utilizzi ifuncs (NDK Issue 31). - Binutils
- Sono stati disattivati i messaggi informativi "Erratum 843419 found and fixed".
- È stata introdotta l'opzione
--long-plt
per correggere un errore interno del linker durante il collegamento di enormi file binari arm32. - Sono stati corretti gli stub di runtime errati per
AArch64
. Questo problema causava il calcolo errato degli indirizzi di salto per oggetti condivisi dinamici (DSO) molto grandi. - È stata introdotta l'opzione predefinita
--no-apply-dynamic
per risolvere un bug del linker dinamico per le versioni precedenti di Android. - È stato risolto un problema noto con NDK r11 in cui
dynamic_cast
non funzionava con Clang, x86, stlport_static e l'ottimizzazione. - GDB
- Aggiornato a GDB versione 7.11. Per saperne di più su questa release, consulta GDB News.
- Sono stati corretti diversi bug nello script
ndk-gdb.py
. - Problemi noti
- Al momento, l'Address Sanitizer (ASAN) x86 non funziona. Per ulteriori informazioni, vedi Problema 186276.
- L'annullamento dell'eccezione con
c++_shared
non funziona per ARM su Android 2.3 (livello API 9) o Android 4.0 (livello API 14). - Le intestazioni e le librerie Bionic per Android 6.0 (livello API 23) e versioni successive non sono ancora esposte nonostante la presenza di android-24. Queste piattaforme hanno ancora le intestazioni e le librerie di Android 5.0 (livello API 21), il che è coerente con NDK r11.
- Gli strumenti RenderScript non sono presenti, il che è coerente con NDK r11. (NDK Issue 7)
- Nel file di intestazione
NdkCameraMetadataTags.h
, il valore enum del tag dei metadati della videocameraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
è stato elencato per errore e verrà rimosso nella prossima release. Utilizza invece il valoreACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (marzo 2016)
- Modifiche
- Sono state applicate ulteriori correzioni allo script
ndk-gdb.py
. - È stato aggiunto un argomento facoltativo per il nome del pacchetto all'opzione
ndk-gdb
del comando--attach
. (Problema 13) - Sono stati corretti i percorsi della toolchain non validi per la piattaforma Windows a 32 bit. (numero 45)
- È stato corretto il percorso relativo per il comando
ndk-which
. (numero 29) - È stato corretto l'utilizzo di cygpath per il compilatore libgcc. (Android Issue 195486)
Android NDK r11b (marzo 2016)
- NDK
-
- Annunci importanti
- Abbiamo spostato il nostro bug tracker su GitHub.
- Modifiche
ndk-gdb.py
è stato corretto. È regredito completamente nella versione r11.ndk-gdb
per Mac è stato risolto.- Sono state aggiunte altre scorciatoie di primo livello per gli strumenti a riga di comando:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. Questo comando era completamente assente dalle versioni precedenti.
- Sono state corrette le toolchain autonome per libc++, che mancavano
__cxxabi_config.h
. - È stata corretta la documentazione di assistenza per
--toolchain
inmake-standalone-toolchain.sh
.
- Annunci importanti
- Clang
-
- Errata
- Contrariamente a quanto riportato nelle note di rilascio della versione r11,
__thread
non funziona. Ciò è dovuto al fatto che la versione di Clang che forniamo non include una correzione di bug per il supporto TLS emulato.
Android NDK r11 (marzo 2016)
- Clang
-
- Annunci importanti
- Ti consigliamo vivamente di passare a Clang.
- Se riscontri problemi con Clang, segnala bug qui per problemi specifici di Clang nell'NDK. Per problemi più generali di Clang, segnala bug seguendo le istruzioni riportate in questa pagina.
- Clang è stato aggiornato alla versione 3.8svn (r243773, build 2481030).
- Questa versione è una versione Clang upstream quasi pura.
- Il pacchetto NDK scaricabile a 64 bit per Windows contiene una versione a 32 bit di Clang.
- Ti consigliamo vivamente di passare a Clang.
- Aggiunte
- Clang ora supporta TLS emulato.
- Il compilatore ora supporta
__thread
emulando TLS ELF con dati specifici del thread pthread. - C++11
thread_local
funziona in alcuni casi, ma non per i dati con distruttori non banali, perché questi casi richiedono il supporto di libc. Questa limitazione non si applica quando viene eseguito su Android 6.0 (livello API 23) o versioni successive. - L'emulazione TLS non funziona ancora con Aarch64 quando si accede alle variabili TLS da una libreria condivisa.
- Il compilatore ora supporta
- Clang ora supporta TLS emulato.
- Annunci importanti
- GCC
-
- Annunci importanti
- GCC nell'NDK è ora deprecato a favore di Clang.
- L'NDK non verrà aggiornato alla versione 5.x e non accetterà backport non critici.
- La manutenzione per errori di compilazione e errori interni del compilatore nella versione 4.9 verrà gestita caso per caso.
- Rimozioni
- Rimozione di GCC 4.8. Tutti i target ora utilizzano GCC 4.9.
- Altre modifiche
- Sincronizzazione di google/gcc-4_9 con r224707. In precedenza, era stato sincronizzato con r214835.
- NDK
-
- Annunci importanti
- Gli esempi non sono più inclusi nel pacchetto NDK. Sono invece disponibili su GitHub.
- La documentazione non è più inclusa nel pacchetto NDK. ma sul sito web per sviluppatori Android.
- Aggiunte
- È stata aggiunta un'API di tracciamento nativa a
android-23
. - È stata aggiunta un'API multirete nativa a
android-23
. - Sono state abilitate le librerie libc, m e dl per fornire simboli con controllo delle versioni, a partire dal livello API 21.
- Sono stati aggiunti l'intestazione e la libreria Vulkan al livello API N.
- È stata aggiunta un'API di tracciamento nativa a
- Rimozioni
- Supporto rimosso per
_WCHAR_IS_8BIT
. - Rimossa sed.
- Rimozione di mclinker.
- Perl rimosso.
- Sono stati rimossi da tutte le versioni di NDK libc, m e dl tutti i simboli che le versioni della piattaforma di queste librerie non supportano.
- Supporto parzialmente rimosso per mips64r2. Il resto verrà rimosso in futuro.
- Supporto rimosso per
- Altre modifiche
- Le toolchain autonome ARM sono state modificate in modo che utilizzino arm7 per impostazione predefinita.
- Puoi ripristinare il vecchio comportamento specificando l'opzione
-target
comearmv5te-linux-androideabi
.
- Puoi ripristinare il vecchio comportamento specificando l'opzione
- È stato modificato il sistema di compilazione in modo che utilizzi
-isystem
per le inclusioni della piattaforma.- Gli avvisi che causano problemi di compatibilità con Bionic non interrompono più le build delle app.
- È stato corretto un errore di segmentazione che si verificava quando un binario generava eccezioni tramite gabi++. (Problema 179410)
- Lo spazio dei nomi inline di libc++ è stato modificato in
std::__ndk1
per evitare problemi di ODR con libc++ della piattaforma. - Tutte le librerie libc++ sono ora create con libc++abi.
- È stato aumentato il valore predefinito di
APP_PLATFORM
a Gingerbread.- Il supporto per Froyo e versioni precedenti verrà interrotto in una release futura.
- Le toolchain autonome ARM sono state modificate in modo che utilizzino arm7 per impostazione predefinita.
- Struttura gabi++
_Unwind_Exception
aggiornata per 64 bit. - Sono state aggiunte le seguenti funzionalità a cpufeatures:
- Rileva SSE4.1 e SSE4.2.
- Rileva le funzionalità della CPU su x86_64.
- Aggiornamento di libc++abi alla versione upstream r231075.
- Aggiornamento di
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
euchar.h
da ToT Bionic. sys/cdefs.h
sincronizzato su tutti i livelli API.- Corretto
fegetenv and fesetenv
per il braccio. - Correggi le dimensioni/l'allineamento del puntatore finale di
crtend_*
per mips64 e x86_64.
- Annunci importanti
- Binutils
-
- Aggiunte
- È stata aggiunta una nuova opzione:
--pic-veneer
.
- È stata aggiunta una nuova opzione:
- Rimozioni
- Il pacchetto Windows a 32 bit non contiene più ld.gold. In alternativa, puoi ottenere ld.gold dal pacchetto Windows a 64 bit.
- Modifiche
- Origine binutils unificata tra Android e ChromiumOS. Per ulteriori informazioni su questa modifica, consulta i commenti qui.
- Maggiore affidabilità di Gold per aarch64. Utilizza
-fuse-ld=gold
in fase di collegamento per utilizzare gold anziché bfd. Il comportamento predefinito verrà probabilmente modificato nella prossima release. - Miglioramento del tempo di collegamento per i file binari di grandi dimensioni per il backend Gold ARM (riduzione fino al 50% del tempo di collegamento per il browser Chrome eseguibile in modalità di debug).
- Aggiunte
- GDB
-
- Rimozioni
- Rimozione di ndk-gdb a favore di ndk-gdb.py.
- Modifiche
- Aggiornato gdb alla versione 7.10.
- Rendimento migliorato.
- Messaggi di errore migliorati.
- Percorsi relativi del progetto corretti.
- È stato impedito a Ctrl+C di terminare gdbserver in background.
- Supporto di Windows migliorato.
- Rimozioni
- YASM
-
- Modifiche
- Aggiornato YASM alla versione 1.3.0.
- Modifiche
- Problemi noti
-
- x86 ASAN non funziona al momento. Per saperne di più, consulta la discussione qui.
- La combinazione di Clang, x86, stlport_static e livelli di ottimizzazione superiori a
-O0
causa errori di test condynamic_cast
. Per ulteriori informazioni, consulta i commenti qui. - La gestione delle eccezioni spesso non riesce con c++_shared su ARM32. La causa principale è l'incompatibilità tra l'unwinder LLVM utilizzato da libc++abi per ARM32 e libgcc. Questo comportamento non è una regressione rispetto alla versione r10e.
Android NDK r10e (maggio 2015)
- I download
- I download per questa release sono archiviati qui.
- Modifiche importanti:
-
- È stata integrata la soluzione alternativa per l'errata corrige 843419 di Cortex-A53 nel linker
aarch64-linux-android-4.9
. Per ulteriori informazioni su questa soluzione alternativa, vedi Soluzione alternativa per l'errata 843419 di cortex-a53. - È stato aggiunto Clang 3.6;
NDK_TOOLCHAIN_VERSION=clang
ora sceglie questa versione di Clang per impostazione predefinita. - Rimozione di Clang 3.4.
- GCC 4.6 è stato rimosso.
- È stato implementato il supporto multithreading in
ld.gold
per tutte le architetture. Ora può essere collegato con o senza supporto multithreading; l'impostazione predefinita è senza.- Per la compilazione multithreading, utilizza l'opzione
--threads
. - Per compilare senza multithreading, utilizza l'opzione
--no-threads
.
- Per la compilazione multithreading, utilizza l'opzione
- È stato eseguito l'upgrade di GDB/gdbserver alla versione 7.7 per tutte le architetture.
- È stato rimosso il pacchetto NDK per Darwin a 32 bit.
- È stata integrata la soluzione alternativa per l'errata corrige 843419 di Cortex-A53 nel linker
- Correzioni di bug importanti:
-
- È stato risolto un arresto anomalo che si verificava quando erano presenti loop OpenMP al di fuori del thread principale.
- È stato corretto un errore interno del compilatore GCC 4.9 (ICE) che si verificava quando l'utente dichiarava
#pragma GCC optimize ("O0")
, ma aveva specificato un livello di ottimizzazione diverso nella riga di comando.pragma
ha la precedenza. - È stato corretto un errore che causava un arresto anomalo con il seguente messaggio di errore:
in add_stores, at var-tracking.c:6000
- È stata implementata una soluzione alternativa per un problema di Clang 3.5 in cui la vettorizzazione automatica LLVM
genera
llvm.cttz.v2i64()
, un'istruzione senza controparte nel set di istruzioni ARM.
- Altre correzioni di bug:
-
- Sono state apportate le seguenti correzioni a intestazioni e librerie:
- Corretto
PROPERTY_*
inmedia/NdkMediaDrm.h
. - Correzione di
sys/ucontext.h
permips64
. - È stato eliminato il controllo della versione di Clang per
__builtin_isnan
e__builtin_isinf
. - Aggiunta di
android-21/arch-mips/usr/include/asm/reg.h
eandroid-21/arch-mips64/usr/include/asm/reg.h
. - È stato corretto un avviso spurio sui limiti dell'array prodotto da GCC 4.9 per x86 ed è stato riattivato l'avviso sui limiti dell'array prodotto da GCC 4.9 per ARM. L'avviso per ARM era stato disattivato in precedenza senza condizioni.
- È stato corretto Clang 3.5 per
mips
emips64
per creare una sezione.gcc_except_table
scrivibile, in modo da corrispondere al comportamento di GCC. Questa modifica ti consente di evitare il seguente avviso del linker:.../ld: warning: creating a DT_TEXTREL in a shared object
- È stato eseguito il backporting di una correzione per i problemi di
compiler-rt
che causavano arresti anomali quando Clang compilava permips64
. Per maggiori informazioni, consulta il problema LLVM 20098. - Sono stati corretti gli arresti anomali di Clang 3.5 che si verificavano nei commenti non ASCII. (Problema 81440)
- È stato corretto il valore
stlport collate::compare
per restituire-1
e1
. In precedenza, restituiva numeri con segno arbitrari. - È stato corretto un problema relativo a
ndk-gdb
per le ABI a 64 bit. (Problema 118300) - È stato corretto l'arresto anomalo che l'esempio HelloComputeNDK per RenderScript produceva su Android 4.4 (livello API Android 19). Per saperne di più, consulta questa pagina.
- È stato corretto
libc++ __wrap_iter
per GCC. Per ulteriori informazioni, consulta il problema LLVM 22355. - È stato corretto il supporto di
.asm
per l'interfaccia ABIx86_64
. - È stata implementata una soluzione alternativa per il problema
stlport
di GCC 4.8. (Problema 127773) - È stato rimosso il separatore di directory finale
\\
dal percorso del progetto in Windows. (Problema 160584) - È stato corretto un errore
no rule to make target
che si verificava durante la compilazione di un singolo file.c
eseguendo il comandondk-build.cmd
dagradle
. (Problema 66937) - Sono state aggiunte le librerie
libatomic.a
elibgomp.a
che mancavano nelle seguenti toolchain host:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Altre modifiche:
-
- Aggiunta di
ld.gold
peraarch64
. Il linker predefinito rimaneld.bfd
. Per attivare esplicitamenteld.gold
, aggiungi-fuse-ld=gold
alla variabileLOCAL_LDFLAGS
oAPP_LDFLAGS
. - Sono state create le toolchain MIPS e MIPS64 con
binutils-2.25
, che offre un supporto R6 migliorato. -fstandalone-debug
(informazioni di debug complete) è diventata un'opzione predefinita per Clang.-fstack-protector
è stato sostituito con-fstack-protector-strong
per le toolchain ARM, AArch64, X86 e X86_64 per GCC 4.9, Clang 3.5 e Clang 3.6.- Aggiunto l'opzione della riga di comando
--package
andk-gdb
per consentire al sistema di build di ignorare il nome del pacchetto. (Problema 56189) -
-mno-ldc1-stc1
deprecato per MIPS. Questa opzione potrebbe non funzionare con le nuove opzioni-fpxx
e-mno-odd-spreg
o con l'ABI FPXX. - Aggiunta del rilevamento MIPS MSA e R6 a
cpu-features
.
- Aggiunta di
Android NDK r10d (dicembre 2014)
- Modifiche importanti:
-
- GCC 4.8 è diventato il compilatore predefinito per tutte le ABI a 32 bit. GCC 4.6 è stato ritirato e
verrà rimosso nella prossima release. Per ripristinare il comportamento precedente, aggiungi
NDK_TOOLCHAIN_VERSION=4.6
a ndk-build oppure aggiungi--toolchain=arm-linux-androideabi-4.6
quando eseguimake-standalone-toolchain.sh
dalla riga di comando. GCC 4.9 rimane l'impostazione predefinita per le ABI a 64 bit. - È stato impedito a tutte le toolchain x86[_64] di aggiungere
-mstackrealign
per impostazione predefinita. La toolchain NDK presuppone un allineamento dello stack di 16 byte. Gli strumenti e le opzioni utilizzati per impostazione predefinita applicano questa regola. Un utente che scrive codice assembly deve assicurarsi di preservare l'allineamento dello stack e garantire che anche gli altri compilatori rispettino questa regola. (Bug GCC 38496) - È stata aggiunta la funzionalità Address Sanitizer al supporto di Clang 3.5 per le ABI ARM e x86. Per ulteriori informazioni su questa modifica, consulta il progetto Address Sanitizer.
- A partire dal livello API 21, è stato introdotto il requisito di utilizzare
-fPIE -pie
durante la compilazione. Nei livelli API 16 e successivi, ndk-build utilizzaPIE
durante la compilazione. Questa modifica ha una serie di implicazioni, discusse in Developer Preview Issue 888. Queste implicazioni non si applicano alle librerie condivise.
- GCC 4.8 è diventato il compilatore predefinito per tutte le ABI a 32 bit. GCC 4.6 è stato ritirato e
verrà rimosso nella prossima release. Per ripristinare il comportamento precedente, aggiungi
- Correzioni di bug importanti:
-
- Sono state apportate ulteriori correzioni relative a
A53 Errata #835769 nel linker aarch64-linux-android-4.9. Nell'ambito di questa operazione, GCC
trasmette una nuova opzione,
--fix-cortex-a53-835769
, quando viene specificato-mfix-cortex-a53-835769
(abilitato per impostazione predefinita). Per ulteriori informazioni, consulta questo messaggio binutils e questo messaggio binutils. - È stata documentata una correzione a un blocco di libc++
sscanf/vsscanf
verificatosi nel livello API 21. La correzione è stata implementata nella versione r10c. (Problema 77988) - È stato corretto un arresto anomalo di AutoFDO (
-fauto-profile
) che si verificava con GCC 4.9 quando era specificato-Os
. (Problema 77571)
- Sono state apportate ulteriori correzioni relative a
A53 Errata #835769 nel linker aarch64-linux-android-4.9. Nell'ambito di questa operazione, GCC
trasmette una nuova opzione,
- Altre correzioni di bug:
-
- Sono state apportate le seguenti correzioni a intestazioni e librerie:
- Aggiunta di
posix_memalign
al livello API 16. Inoltre, è stato aggiunto un prototipo instdlib.h
ai livelli API da 16 a 19. (Problema 77861) - È stato corretto
stdatomic.h
in modo che includa<atomic>
solo per C++11. - Sono state modificate le seguenti intestazioni per l'utilizzo autonomo:
sys/user.h
egl2ext.h
,dlext.h
,fts.h
,sgidefs.h
per il livello API 21. - Modificato
sys/user.h
per rinominaremxcsr_mask
comemxcr_mask
, e per modificare il tipo di dati peru_ar0
da - Il tipo di valore restituito di
sysconf()
è stato modificato daint
along
. - È stato corretto il modo in cui ndk-build gestisce
thumb
perLOCAL_ARM_MODE
: in r10d, ndk-build aggiungeLOCAL_LDFLAGS+=-mthumb
per impostazione predefinita, a meno che non si verifichi una delle seguenti condizioni: - Hai impostato
LOCAL_ARM_MODE
uguale aarm
. - Stai eseguendo una build di debug (con impostazioni come
APP_OPTIM=debug
eAndroidManifest.xml
contenentiandroid:debuggable="true"
), in cui la modalità ARM è quella predefinita per mantenere la compatibilità con le toolchain precedenti. (Problema 74040) - È stato corretto
LOCAL_SRC_FILES
in ndk-build per utilizzare i percorsi assoluti di Windows. (Problema 74333) - È stato rimosso il codice specifico di bash da ndk-gdb. (Problema 73338)
- Rimosso il codice specifico di Bash da
make-standalone-toolchain.sh
. (Problema 74145) - È stata rivista la documentazione relativa a una correzione per le dipendenze transitive di
System.loadLibrary()
. (Problema 41790) - Risolto un problema che impediva l'estrazione dei pacchetti a 64 bit su Ubuntu 14.04 e OS X 10.10 (Yosemite). (Problema 78148)
- Risolto un problema relativo a
LOCAL_PCH
per migliorare il supporto di Clang. (Problema 77575) - È stato chiarito l'avviso "richiede stack eseguibile" di ld.gold. (Problema 79115)
unsigned long
a struct user_regs_struct*.
Android NDK r10c (ottobre 2014)
- Modifiche importanti:
-
- Sono state apportate le seguenti modifiche alla struttura di download:
- Ogni pacchetto ora contiene intestazioni, librerie e strumenti a 32 e 64 bit per la rispettiva piattaforma.
- Le librerie STL con informazioni di debug non devono più essere scaricate separatamente.
- Tutto ciò che in precedenza era chiamato
Android-L
è stato modificato con la denominazione ufficiale della release:android-21
. - GCC 4.9 è stato aggiornato eseguendo il rebase sul ramo
google
del repository GCC. Le principali differenze rispetto alla versione upstream di GCC 4.9 includono: - L'opzione
-O2
ora attiva la vettorizzazione, senza lo srotolamento del ciclo, ma con uno srotolamento più aggressivo. - Miglioramenti di FDO e LIPO
- È stato aggiunto il supporto di Clang 3.5 a tutti gli host:
NDK_TOOLCHAIN_VERSION=clang
ora sceglie Clang 3.5. Tieni presente che: - ARM e x86 utilizzano per impostazione predefinita l'assembler integrato. Se questo causa problemi, utilizza
-fno-integrated-as
come soluzione alternativa. - Clang 3.5 genera più avvisi per i flag inutilizzati, ad esempio l'opzione
-finline-functions
supportata da GCC. - È stato reso possibile l'inserimento della modalità di debug ART durante il debug su un dispositivo Android 5.0 utilizzando
ART come macchina virtuale, specificando l'opzione
art-on
. Per ulteriori informazioni, vediprebuilt/common/gdb/common.setup
nella directory contenente l'NDK. - È stato rimosso il supporto per Clang 3.3.
- È stato ritirato GCC 4.6, che potrebbe essere rimosso dalle release future.
- Aggiornamento di mclinker alla versione 2.8 con supporto di Identical Code Folding ("ICF"). Specifica ICF utilizzando l'opzione
--icf
. - Supporto
arm_neon.h
ampliato in x86 e x86_64, con una copertura di circa il 93% degli intrinseci NEON. Per ulteriori informazioni sull'assistenza NEON:- Vai alla Guida per i programmatori NDK (
docs/Programmers_Guide/html/
) e consulta Architetture e CPU > Neon. - Esamina l'esempio
hello-neon
aggiornato insamples/
. - Consulta la guida di Intel al porting da ARM NEON a Intel SSE.
- Vai alla Guida per i programmatori NDK (
- Supporto documentato per
_FORTIFY_SOURCE
inheaders/libs/android-21
, che è apparso nella revisione 10 (quandoandroid-21
si chiamava ancoraAndroid-L
), ma non aveva documentazione.
Per informazioni più dettagliate, vedi Correzioni di bug importanti di seguito.
Quando esegui la migrazione da progetti che utilizzano GCC, puoi utilizzare
-Wno-invalid-command-line-argument
e-Wno-unused-command-line-argument
per ignorare i flag inutilizzati finché non decidi cosa farne a lungo termine. - Correzioni di bug importanti:
-
- È stato corretto un errore interno del compilatore con GCC4.9/aarch64 che causava il seguente messaggio di errore (problema 77564):
- È stata corretta la generazione di codice errato da GCC4.9/arm. (Issue 77567)
- È stato corretto un errore interno del compilatore con GCC4.9/mips che coinvolge l'assembly in linea. (Problema 77568)
- È stato corretto il codice errato che GCC4.9/arm generava per
x = (cond) ? y : x
. (Problema 77569) - GCC4.9/aarch64 e Clang3.5/aarch64 corretti per aggirare l'
erratum Cortex-A53 (835769) per impostazione predefinita. Disattiva la soluzione alternativa specificando
-mno-fix-cortex-a53-835769
.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Altre correzioni di bug:
-
- Sono state apportate le seguenti correzioni all'intestazione e alla libreria di
android-21
:- Aggiunti altri codici tasti TV:
android/keycodes.h
- Sono state aggiunte altre costanti e sei nuove funzioni del sensore a
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
eASensor_isWakeUpSensor
. - È stato corretto
stdatomic.h
per migliorare la compatibilità con GCC 4.6 e fornire supporto per l'intestazione<atomic>
. - Sono stati aggiunti
sys/ucontext.h
esys/user.h
a tutti i livelli API. L'intestazionesignal.h
ora include<sys/ucontext.h>
. Puoi rimuovere qualsiasi definizione esistente distruct ucontext
. - È stato aggiunto
posix_memalign
ai livelli API 17, 18 e 19. - Sono state aggiunte le seguenti funzioni a tutte le architetture:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - Sono state aggiunte le autorizzazioni richieste all'esempio
native-media/AndroidManifest.xml
. (Problema 106640) - Sono stati aggiunti
clock_nanosleep
eclock_settime
al livello API 21. (Problema 77372) - Abbiamo rimosso i seguenti simboli da tutte le architetture:
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
. - Sono state rimosse le seguenti funzioni dalle architetture a 64 bit:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - È stata rimossa la seguente funzione dalle architetture a 32 bit:
__signalfd4
. - È stato modificato il tipo del terzo argomento da
size_t
aint
nelle seguenti funzioni:strtoll_l
,strtoull_l
,wcstoll_l
ewcstoull_l
. - Sono state ripristinate le seguenti funzioni nell'architettura a 64 bit:
arc4random
,arc4random_buf
earc4random_uniform
. - Gli operatori
cxa_*
,new
edelete
sono stati spostati di nuovo inlibstdc++.so
. Questa modifica ripristina il comportamento di r9d; le versioni precedenti di r10 contenevano file segnaposto.
- Aggiunti altri codici tasti TV:
- Ripristino del supporto MXU in GCC 4.8 e 4.9 per mips. Questo supporto era assente da r10 e r10b perché queste versioni di GCC erano state compilate con binutils-2.24, che non supportava MXU. Ora sì.
- È stato corretto
--toolchain=
inmake-standalone-toolchain.sh
in modo che ora supporti correttamente l'utilizzo di un suffisso che specifica una versione di Clang. - Sono state corrette le funzioni libc++/armeabi
strtod()
. - Sono state apportate correzioni alla documentazione NDK in
docs/
.
- Sono state apportate le seguenti correzioni all'intestazione e alla libreria di
- Altre modifiche:
-
cpu-features
migliorato per rilevare il supporto di ARMv8 per i seguenti set di istruzioni: AES, CRC32, SHA2, SHA1 e PMULL/PMULL2 a 64 bit. (Problema 106360)- È stato modificato ndk-build per utilizzare
*-gcc-ar
, disponibile in GCC 4.8, GCC 4.9 e Clang. Clang lo specifica, invece di*-ar
. Questa impostazione offre un supporto LTO migliorato. - Sono state rimosse le intestazioni
include-fixed/linux/a.out.h
einclude-fixed/linux/compiler.h
dal compilatore GCC. (Problema 73728) - Risolto un problema relativo a
-flto
con GCC 4.8 su Mac OS X. Il messaggio di errore diceva: - È stato corretto un errore di battitura in
build-binary.mk.
(problema 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Problemi noti importanti:
-
- La specifica di -Os (
-fauto-profile
) in GCC4.9 potrebbe causare arresti anomali. (Problema 77571)
- La specifica di -Os (
Android NDK r10b (settembre 2014)
- Note importanti:
-
- A causa della limitazione di 512 MB per i pacchetti scaricabili, i seguenti elementi a 32 bit non sono inclusi nei pacchetti di download dell'NDK a 32 bit. ma risiedono in quelli a 64 bit:
- Intestazioni Android-L
- GCC 4.9
- Al momento, l'unico supporto Renderscript fornito dall'NDK è per Renderscript a 32 bit con Android 4.4 (livello API 19). Non puoi creare HelloComputeNDK (l'unico esempio di Renderscript) con qualsiasi altra combinazione di Renderscript (32 o 64 bit) e versione di Android.
- Per compilare native-codec, devi utilizzare un pacchetto NDK a 64 bit, in cui si trovano tutte le intestazioni Android-L.
- Correzioni di bug importanti:
- Altre correzioni di bug:
-
stdio.h
è stato rimosso dalle directoryinclude-fixed/
di tutte le versioni di GCC. (Problema 73728.)- Sono stati rimossi i file di intestazione duplicati dai pacchetti Windows nelle directory
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (Problema 73704). - Risolto un problema che impediva a Clang di creare HelloComputeNDK.
- È stato corretto atexit. (Problema 66595.)
- Sono state apportate varie correzioni alla documentazione in
docs/
esources/third_party/googletest/README.NDK
. (Problema 74069.) - Sono state apportate le seguenti correzioni alle intestazioni Android-L:
- Sono state aggiunte le seguenti funzioni 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 funzioni*_l()
. cmsg_nxthdr
rinominato in__cmsg_nxthdr
.__libc_malloc_dispatch
rimosso.- Modificato il prototipo
ptrace()
inlong ptrace(int, ...);
. sha1.h
rimosso.- Esteso fino al giorno
android_dlextinfo
del meseandroid/dlext.h
. __NDK_FPABI__
annotato per le funzioni che ricevono o restituiscono valori di tipo float o double instdlib.h
,time.h
,wchar.h
ecomplex.h
.
- Altre modifiche:
-
mipsel-linux-android-4.9
emips64el-linux-android-4.9
aggiornati, con l'implementazione di un nuovo layout della directory multilib e il supporto di gdb-7.7cpu-features
avanzato per rilevare più funzionalità arm64. (Elenco delle modifiche 100339.)
Android NDK r10 (luglio 2014)
- Modifiche importanti:
-
- Sono state aggiunte tre nuove ABI, tutte a 64 bit: arm64-v8a, x86_64 e mips64. Tieni presente che:
- GCC 4.9 è il compilatore predefinito per le ABI a 64 bit. Clang è attualmente alla versione 3.4.
NDK_TOOLCHAIN_VERSION=clang
potrebbe non funzionare per arm64-v8a e mips64. - Android-L è il primo livello con supporto a 64 bit. Tieni presente che questo livello API è temporaneo e solo per l'anteprima L. Un numero di livello API effettivo lo sostituirà nella release L.
- Questa release ora include le impostazioni
all32
eall64
perAPP_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
seleziona tutte le ABI.
- La nuova GNU libstdc++ in Android-L contiene tutte le
<tr1/cmath>
Prima di definire una funzione matematica personalizzata, controlla_GLIBCXX_USE_C99_MATH_TR1
per verificare se esiste già una funzione con quel nome, in modo da evitare errori di "definizione multipla" del linker. - La libreria cpu-features è stata aggiornata per il kernel ARMv8. La libreria cpu-features esistente potrebbe non rilevare la presenza di NEON sulla piattaforma ARMv8. Ricompila il codice con la nuova versione.
- È stata aggiunta una nuova directory API
platforms/android-L/
. Il servizio include: - Intestazioni Bionic aggiornate, che non erano cambiate dai livelli API Android 3 (Cupcake) a 19 (KitKat). Questa nuova versione, per il livello L, deve essere sincronizzata con AOSP.
- Nuove API multimediali e un esempio di codec nativo.
- Un'intestazione
Android.h
aggiornata per SLES/OpenSLES, che consente il supporto del formato audio a virgola mobile a precisione singola in AudioPlayer. - Estensioni GLES 3.1 e AEP a
libGLESv3.so.
- Intestazioni GLES2 e GLES3 aggiornate alle versioni ufficiali più recenti di Khronos.
- Sono stati aggiunti compilatori GCC 4.9 alle ABI a 32/64 bit. GCC 4.9 è il compilatore predefinito (unico) per le ABI a 64 bit, come accennato in precedenza. Per le ABI a 32 bit, devi abilitare esplicitamente GCC 4.9, in quanto GCC 4.6 è ancora l'impostazione predefinita.
- Per ndk-build, attiva la compilazione a 32 bit GCC 4.9 aggiungendo
NDK_TOOLCHAIN_VERSION=4.9
aApplication.mk
o esportandolo come variabile di ambiente dalla riga di comando. - Per una toolchain autonoma, utilizza l'opzione
--toolchain=
nello scriptmake-standalone-toolchain.sh
. Ad esempio:--toolchain=arm-linux-androideabi-4.9.
- Upgrade di GDB alla versione 7.6 in GCC 4.8/4.9 e x86*. Poiché GDB è ancora alla versione GDB-7.3.x in
GCC 4.6 (il valore predefinito per ARM e MIPS), devi impostare
NDK_TOOLCHAIN_VERSION=4.8
o4.9
per consentire a ndk-gdb di selezionare GDB 7.6. - Aggiunta l'opzione di compilazione
-mssse3
per fornire il supporto SSSE3, che è diventata l'opzione predefinita per ABI x86 (aggiornamento da SSE3). L'immagine rilasciata da Google non contiene istruzioni SSSE3. - GCC aggiornato dalla versione 4.8 alla 4.8.3.
- Supporto EH libc++ ARM migliorato passando da gabi++ a libc++abi. Per maggiori dettagli, consulta la sezione "Supporto di C++" della documentazione. Tieni presente che:
- Tutti i test, tranne quello delle impostazioni internazionali, ora vengono superati per Clang 3.4 e GCC 4.8. Per saperne di più, consulta la sezione "Supporto di C++" della documentazione.
- Le librerie libc++ per X86 e MIPS libc++ utilizzano ancora gabi++.
- GCC 4.7 e versioni successive ora possono utilizzare <atomic>.
- Devi aggiungere
-fno-strict-aliasing
se utilizzi<list>
, perché__list_imp::_end
_ viola le regole TBAA. (Problema 61571.) - A partire da GCC 4.6, LIBCXX_FORCE_REBUILD:=true non ricompila più libc++. La ricompilazione richiede l'utilizzo di un compilatore diverso. Tieni presente che Clang 3.3 non è stato testato.
- mclinker è ora la versione 2.7 e supporta aarch64 Linux.
- Aggiunto il supporto delle intestazioni precompilate per le intestazioni specificate da
LOCAL_PCH
. (Problema 25412).
- Correzioni di bug importanti:
-
- È stato corretto libc++ in modo che ora compili
std::feof
e così via (problema 66668). - È stato corretto un richiamo alla libreria atomica Clang 3.3/3.4 che causava arresti anomali in alcuni test libc++ per l'ABI armeabi.
- Sono stati corretti gli arresti anomali di Clang 3.4 che si verificavano durante la lettura delle intestazioni precompilate. (Problema 66657).
- È stato corretto l'assert Clang 3.3/3.4
-O3
su: - È stato corretto il seguente arresto anomalo di Clang 3.3/3.4:
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). - È stato corretto libc++ in modo che ora compili
- Altre correzioni di bug:
-
- Intestazioni fisse:
- È stato corretto il valore
ssize_t
a 32 bit, che ora èint
anzichélong int
. - Sono stati corretti
WCHAR_MIN
eWCHAR_MAX
in modo che prendano segni appropriati in base all'architettura su cui vengono eseguiti: - X86/MIPS: firmato.
- ARM: non firmato.
- Per forzare l'impostazione predefinita di X86/MIPS su non firmato, utilizza
-D__WCHAR_UNSIGNED__
. - Per forzare
wchar_t
a 16 bit, utilizza-fshort-wchar
. - Sono stati rimossi simboli inesistenti da
libc.so
a 32 bit e sono stati aggiuntipread64
,pwrite64
,ftruncate64
per il livello API Android 12 e versioni successive. (Problema 69319). Per ulteriori informazioni, consulta il messaggio di commit che accompagna l'elenco delle modifiche AOSP 94137. - È stato corretto l'avviso GCC relativo alla ridefinizione di
putchar
. Il messaggio di avviso recita: - È stato corretto
make-standalone-toolchain.sh --stl=libc++
in modo che: - Copie
cxxabi.h
. (Problema 68001). - Viene eseguito in directory diverse da quella di installazione dell'NDK. (Problemi 67690 e 68647).
- Corretto GCC/Windows per citare gli argomenti solo quando necessario per generare processi in programmi esterni. Questa modifica riduce la probabilità di superare il limite di lunghezza di 32.000 caratteri.
- È stato risolto un problema che impediva di modificare la variabile di ambiente
APP_PLATFORM
. - È stata corretta l'implementazione di
IsSystemLibrary()
in crazy_linker in modo che utilizzistrrchr()
anzichéstrchr()
per trovare il nome base effettivo del percorso della libreria. - È stato risolto il problema di native-audio che non consentiva la compilazione in modalità di debug.
- È stato risolto il problema di gdb che non riusciva a stampare numeri in virgola mobile estremi. (Problema 69203).
- È stato risolto il problema di Clang 3.4 che non riusciva a compilare con
-Wl,-shared
(anziché-shared
, che non presentava problemi di compilazione). Il problema era che Clang aggiungeva-pie
per i target Android se non esistevano né-shared
né-static
. Questo comportamento, errato, ha fatto sì che il linker si lamentasse del fatto che-shared
e-pie
non potessero coesistere.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Elenco modifiche 91185). - Altre modifiche:
-
- È stato aggiunto
arm_neon.h
alla toolchain x86, che ora emula circa il 47% di Neon. Al momento non è disponibile il supporto per i tipi a 64 bit. Per ulteriori informazioni, consulta la sezione sul supporto delle funzioni intrinseche di ARM Neon nella documentazione x86. - Ottimizzazione ARM/GOT_PREL (presente in GCC 4.6 creato dal ramo google di GCC) trasferita a
ARM GCC 4.8/4.9. A volte questa ottimizzazione riduce il conteggio delle istruzioni durante l'accesso alle variabili globali. Ad esempio, vedi lo script build.sh in
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - È stata aggiunta la versione ARM per STL gabi++, stlport e libc++. Ora sono disponibili sia la modalità Thumb che quella ARM.
- Ora è possibile chiamare lo script make-standalone-toolchain.sh con
--toolchain=x86_64-linux-android-4.9
, che equivale a--toolchain=x86_64-4.9
.
- È stato aggiunto
Android NDK r9d (marzo 2014)
- Modifiche importanti:
-
- È stato aggiunto il supporto per il compilatore Clang 3.4. L'opzione
NDK_TOOLCHAIN_VERSION=clang
ora sceglie Clang 3.4. GCC 4.6 è ancora il compilatore predefinito. - Aggiunto
APP_ABI=armeabi-v7a-hard
, con l'opzione multilib aggiuntiva-mfloat-abi=hard
. Queste opzioni sono per l'utilizzo con ARM GCC 4.6/4.8 e Clang 3.3/3.4 (che utilizzano l'assembler, il linker e le librerie 4.8). Quando utilizzi queste opzioni, tieni presente le seguenti modifiche: - Quando esegui lo script
ndk-build
, aggiungi le seguenti opzioni per la destinazione armeabi-v7a: La libreria integrata viene copiata inTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
. Affinché make si comporti come previsto, non puoi specificare siaarmeabi-v7a
chearmeabi-v7a-hard
come target make (ovvero nella riga APP_ABI=). In questo modo, uno dei due viene ignorato. Tieni presente cheAPP_ABI=all
è ancora equivalente aarmeabi armeabi-v7a x86 mips
. - Lo script
make-standalone-toolchain.sh
copia librerie aggiuntive nelle directory/hard
. AggiungiCFLAGS
eLFLAGS
riportati sopra al tuo makefile per consentire a GCC o Clang di collegarsi a librerie in/hard
. - È stato aggiunto l'assembler yasm, nonché i flag
LOCAL_ASMFLAGS
eEXPORT_ASMFLAGS
per i target x86. Lo scriptndk-build
utilizzaprebuilts/*/bin/yasm*
per creareLOCAL_SRC_FILES
con l'estensione.asm
. - Aggiornamento di MClinker alla versione 2.6.0, che aggiunge il supporto di
-gc-sections
. - È stato aggiunto il supporto sperimentale di libc++ (upstream r201101). Per utilizzare questa nuova
funzionalità, segui questi passaggi:
- Aggiungi
APP_STL := c++_static
oAPP_STL := c++_shared
inApplication.mk
. Puoi ricompilare dall'origine tramiteLIBCXX_FORCE_REBUILD := true
- Esegui
make-standalone-toolchain.sh --stl=libc++
per creare una toolchain autonoma con intestazioni/libreria libc++.
CPLUSPLUS-SUPPORT.html
. (Problema 36496) - Aggiungi
- È stato aggiunto il supporto per il compilatore Clang 3.4. L'opzione
- Correzioni di bug importanti:
-
- È stato corretto un errore di generazione di un'eccezione imprevista per GCC 4.6/4.8 ARM EABI. (GCC Issue 59392)
- È stato corretto GCC 4.8 in modo che ora risolva correttamente la specializzazione parziale di un modello con un argomento del modello dipendente e non di tipo. (Problema GCC 59052)
- Sono stati aggiunti altri moduli a Python predefinito (problema 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
e_curses_panel
- Mac OS X:
- È stato corretto gdbserver x86 e MIPS
event_getmsg_helper
. - Sono stati risolti numerosi problemi nella toolchain NDK RenderScript, inclusi problemi di compatibilità tra dispositivi meno recenti e reflection C++.
- Altre correzioni di bug:
-
- Correzioni dell'intestazione:
- È stato corretto un
#include <sys/types.h>
mancante inandroid/asset_manager.h
per il livello API Android 13 e versioni successive. (Problema 64988) - È stato corretto un
#include
mancante inandroid/rect_manager.h
per il livello API Android 14 e versioni successive. - Aggiunta di
JNICALL
aJNI_OnLoad
eJNI_OnUnload
injni.h
. Tieni presente cheJNICALL
è definito come__NDK_FPABI__
. Per ulteriori informazioni, consultasys/cdefs.h
. - Sono state aggiornate le seguenti intestazioni in modo che possano essere incluse senza la necessità di includere manualmente le relative dipendenze (problema 64679):
- Aggiunta di
sys/cachectl.h
per tutte le architetture. Gli sviluppatori MIPS ora possono includere questa intestazione anziché scrivere#ifdef __mips__
. - È stato corretto
platforms/android-18/include/android/input.h
aggiungendo__NDK_FPABI__
alle funzioni che accettano o restituiscono valori float o double. - È stato corretto il valore MIPS
struct stat
, che era impostato in modo errato sulla sua controparte a 64 bit per il livello API Android 12 e versioni successive. Questa impostazione errata è una regressione introdotta nella release r9c. - Definito
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, e__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
per il livello API Android 9 e precedenti. - Sono stati aggiunti
scalbln
,scalblnf
escalblnl
a x86libm.so
per le API 18 e successive. - È stato corretto un errore di battitura in
sources/android/support/include/iconv.h
. (Problema 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- È stato corretto un
- È stato corretto gabi++
std::unexpected()
per chiamarestd::terminate()
in modo che un gestorestd::terminate()
definito dall'utente abbia la possibilità di essere eseguito. - È stato corretto gabi++ per rilevare
std::nullptr
. - Esempi fissi Teiera e Altre teiere:
- È stato risolto un problema con i chip Tegra 2 e 3 modificando le variabili speculari in modo che utilizzino la precisione media. Ora i valori della potenza speculare possono essere inferiori a 1,0.
- Sono stati modificati gli esempi in modo che la pressione del tasto del volume ripristini
la modalità immersiva e invalidi
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. La rotazione dello schermo non attivaonSystemUiVisibilityChange
e quindi non ripristina la modalità immersiva.
- È stato corretto lo script
ndk-build
per aggiungere-rpath-link=$SYSROOT/usr/lib
e-rpath-link=$TARGET_OUT
in modo da utilizzareld.bfd
per collegare gli eseguibili. (Problema 64266) -Bsymbolic
è stato rimosso da tutte le build STL.- È stato corretto
ndk-gdb-py.cmd
impostandoSHELL
come variabile di ambiente anziché passarla apython.exe
, che ignora l'impostazione. (Problema 63054) - È stato corretto lo script
make-standalone-toolchain.sh
in modo che l'opzione--stl=stlport
copi le intestazioni gabi++ anziché creare link simbolici; le shellcmd.exe
e MinGW non comprendono i link simbolici creati da cygwin.
- Correzioni dell'intestazione:
- Altre modifiche:
-
- Sono state applicate le autorizzazioni di esecuzione a tutti gli script
*cmd
precedentemente destinati all'uso solo nella shellcmd.exe
, nel caso in cui gli sviluppatori preferiscano utilizzarendk-build.cmd
in cygwin anziché lo scriptndk-build
consigliato. - Migliorata la velocità dello script
make-standalone-toolchain.sh
spostando anziché copiare se la directory di destinazione specificata non esiste.
- Sono state applicate le autorizzazioni di esecuzione a tutti gli script
Android NDK r9c (dicembre 2013)
Questa release include solo correzioni di bug.
- Correzioni di bug importanti:
-
- È stato risolto un problema con GCC 4.8 ARM, in cui il puntatore dello stack viene ripristinato troppo presto. Questo problema ha impedito al puntatore del frame di accedere in modo affidabile a una variabile nel frame dello stack. (Problema GCC 58854)
- Risolto un problema con GCC 4.8 libstdc++, in cui un bug in std::nth_element causava la generazione di codice che produceva un errore di segmentazione casuale. (Problema 62910)
- Corretto GCC 4.8 ICE in cc1/cc1plus con
-fuse-ld=mcld
, in modo che il seguente errore non si verifichi più:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- È stato corretto il supporto di
-mhard-float
per le funzioni matematiche__builtin
. Per informazioni continue sulle correzioni per-mhard-float
con STL, segui il problema 61784.
- Altre correzioni di bug:
-
- Correzioni dell'intestazione:
- Prototipo di
poll
cambiato inpoll(struct pollfd *, nfds_t, int);
inpoll.h
. - Aggiunta di
utimensat
alibc.so
per i livelli API 12 e 19 di Android. Queste librerie sono ora incluse per tutti i livelli API Android da 12 a 19. - È stato introdotto
futimens
inlibc.so
per l'API Android livello 19. - Sono stati aggiunti
clock_settime()
eclock_nanosleep()
mancanti atime.h
per il livello API Android 8 e versioni successive. - Aggiunti
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
eCLOCK_BOOTTIME_ALARM
intime.h.
- Rimozione di
CLOCK_REALTIME_HR
eCLOCK_MONOTONIC_HR.
obsoleti
- Prototipo di
- Negli esempi Teapot, MoreTeapots e
source/android/ndk_helper
:- Sono state modificate in modo che ora utilizzino un'ABI hard-float per armeabi-v7a.
- Aggiornati per utilizzare la modalità immersiva sul livello API Android 19 e versioni successive.
- È stato risolto un problema con
Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
che causava arresti anomali sui dispositivi x86.
- Corretti gli errori
ndk-build
che si verificano in cygwin quando si fa riferimento al pacchetto NDK tramite symlink. - È stato corretto l'errore
ndk-build.cmd
che si verifica in Windowscmd.exe
quandoLOCAL_SRC_FILES
contiene percorsi assoluti. (Problema 69992) - È stato corretto lo script
ndk-stack
per procedere anche quando non è possibile analizzare un frame perché non è possibile trovare una routine, un nome file o un numero di riga. In tutti questi casi, viene stampato??
. - È stato corretto lo stack
ndk-stack
per i target windows-x64_64 in modo che non corrisponda più erroneamente a una riga del frame con una riga nella sezionestack:
che non contienepc
,eip
oip
. Ad esempio:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- È stato corretto gabi++ in modo che:
- Non utilizza malloc() per allocare oggetti C++ thread-local.
- Evita i deadlock in gabi++ nei casi in cui libc.debug.malloc è diverso da zero nelle build della piattaforma Android userdebug/eng.
- Correzioni dell'intestazione:
- Altre modifiche:
-
LOCAL_EXPORT_LDFLAGS
aggiunto.- È stata introdotta l'impostazione
NDK_PROJECT_PATH=null
da utilizzare in un sistema di build integrato in cui le opzioni vengono passate in modo esplicito andk-build
. Con questa impostazione,ndk-build
non tenta di cercareNDK_PROJECT_PATH.
. Questa impostazione impedisce inoltre alle variabili di derivare le impostazioni predefinite da NDK_PROJECT_PATH. Di conseguenza, ora le seguenti variabili devono essere specificate in modo esplicito (con i relativi valori predefiniti, se esistenti):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(facoltativo, il valore predefinito è 0) e altriAPP_*
contenuti inApplication.mk
. - Ora
APP_ABI
può essere enumerato in un elenco delimitato da virgole. Per esempio:APP_ABI := "armeabi,armeabi-v7a"
- È stata fornita la possibilità di ricompilare tutta la STL con informazioni di debug in un
pacchetto separato facoltativo chiamato
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, utilizzando l'opzione-g
. Questa opzione aiuta lo scriptndk-stack
a fornire un dump dello stack migliore in STL. Questa modifica non dovrebbe influire sul codice/sulle dimensioni del file finale privato dei simboli. - Campioni
hello-jni
avanzati per segnalareAPP_ABI
durante la compilazione. - Utilizzato lo strumento
ar
in modalità deterministica (opzione-D
) per creare librerie statiche. (Problema 60705)
Android NDK r9b (ottobre 2013)
- Modifiche importanti:
-
include/android/*h
emath.h
aggiornati per tutti i livelli API Android fino a 18, inclusa l'aggiunta dei livelli 13, 15, 16 e 17. Per informazioni sulle API aggiunte, consulta i messaggi di commit per le modifiche 68012 e 68014. (Problemi 47150, 58528 e 38423)- Aggiunto il supporto per il livello API Android 19, incluso il binding Renderscript.
- È stato aggiunto il supporto di
-mhard-float
nell'ABI armeabi-v7a esistente. Per ulteriori informazioni e restrizioni attuali su Clang, veditests/device/hard-float/jni/Android.mk
. - È stata eseguita la migrazione da GNU Compiler Collection (GCC) 4.8 a 4.8.2 ed è stato aggiunto il supporto del colore diagnostico. Per attivare i colori diagnostici, imposta
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
o esportaGCC_COLORS
come mostrato di seguito: Per saperne di più, vedi GCC Opzioni indipendenti dalla lingua.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- Sono stati aggiunti due nuovi esempi per dimostrare le funzionalità di OpenGL ES 3.0: Teapot e MoreTeapots. Questi esempi vengono eseguiti su dispositivi con Android 4.1 (livello API 16) e versioni successive.
- Supporto ritirato di GCC 4.7 e Clang 3.2, che verranno rimossi nella prossima release.
- Correzioni di bug importanti:
-
- Risolto il problema con ARM GCC 4.6
thumb2
che non riusciva a generare tabelle di salti relativi a 16 bit. (Problema GCC) - È stato corretto l'errore interno del compilatore (ICE) di GCC 4.8 su
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Modifica 62770, Problema GCC) - È stato risolto un problema relativo all'avvio non riuscito dei file eseguibili
*-gdb.exe
a 32 bit di Windows. (Problema 58975) - È stato corretto l'errore di compilazione interna di GCC 4.8 durante la creazione della libreria di elenchi puntati. Il messaggio di errore è il seguente:
(Issue 58916, GCC Issue)internal compiler error: verify_flow_info failed
- Build GDB/ARM modificata per ignorare i dati
ARM.exidx
per l'unwinding nel codice del prologo e aggiunta di un comando (set arm exidx-unwinding
) per controllare l'unwinding dello stack basato su exidx. (Problema 55826) - Risolto il problema del compilatore Clang 3.3 MIPS in cui i registri HI e LO vengono riutilizzati in modo errato.
- È stato risolto il problema relativo a MIPS 4.7 ICE in
dbx_reg_number
. Il messaggio di errore è il seguente: (patch GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Risolto il problema con ARM GCC 4.6
- Altre correzioni di bug:
-
- Correzioni dell'intestazione
- È stato corretto l'ARM
WCHAR_MIN
eWCHAR_MAX
in modo che non siano firmati in base alle specifiche (le versioni X86/MIPS sono firmate). Definisci_WCHAR_IS_ALWAYS_SIGNED
per ripristinare il comportamento precedente. (Problema 57749) - È stato corretto
include/netinet/tcp.h
in modo che contenga l'enumerazione dello statoTCP_INFO
. (Problema 38881) - È stata corretta la macro
cdefs_elh.h
_C_LABEL_STRING
per interrompere la generazione di avvisi nella toolchain GCC 4.8 quando si utilizza la modalità c++11. (Problema 58135, Problema 58652) - Funzioni inesistenti
imaxabs
eimaxdiv
rimosse dall'intestazioneinttypes.h
. - È stato risolto il problema relativo ai valori restituiti di
pthread_exit()
epthread_self()
. (Problema 60686) - Aggiunta la funzione
mkdtemp()
mancante, che esiste già nell'intestazionebionic
stdlib.h
.
- È stato corretto l'ARM
- È stato risolto il problema di creazione di
samples/gles3jni
con Clang sul livello API Android 11. - È stato corretto MCLinker per consentire più occorrenze delle seguenti opzioni:
-gc-sections
e--eh-frame-hdr
. - È stato corretto MCLinker per accettare l'opzione
--no-warn-mismatch
. - Opzione
cpu-features
modificata per non presupporre che tutti i dispositivi VFPv4 supportino IDIV. Ora questa opzione aggiunge IDIV solo ai dispositivi inclusi nella lista consentita, tra cui Nexus 4. (Problema 57637) - È stato risolto il problema relativo a
android_native_app_glue.c
che registrava erroneamente errori nelle operazioni di pre-invio degli eventi. - Sono state corrette tutte le operazioni su
gabi++
terminate e unexpected_handler in modo che siano thread-safe. - Sono stati risolti diversi problemi relativi all'opzione Clang
-integrated-as
, in modo che possa superare i test perssax-instructions
efenv
. - È stato corretto il compilatore GCC 4.6/4.7/4.8 per passare l'opzione del linker
--eh-frame-hdr
anche per gli eseguibili statici. Per ulteriori informazioni, consulta la patch GCC. - Apostrofo aggiuntivo corretto in
CPU-ARCH-ABIS.html
. Per ulteriori informazioni, vediNDK-DEPENDS.html
. (Problema 60142) - Sono state corrette le virgolette aggiuntive nell'output di ndk-build su Windows. (Problema 60649)
- È stato corretto Clang 3.3 per compilare le operazioni atomiche integrate di ARM, ad esempio
__atomic_fetch_add
,__atomic_fetch_sub
e__atomic_fetch_or
. - È stato corretto l'errore interno del compilatore Clang 3.3 con
vfprintf
personalizzato. (Problema di Clang)
- Correzioni dell'intestazione
- Altre modifiche:
-
- È stato attivato OpenMP per tutte le build GCC. Per utilizzare questa funzionalità, aggiungi i seguenti flag alle impostazioni di build:
Per esempi di codice, vediLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
- Le dimensioni di
ld.mcld
sono state ridotte in modo significativo (1,5 MB rispetto ald.bfd
3,5 MB eld.gold
7,5 MB), con un conseguente miglioramento della velocità di circa il 20%. - Sono stati aggiunti
LOCAL_CONLYFLAGS
eAPP_CONLYFLAGS
per specificare opzioni applicabili solo a C e non a C++. AncheLOCAL_CFLAGS
eAPP_CFLAGS
esistenti vengono utilizzati per la compilazione C++ (per evitare di specificare la maggior parte delle opzioni due volte), quindi opzioni come-std=gnu99
potrebbero non riuscire nelle build g++ con un avviso e nelle build clang++ con un errore. - Aggiunte funzioni helper per array
gabi++
. - Modifica le build GCC in modo che tutti i file
libgcc.a
vengano creati con-funwind-tables
per consentire lo srotolamento dello stack oltre i punti precedentemente bloccati, ad esempio__aeabi_idiv0
. - È stato aggiunto il supporto Ingenic MXU in MIPS GCC4.6/4.7/4.8 con la nuova opzione
-mmxu
. - Estensione di MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
per controllare anche ldxc1/sdxc1 - Aggiunto Crazy Linker. Per ulteriori informazioni, vedi
sources/android/crazy_linker/README.TXT
. - È stato corretto
bitmap-plasma
per disegnare a schermo intero anziché in un'area di 200 x 200 pixel. - Le dimensioni delle toolchain Linux e Darwin sono state ridotte del 25% creando link simbolici a file identici.
- È stato attivato OpenMP per tutte le build GCC. Per utilizzare questa funzionalità, aggiungi i seguenti flag alle impostazioni di build:
Android NDK r9 (luglio 2013)
- Modifiche importanti:
-
- Aggiunto il supporto per Android 4.3 (livello API 18). Per ulteriori informazioni, vedi
STABLE-APIS.html
e i nuovi esempi di codice insamples/gles3jni/README
. - Sono stati aggiunti header e librerie per OpenGL ES 3.0, supportato da Android 4.3 (livello API 18) e versioni successive.
- Aggiunto il compilatore GNU Compiler Collection (GCC) 4.8 all'NDK. Poiché GCC 4.6 è ancora
l'impostazione predefinita, devi attivare esplicitamente questa opzione:
- Per le build
ndk-build
, esportaNDK_TOOLCHAIN_VERSION=4.8
o aggiungilo inApplication.mk
. - Per le build autonome, utilizza l'opzione
--toolchain=
inmake-standalone-toolchain.sh
, ad esempio:
--toolchain=arm-linux-androideabi-4.8
Nota: l'opzione
-Wunused-local-typedefs
è attivata da-Wall
. Assicurati di aggiungere__attribute__((unused))
se utilizzi asserzioni in fase di compilazione comesources/cxx-stl/stlport/stlport/stl/config/features.h
, riga 311. Per saperne di più, consulta Modifica 55460Nota:Nella release GCC 4.7 e successive, i compilatori ARM generano codice di accesso non allineato per impostazione predefinita per le destinazioni di build ARMv6 e successive. Potresti dover aggiungere l'opzione di build
-mno-unaligned-access
durante la creazione per i kernel che non supportano questa funzionalità. - Per le build
- È stato aggiunto il supporto di Clang 3.3. L'
NDK_TOOLCHAIN_VERSION=clang
opzione di build ora sceglie Clang 3.3 per impostazione predefinita.Nota:GCC 4.4.3 e Clang 3.1 sono entrambi obsoleti e verranno rimossi dalla prossima release dell'NDK.
- È stato aggiornato GNU Project Debugger (GDB) per supportare Python 2.7.5.
- Aggiunto MCLinker per supportare gli host Windows. Poiché
ld.gold
è il valore predefinito quando disponibile, devi aggiungere-fuse-ld=mcld
inLOCAL_LDFLAGS
oAPP_LDFLAGS
per attivare MCLinker. - È stato aggiunto lo strumento
ndk-depends
che stampa le dipendenze della libreria ELF. Per ulteriori informazioni, vediNDK-DEPENDS.html
. (Problema 53486)
- Aggiunto il supporto per Android 4.3 (livello API 18). Per ulteriori informazioni, vedi
- Correzioni di bug importanti:
-
- Risolto un potenziale problema di gestione degli eventi in
android_native_app_glue
. (Problema 41755) - È stata corretta la build ARM/GCC-4.7 per generare un allineamento sufficiente per le istruzioni di caricamento e archiviazione NEON VST e VLD. (GCC Issue 57271)
- È stato corretto un errore interno del compilatore (ICE) GCC 4.4.3/4.6/4.7 per un valore di indice negativo costante in un valore letterale stringa. (Problema 54623)
- Corretto l'errore di segmentazione GCC 4.7 per l'inizializzazione costante con un indirizzo oggetto. (Problema 56508)
- È stato corretto l'errore di segmentazione ARM GCC 4.6 per i valori
-O
quando si utilizza Boost 1.52.0. (Problema 42891) - Sono stati corretti
libc.so
elibc.a
per supportare la funzionewait4()
. (Problema 19854) - Sono stati aggiornati i file libc.so e libc.a x86 per includere la funzione
clone()
. - È stato corretto il bug di
LOCAL_SHORT_COMMANDS
per cui il filelinker.list
è vuoto o non viene utilizzato. - È stata corretta la build GCC MIPS su Mac OS per utilizzare le direttive CFI, senza le quali
ld.mcld --eh-frame-hdr
non funziona spesso. - È stato corretto l'errore interno del compilatore Clang 3.2 X86/MIPS in
llvm/lib/VMCore/Value.cpp
. (Modifica 59021) - È stato risolto il problema di arresto anomalo dell'assembler Windows a 64 bit GCC 4.7. (Errore:
out of memory allocating 4294967280 bytes
). - Lo script
ndk-gdb
è stato aggiornato in modo che le azioni--start
o--launch
ora attendano il server di debug GNU, in modo che possa raggiungere in modo più affidabile i punti di interruzione impostati all'inizio del percorso di esecuzione (ad esempio i punti di interruzione nel codice JNI). (Problema 41278)Nota:Questa funzionalità richiede jdb e genera un avviso sui punti di interruzione in attesa. Specifica l'opzione
--nowait
per ripristinare il comportamento precedente. - Risolto l'arresto anomalo di GDB quando l'elenco delle librerie è vuoto.
- È stato corretto l'arresto anomalo di GDB quando si utilizza un comando
stepi
dopo un'istruzionebx pc
oblx pc
Thumb. (Problema 56962, Problema 36149) - È stato corretto il MIPS
gdbserver
per cercareDT_MIPS_RLD_MAP
anzichéDT_DEBUG
. (Problema 56586) - È stata corretta una dipendenza circolare nello script ndk-build. Ad esempio: se A->B e B->B, B è stato eliminato dalla build. (Problema 56690)
- Risolto un potenziale problema di gestione degli eventi in
- Altre correzioni di bug:
-
- È stato corretto lo script
ndk-build
per consentirti di specificare una versione di Clang come opzione della riga di comando (ad es.NDK_TOOLCHAIN_VERSION=clang3.2
). In precedenza, funzionava solo specificando la versione come variabile di ambiente. - È stata corretta la dimensione di gabi++ da
_Unwind_Exception
a 24 per le destinazioni di build MIPS quando si utilizza il compilatore Clang. (Modifica 54141) - È stato corretto lo script
ndk-build
per garantire che le librerie create vengano effettivamente rimosse dai progetti che includono librerie statiche precompilate quando si utilizza il comandondk-build clean
. (Modifica 54461, Modifica 54480) - È stata modificata l'opzione
NDK_ANALYZE=1
per renderla meno dettagliata. - È stato corretto
gnu-libstdc++/Android.mk
in modo da includere un percorsobackward/
per le build che utilizzano la compatibilità con le versioni precedenti. (Problema 53404) - È stato risolto un problema per cui
stlport new
a volte restituiva valori casuali. - È stato corretto
ndk-gdb
in modo che corrisponda all'ordine diCPU_ABIS
, non diAPP_ABIS
. (Problema 54033) - È stato risolto un problema per cui la build NDK a 64 bit su MacOSX sceglie il percorso errato per il compilatore. (Problema 53769)
- Sono stati corretti gli script di compilazione per rilevare Windows Vista a 64 bit. (Problema 54485)
- È stato corretto l'errore x86
ntonl/swap32
:invalid 'asm': operand number out of range
. (Issue 54465, Change 57242) - È stato corretto
ld.gold
per unire i valori letterali delle stringhe. - È stato corretto
ld.gold
per gestire l'allineamento dei simboli di grandi dimensioni. - È stato aggiornato
ld.gold
per attivare l'opzione--sort-section=name
. - È stato corretto GCC 4.4.3/4.6/4.7 per eliminare l'opzione
-export-dynamic
per i programmi collegati staticamente. GCC non aggiunge più una sezione.interp
per i programmi collegati staticamente. - È stato corretto l'errore di compilazione GCC 4.4.3
stlport
relativo atypedef
incoerente di_Unwind_Control_Block
. (Problema 54426) - Sono stati corretti gli script
awk
per gestire i fileAndroidManifest.xml
creati su Windows che potrebbero contenere caratteri\r
finali e causare errori di compilazione. (Problema 42548) - È stato corretto
make-standalone-toolchain.sh
per analizzare la directoryprebuilts/
per rilevare se l'host è a 32 bit o 64 bit. - È stata corretta l'opzione Clang 3.2
-integrated-as
. - È stato corretto il modello compatto ARM EHABI Clang 3.2
pr1
e i dati del gestorepr2
. - È stata aggiunta l'opzione Clang
-mllvm -arm-enable-ehabi
per correggere il seguente errore Clang:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- È stato risolto l'errore di compilazione quando non è presente alcun elemento
uses-sdk
nel manifest dell'applicazione. (Problema 57015)
- È stato corretto lo script
- Altre modifiche:
-
- Correzioni dell'intestazione
- Intestazioni modificate per rendere
__set_errno
una funzione in linea, poiché__set_errno
inerrno.h
è deprecato elibc.so
non lo esporta più. - Modifica di
elf.h
per includerestdint.h
. (Problema 55443) - È stato corretto
sys/un.h
in modo che venga incluso indipendentemente dalle altre intestazioni. (Problema 53646) - È stata corretta tutta la famiglia di API
MotionEvent_getHistorical
per utilizzareconst AInputEvent* motion_event
. (Problema 55873) - Correzione di
malloc_usable_size
per l'esecuzione diconst void*
. (Problema 55725) - È stato corretto stdint.h per renderlo più compatibile con C99. (Modifica 46821)
- Modificato
wchar.h
per non ridefinireWCHAR_MAX
eWCHAR_MIN
- Correzione della dichiarazione
<inttypes.h>
per le macroPRI
eSCN
correlate al puntatore. (Problema 57218) - È stata modificata l'intestazione
sys/cdefs.h
in modo che__WCHAR_TYPE__
sia a 32 bit per i livelli API inferiori a 9, il che significa chewchat_t
è a 32 bit per tutti i livelli API. Per ripristinare il comportamento precedente, definisci la variabile booleana_WCHAR_IS_8BIT
. (Problema 57267)
- Intestazioni modificate per rendere
- È stata aggiunta ulteriore formattazione in NDK
docs/
e sono state apportate correzioni varie alla documentazione. - È stato aggiunto il supporto per una tecnica di archivio sottile durante la creazione di librerie statiche. (Problema 40303)
- È stato aggiornato lo script
make-standalone-toolchain.sh
per supportare la libreriastlport
oltre agnustl
, quando specifichi l'opzione--stl=stlport
. Per ulteriori informazioni, vediSTANDALONE-TOOLCHAIN.html
. - È stato aggiornato lo script
make-standalone-toolchain.sh
in modo che l'opzione--llvm-version=
crei gli script$TOOLCHAIN_PREFIX-clang
e$TOOLCHAIN_PREFIX-clang++
oltre aclang
eclang++
, per evitare di utilizzare accidentalmente le definizioni clang e clang++ dell'host. - Sono stati aggiunti due flag per riattivare due ottimizzazioni in Clang upstream, ma disabilitate in
NDK per una migliore compatibilità con il codice compilato da GCC:
- È stato aggiunto un flag
-fcxx-missing-return-semantics
per riattivare la semantica missing return semantics in Clang 3.2+. Normalmente, tutti i percorsi devono terminare con un'istruzione return per una funzione che restituisce un valore. In caso contrario, clang inserisce un'istruzione non definita (o trap in modalità di debug) nel percorso senza un'istruzione return. Se sei sicuro che il codice sia corretto, utilizza questo flag per consentire all'ottimizzatore di sfruttare il comportamento indefinito. Se non hai la certezza, non utilizzare questo flag. Il chiamante potrebbe comunque ricevere un valore errato casuale, ma l'ottimizzatore non lo sfrutterà e renderà più difficile il debug del codice. - È stato aggiunto un flag
-fglobal-ctor-const-promotion
per riattivare la promozione delle variabili globali con costruttore statico a costanti. Con questo flag, il passaggio di ottimizzazione delle variabili globali di LLVM tenta di valutare le variabili globali con costruttori statici e promuoverle a costanti globali. Sebbene questa ottimizzazione sia corretta, potrebbe causare alcune incompatibilità con il codice compilato da GCC. Ad esempio, il codice potrebbe eseguireconst_cast
per eseguire il cast della costante in mutabile e modificarla. In GCC, la variabile è in lettura/scrittura e il codice viene eseguito per errore. In Clang, la variabile const si trova nella memoria di sola lettura e potrebbe causare l'arresto anomalo dell'applicazione.
- È stato aggiunto un flag
- È stato aggiunto
-mldc1-sdc1
ai compilatori MIPS GCC e Clang. Per impostazione predefinita, i compilatori allineano correttamente gli oggetti a 8 byte ed emettono le istruzionildc1
esdc1
per spostarli. Se la tua app utilizza un allocatore personalizzato che non si allinea sempre al limite di 8 byte di un nuovo oggetto nello stesso modo dell'allocatore predefinito, la tua app potrebbe arrestarsi in modo anomalo a causa di operazionildc1
esdc1
su memoria non allineata. In questo caso, utilizza il flag-mno-ldc1-sdc1
per risolvere il problema. - È stata eseguita la classificazione della gravità dell'evento da avviso a informazioni se
APP_PLATFORM_LEVEL
è maggiore diAPP_MIN_PLATFORM_LEVEL
. Il valore diAPP_PLATFORM_LEVEL
potrebbe essere inferiore aAPP_PLATFORM
injni/Application.mk
perché l'NDK non dispone di intestazioni per tutti i livelli. In questo caso, il livello effettivo viene spostato verso il basso. IlAPP_MIN_PLATFORM_LEVEL
è specificato daandroid:minSdkVersion
nel manifest della tua applicazione. (Problema 39752) - Sono stati aggiunti i metodi
android_getCpuIdArm()
eandroid_setCpuArm()
acpu-features.c
. Questa aggiunta consente di recuperare più facilmente le informazioni sull'ID CPU ARM. (Problema 53689) - È stato modificato
ndk-build
per utilizzareas/ld
di GCC 4.7 per la compilazione Clang.Nota:In GCC 4.7,
monotonic_clock
eis_monotonic
sono stati rinominati insteady_clock
eis_steady
, rispettivamente. - Sono stati aggiunti i seguenti nuovi avvisi allo script
ndk-build
:- Sono stati aggiunti avvisi se
LOCAL_LDLIBS/LDFLAGS
vengono utilizzati nei moduli della libreria statica. - È stato aggiunto un avviso se una configurazione non ha moduli da compilare.
- È stato aggiunto un avviso per le librerie non di sistema utilizzate in
LOCAL_LDLIBS/LDFLAGS
di una libreria condivisa o di moduli eseguibili.
- Sono stati aggiunti avvisi se
- Sono stati aggiornati gli script di build, in modo che se
APP_MODULES
non è definito e inAndroid.mk
sono elencate solo librerie statiche, lo script le compila forzatamente tutte. (Problema 53502) ndk-build
aggiornato per supportare i percorsi assoluti inLOCAL_SRC_FILES
.- Sono stati rimossi i file eseguibili
*-gdbtui
, che sono duplicati dei file eseguibili*-gdb
con l'opzione-tui
abilitata. - Sono stati aggiornati gli script di compilazione per avvisarti quando il front-end del compilatore Edison Design Group (EDG) viene riattivato.
_STLP_HAS_INCLUDE_NEXT
(Problema 53646) - È stata aggiunta la variabile di ambiente
NDK_LIBS_OUT
per consentire l'override del percorso dilibraries/gdbserver
dal valore predefinito$PROJECT/libs
. Per ulteriori informazioni, vediOVERVIEW.html
. - I valori predefiniti dello script ndk-build sono stati modificati per compilare il codice con la protezione della stringa di formato
-Wformat -Werror=format-security
. Puoi impostareLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
per disattivarla. Per ulteriori informazioni, vediANDROID-MK.html
- È stato aggiunto il supporto della stampa in formato STL in
ndk-gdb-py
. Per ulteriori informazioni, vediNDK-GDB.html
. - Sono stati aggiunti test basati sui framework googletest.
- È stata aggiunta una notifica allo script di build della toolchain che ti avvisa se la shell corrente
non è
bash
.
- Correzioni dell'intestazione
Android NDK r8e (marzo 2013)
- Modifiche importanti:
-
- È stato aggiunto il set di toolchain host a 64 bit (suffisso del nome del pacchetto
*-x86_64.*
). Per ulteriori informazioni, vediCHANGES.HTML
eNDK-BUILD.html
. - È stato aggiunto il compilatore Clang 3.2. GCC 4.6 è ancora l'impostazione predefinita. Per informazioni sull'utilizzo del
compilatore Clang, consulta
CHANGES.HTML
. - È stato aggiunto l'analizzatore di codice statico per gli host Linux/MacOSX. Per informazioni sull'utilizzo
dell'analizzatore, consulta
CHANGES.HTML
. - È stato aggiunto MCLinker per host Linux/MacOSX come funzionalità sperimentale. Il linker
ld.gold
è l'impostazione predefinita quando disponibile, quindi devi abilitarlo esplicitamente. Per ulteriori informazioni, vediCHANGES.HTML
. - Aggiornato ndk-build per utilizzare l'ordinamento topologico per le dipendenze dei moduli, il che significa che la
compilazione ordina automaticamente l'ordine delle librerie specificate in
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
eLOCAL_SHARED_LIBRARIES
. Per ulteriori informazioni, vediCHANGES.HTML
. (Problema 39378)
- È stato aggiunto il set di toolchain host a 64 bit (suffisso del nome del pacchetto
- Correzioni di bug importanti:
-
- È stato corretto lo script di build per creare tutte le toolchain in
-O2
. Le toolchain nelle versioni precedenti sono state create in modo errato senza ottimizzazione. - È stato corretto lo script di build che compila Clang/llvm in modo incondizionato per MacOSX a 64 bit.
- Errore interno del compilatore GCC 4.6/4.7 corretto:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Problema 52732) - È stato risolto un problema di compilazione per cui GCC/ARM 4.6/4.7 non riesce a collegare il codice utilizzando funzioni atomiche integrate a 64 bit. (Problema 41297)
- Corretti gli errori di mancata corrispondenza dell'utilizzo di DIV del linker GCC 4.7. (Problema di Sourceware)
- È stato corretto l'errore interno del compilatore GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - È stato corretto l'errore interno del compilatore GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (Problema 52909) - È stato corretto un errore di segmentazione GCC 4.7. (Problema GCC)
- Risoluzione dell'orologio
<chrono>
fissa esteady_clock
abilitato. (Problema 39680) - Toolchain corretta per abilitare
_GLIBCXX_HAS_GTHREADS
per libstdc++ di GCC 4.7. (Issue 41770, Issue 41859) - Risolto il problema con il codice X86 MXX/SSE che non riusciva a collegarsi a causa della mancanza di
posix_memalign
. (Modifica 51872) - È stato corretto l'errore di segmentazione GCC4.7/X86 in
i386.c
, funzionedistance_non_agu_define_in_bb()
. (Modifica 50383) - È stato corretto GCC4.7/X86 per ripristinare il comportamento precedente di
cmov
. (Problema GCC) - È stata corretta la gestione del valore restituito NULL di
setlocale()
in libstdc++/GCC4.7. (Problema 46718) - Corretto riferimento indefinito al runtime
ld.gold
a__exidx_start
e__exidx_start_end
. (Modifica 52134) - È stato corretto l'errore interno del compilatore Clang 3.1 durante l'utilizzo della libreria Eigen. (Problema 41246)
- Corretto l'errore interno del compilatore Clang 3.1, incluso
<chrono>
in modalità C++11. (Problema 39600) - È stato corretto l'errore interno del compilatore Clang 3.1 durante la generazione del codice oggetto per una chiamata di metodo a un
rvalue
inizializzato in modo uniforme. (Problema 41387) - Riallineamento dello stack Clang 3.1/X86 fisso. (Modifica 52154)
- Risolto il problema relativo a GNU Debugger (GDB) SIGILL durante il debug su Android 4.1.2. (Problema 40941)
- È stato risolto il problema per cui GDB non può impostare punti di interruzione
source:line
quando i simboli contengono percorsi di file lunghi e indiretti. (Problema 42448) - GDB fisso
read_program_header
per eseguibili MIPS PIE. (Modifica 49592) - È stato corretto l'errore di segmentazione
STLport
inuncaught_exception()
. (Modifica 50236) - È stato corretto l'errore del bus
STLport
nella gestione delle eccezioni a causa dell'accesso non allineato aDW_EH_PE_udata2
,DW_EH_PE_udata4
eDW_EH_PE_udata8
. - È stato risolto il problema di ricorsione infinita di Gabi++ con l'operatore
nothrow new[]
. (Problema 52833) - È stato corretto l'offset errato di Gabi++ al puntatore del gestore delle eccezioni. (Modifica 53446)
- Rimosso l'oggetto senza costi ridondante Gabi++ in caso di eccezione (Modifica 53447)
- È stato corretto lo script di build per creare tutte le toolchain in
- Altre correzioni di bug:
-
- Intestazioni NDK fisse:
- Sono state rimosse le definizioni ridondanti di
size_t
,ssize_t
eptrdiff_t
. - Correzione dell'intestazione
fenv.h
MIPS e ARM. - È stato corretto
stddef.h
in modo che non ridefiniscaoffsetof
perché esiste già nella toolchain. - È stato corretto
elf.h
in modo che contengaElf32_auxv_t
eElf64_auxv_t
. (Problema 38441) - Sono state corrette le definizioni C++ di
#ifdef
nel file di intestazioneOpenSLES_AndroidConfiguration.h
. (Problema 53163)
- Sono state rimosse le definizioni ridondanti di
- È stato corretto
STLport
in modo che venga interrotto dopo l'errore di esaurimento della memoria anziché uscire in modo silenzioso. - Sono stati corretti gli header di sistema e Gabi++ per poter compilare con il livello API 8 e precedenti.
- Corretto
cpufeatures
in modo che non analizzi/proc/self/auxv
. (Problema 43055) - È stato corretto
ld.gold
in modo che non dipenda da libstdc++ host e, sulle piattaforme Windows, non dipenda dalla librerialibgcc_sjlj_1.dll
. - È stato corretto Clang 3.1 che emette un elenco di registri incoerente in
.vsave
e non riesce assembler. (Modifica 49930) - È stato corretto Clang 3.1 per consentire la compilazione di libgabi++ e superare i
test-stlport
test per le destinazioni di build MIPS. (Modifica 51961) - È stato corretto Clang 3.1 per attivare l'eccezione per impostazione predefinita solo per C++, non per C.
- Sono stati risolti diversi problemi in Clang 3.1 per superare la maggior parte dei test di eccezione GNU.
- Sono stati corretti gli script
clang
eclang++
nel compilatore NDK autonomo per rilevare-cc1
e non specificare-target
quando viene trovato. - Correzione di
ndk-build
per osservareNDK_APP_OUT
impostato inApplication.mk
. - Sono stati corretti
libc.so
elib.a
X86 a cui mancavano le funzionisigsetjmp
esiglongjmp
già dichiarate insetjmp.h
. (Problema 19851) - È stata applicata una patch a GCC 4.4.3/4.6/4.7 libstdc++ per funzionare con Clang in C++ 11. (Problema di Clang)
- È stato corretto il percorso di Cygwin nell'argomento passato a
HOST_AWK
. - È stato corretto l'avviso relativo allo script
ndk-build
in Windows durante l'esecuzione dalla directory JNI del progetto. (Problema 40192) - È stato risolto il problema per cui lo script
ndk-build
non viene compilato se il makefile contiene spazi vuoti finali nella definizione diLOCAL_PATH
. (Problema 42841)
- Intestazioni NDK fisse:
- Altre modifiche:
-
- È stato abilitato il supporto multithreading nella toolchain GCC/MIPS.
- Sono stati aggiornati gli helper per la gestione delle eccezioni GCC
__cxa_begin_cleanup
e__cxa_type_match
in modo che abbiano la visibilità predefinita rispetto alla visibilità nascosta precedente in GNU libstdc++. Per ulteriori informazioni, consultaCHANGES.HTML
. - Sono stati aggiornati gli script di compilazione in modo che le librerie statiche Gabi++ e STLport vengano ora compilate con visibilità nascosta, ad eccezione degli helper per la gestione delle eccezioni.
- Build aggiornata in modo che
STLport
sia creato per ARM in modalità Thumb. - È stato aggiunto il supporto per
std::set_new_handler
in Gabi++. (Issue 52805) - È stata attivata la chiamata di sistema
FUTEX
in GNU libstdc++. - È stato aggiornato
ndk-build
in modo che non copi più la libreria statica precompilata nella directoryobj/local/<abi>/
di un progetto. (Problema 40302) - Rimosso
__ARM_ARCH_5*__
dallo script ARMtoolchains/*/setup.mk
. (Problema 21132) - Sono state create librerie GNU libstdc++ aggiuntive in thumb per ARM.
- Istruzioni in virgola mobile MIPS abilitate
madd/msub/nmadd/nmsub/recip/rsqrt
con FPU a 32 bit. - È stato attivato l'ottimizzatore di loop Graphite in GCC 4.6 e 4.7 per consentire ulteriori ottimizzazioni:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
, e-ftree-loop-linear
. (informazioni) - Attivato
polly
per Clang 3.1 su host Linux e Max OS X a 32 bit che analizza e ottimizza l'accesso alla memoria. (informazioni) - Abilitato
-flto
in GCC 4.7, 4.6, Clang 3.2 e Clang 3.1 su Linux (Clang LTO tramite LLVMgold.so). I target del compilatore MIPS non sono supportati perchéld.gold
non è disponibile. - Sono stati attivati
--plugin
e--plugin-opt
perld.gold
in GCC 4.6/4.7. --text-reorder
abilitato perld.gold
in GCC 4.7.- È stata configurata GNU libstdc++ con
_GLIBCXX_USE_C99_MATH
, che annulla la definizione dello scriptisinf
nell'intestazione bionic. Per ulteriori informazioni, vediCHANGES.html
. - È stato aggiunto
APP_LDFLAGS
agli script di build. Per ulteriori informazioni, vediANDROID-MK.html
. - Sono stati aggiornati gli script di build per consentire a
NDK_LOG=0
di disattivareNDK_LOG
. - Sono stati aggiornati gli script di build per consentire a
NDK_HOST_32BIT=0
di disattivare la toolchain a 32 bit dell'ambiente di sviluppo host. - Sono stati modificati i flag GCC/X86 predefiniti
-march=
e-mtune=
dapentiumpro
egeneric
ai686
eatom
. - Script di compilazione della toolchain avanzata:
- È stata corretta una condizione di competizione in
build-gcc.sh
per il tipo di buildmingw
che impediva una quantità significativa di elaborazione parallela delle build. build-gabi++.sh
ebuild-stlport.sh
sono stati aggiornati in modo che ora possano essere eseguiti dal pacchetto NDK. (Problema 52835)- Corretto
run-tests.sh
nella raccolta di utilitàMSys
. - Miglioramento della toolchain host a 64 bit e del supporto per la compilazione cross-canadese.
- Aggiornamento dello script
build-mingw64-toolchain.sh
alla versione più recente. - È stata aggiunta l'opzione per creare
libgnustl_static.a
estlport_static.a
senza visibilità nascosta.
- È stata corretta una condizione di competizione in
Android NDK r8d (dicembre 2012)
- Modifiche importanti:
-
- È stato aggiunto il compilatore GNU Compiler Collection (GCC) 4.7 all'NDK. Il compilatore GCC 4.6
è ancora quello predefinito, quindi devi abilitare esplicitamente la nuova versione nel seguente modo:
- Per
ndk-build
, esporta la variabileNDK_TOOLCHAIN_VERSION=4.7
o aggiungila aApplication.mk
. - Per le build autonome, aggiungi l'opzione
--toolchain=
amake-standalone-toolchain.sh
, ad esempio:--toolchain=arm-linux-androideabi-4.7
Nota: questa funzionalità è sperimentale. Provalo e segnala eventuali problemi.
- Per
- È stato aggiunto il supporto delle eccezioni
stlport
tramite gabi++. Tieni presente che il nuovo gabi++ dipende dadlopen
e dal codice correlato, il che significa che:- Non puoi più creare un eseguibile statico utilizzando l'opzione
-static
o includerelibstlport_static.a
utilizzandoAPP_STL := stlport_static
. (Puoi comunque utilizzare l'opzione-static
con una toolchain autonoma.) La compilazione di un eseguibile dinamico utilizzandoinclude $(BUILD_EXECUTABLE)
continua a funzionare perché il compilatore aggiunge automaticamente l'opzione-ldl
. - Se il tuo progetto esegue il collegamento utilizzando
-nostdlib
e {-Wl,--no-undefined}, devi includere manualmente l'opzione-ldl
.
CPLUSPLUS-SUPPORT.html
.Nota:questa funzionalità è sperimentale e funziona meglio con i compilatori GCC 4.6/4.7 rispetto a GCC 4.4.3 o Clang 3.1. Provalo e segnala eventuali problemi.
- Non puoi più creare un eseguibile statico utilizzando l'opzione
- È stata aggiunta un'opzione
-mstack-protector-guard=
per x86 per scegliere tra un percorso predefinito globale compatibile con la libreria C di Android precedente (bionic) e un nuovo percorso tls (%gs:20) per-fstack-protector
,-fstack-protector-all
e-fstack-protector-strong
utilizzando i compilatori GCC 4.6 e versioni successive.Nota:l'impostazione
-mstack-protector-guard
non attiva alcuna opzione-fstack-protector*
. - Aggiunta la funzione
android_setCpu()
asources/android/cpufeatures/cpu-features.c
da utilizzare quando il rilevamento automatico tramite/proc
non è possibile in Android 4.1 e versioni successive. (Chromium Issue 164154)
- È stato aggiunto il compilatore GNU Compiler Collection (GCC) 4.7 all'NDK. Il compilatore GCC 4.6
è ancora quello predefinito, quindi devi abilitare esplicitamente la nuova versione nel seguente modo:
- Correzioni di bug importanti:
-
- È stata corretta la ricompilazione non necessaria dei file oggetto quando viene utilizzato lo script
ndk-build
. (Problema 39810) - È stato corretto un errore del linker con la release NDK 8c per Mac OS X 10.6.x che generava il
seguente errore:
Questo problema è stato causato dalla creazione su Mac OS X 10.7, che ha prodotto file binari non compatibili con Mac OS 10.6.x e l'NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Sono state rimosse le opzioni
-x c++
dallo script di compilazione autonomo di Clang++. (Problema 39089) - Sono stati risolti i problemi relativi all'utilizzo dell'opzione
NDK_TOOLCHAIN_VERSION=clang3.1
in Cygwin. (Problema 39585) - È stato corretto lo script
make-standalone-toolchain.sh
per consentire la generazione di una toolchain autonoma utilizzando gli ambienti Cygwin o MinGW. La toolchain risultante può essere utilizzata negli ambienti Cygwin, MingGW o CMD.exe. (Problema 39915, Problema 39585) - È stata aggiunta l'opzione
SL_IID_ANDROIDBUFFERQUEUESOURCE
mancante nelle build di Android 14 per ARM e X86. (Problema 40625) - È stato corretto il rilevamento della CPU x86 per la funzionalità
ANDROID_CPU_X86_FEATURE_MOVBE
. (Problema 39317) - È stato risolto un problema che impediva alla Standard Template Library (STL) di utilizzare sorgenti C++
che non hanno un'estensione file
.cpp
. - È stato corretto l'errore interno del compilatore GCC 4.6 ARM at reload1.c:1061. (Problema 20862)
- È stato corretto l'errore interno del compilatore GCC 4.4.3 ARM at emit-rtl.c:1954. (Problema 22336)
- È stato corretto l'errore interno del compilatore ARM GCC 4.4.3 in postreload.c:396. (Problema 22345)
- È stato risolto il problema con GCC 4.6/4.7 che ignorava le funzioni lambda. (Problema 35933)
- È stata corretta la ricompilazione non necessaria dei file oggetto quando viene utilizzato lo script
- Altre correzioni di bug:
-
- Correzioni dei file di intestazione NDK:
- È stato corretto
__WINT_TYPE__
ewint_t
in modo che siano dello stesso tipo. - È stato corretto un errore di battitura in
android/bitmap.h
. (Problema 15134) - È stato corretto un errore di battitura in
errno.h
. - È stato aggiunto un controllo per la presenza di
__STDC_VERSION__
insys/cdefs.h
. (Issue 14627) - Intestazioni riorganizzate in
byteswap.h
edirent.h
. - È stato corretto
limits.h
in modo da includerepage.h
, che fornisce le impostazioni diPAGE_SIZE
. (Problema 39983) - Tipo di reso fisso di
glGetAttribLocation()
eglGetUniformLocation()
daint
aGLint
. - È stata corretta la costante
__BYTE_ORDER
per le build x86. (Problema 39824)
- È stato corretto
- È stato corretto lo script
ndk-build
in modo che non sovrascriva-Os
con-O2
per le build ARM. - Sono stati corretti gli script di build per consentire la sovrascrittura delle impostazioni
HOST_AWK
,HOST_SED
eHOST_MAKE
. - È stato risolto un problema per
ld.gold
nelle buildfsck_msdos
che collegano oggetti creati dal compilatore Intel C/C++ (ICC). - È stato corretto il supporto di ARM EHABI in Clang per rispettare le specifiche.
- Corretto GNU Debugger (GDB) per ridurre il tempo dedicato all'esplorazione della mappa dei link della destinazione
durante gli eventi
solib
. (Problema 38402) - È stato corretto il problema relativo alla mancanza del file
libgcc.a
durante il collegamento delle librerie condivise.
- Correzioni dei file di intestazione NDK:
- Altre modifiche:
-
- Funzioni atomiche integrate a 64 bit di cui è stato eseguito il backporting per ARM in GCC 4.6.
- È stata aggiunta la documentazione relativa alla latenza dell'output audio, insieme ad altre documentazioni e correzioni.
- Sono state corrette le build di debug con Clang in modo che le funzioni non void ora generino un segnale
SIGILL
per i percorsi senza un'istruzione return. make-standalone-toolchain.sh
aggiornato per accettare il suffisso-clang3.1
che equivale ad aggiungere--llvm-version=3.1
alla toolchain GCC 4.6.- L'URL della segnalazione di bug di GCC e Clang è stato aggiornato a: https://source.android.com/source/report-bug s.html
- È stato aggiunto il supporto di ARM ELF a
llvm-objdump
. - È stato eliminato l'avviso treating c input as c++ per le build Clang.
- È stata aggiornata la build in modo che venga creata e
inserita in
lib32/
solo la versione a 32 bit dilibiberty.a
.
Android NDK r8c (novembre 2012)
- Modifiche importanti:
-
- È stato aggiunto il compilatore Clang 3.1 all'NDK. GNU Compiler Collection (GCC) 4.6 è
ancora l'impostazione predefinita, quindi devi abilitare esplicitamente l'opzione del compilatore Clang nel seguente modo:
- Per
ndk-build
, esportaNDK_TOOLCHAIN_VERSION=clang3.1
o aggiungi questa impostazione della variabile di ambiente aApplication.mk
. - Per le build autonome, aggiungi
--llvm-version=3.1
amake-standalone-toolchain.sh
e sostituisciCC
eCXX
nel makefile con<tool-path>/bin/clang
e<tool-path>/bin/clang++
. Per i dettagli, visita la paginaSTANDALONE-TOOLCHAIN.html
.
Nota: questa funzionalità è sperimentale. Provalo e segnala eventuali problemi.
- Per
- È stato aggiunto il linker Gold
ld.gold
per la toolchain di Windows. Gold linker è anche l'impostazione predefinita per ARM e X86 su tutti gli host. Puoi eseguirne l'override per utilizzare il linkerld.bfd
aggiungendoLOCAL_LDFLAGS += -fuse-ld=bfd
aAndroid.mk
o passando-fuse-ld=bfd
alla riga di comando g++/clang++ che esegue il collegamento. - Sono stati aggiunti controlli per gli spazi nel percorso NDK agli script
ndk-build[.cmd]
endk-gdb
per evitare errori di build difficili da diagnosticare. - Sono state apportate le seguenti modifiche alla gestione del livello API:
- È stata modificata la logica di compilazione in modo che i progetti che specificano
android-10
tramiteandroid-13
inAPP_PLATFORM
,project.properties
odefault.properties
si colleghino aandroid-9
anziché aandroid-14
. - Build aggiornata in modo che gli eseguibili che utilizzano android-16 (Jelly Bean) o versioni successive vengano
compilati con l'opzione
-fPIE
per gli eseguibili indipendenti dalla posizione (PIE). Una nuova opzioneAPP_PIE
ti consente di controllare questo comportamento. Per i dettagli, visita la paginaAPPLICATION-MK.html
.Nota:tutti i livelli API superiori a 14 continuano a essere collegati a
platforms/android-14
e non sono stati aggiunti nuoviplatforms/android-N
. - È stato modificato
ndk-build
per fornire avvisi se il livello API aggiustato è superiore aandroid:minSdkVersion
inAndroidManifest.xml
del progetto.
- È stata modificata la logica di compilazione in modo che i progetti che specificano
- È stata aggiornata la libreria helper
cpu-features
per includere più funzionalità specifiche per ARM. Per i dettagli, visita la paginasources/android/cpufeatures/cpu-features.h
. - È stato modificato il valore long double sulla piattaforma X86 in modo che sia di 8 byte. Questo tipo di dati ora ha le stesse dimensioni di un doppio, ma viene comunque trattato come un tipo distinto.
- Build aggiornata per
APP_ABI=armeabi-v7a
:- È stato modificato questo tipo di build per passare il parametro
-march=armv7-a
al linker. Questa modifica garantisce che le librerie ecrt*.o
specifiche per la versione 7 siano collegate correttamente. - Aggiunta di
-mfpu=vfpv3-d16
andk-build
anziché dell'opzione-mfpu=vfp
utilizzata nelle versioni precedenti.
- È stato modificato questo tipo di build per passare il parametro
- È stato aggiunto il compilatore Clang 3.1 all'NDK. GNU Compiler Collection (GCC) 4.6 è
ancora l'impostazione predefinita, quindi devi abilitare esplicitamente l'opzione del compilatore Clang nel seguente modo:
- Correzioni di bug importanti:
-
- Risolto un problema per cui l'esecuzione di
make-standalone-toolchain.sh
con privilegi di root impediva ad alcuni utenti di accedere alla toolchain autonoma. (Issue 35279)- Tutti i file e gli eseguibili nel pacchetto di rilascio dell'NDK sono impostati in modo da disporre delle autorizzazioni di lettura ed esecuzione per tutti.
- La proprietà/il gruppo di
libstdc++.a
viene ora mantenuto durante la copia.
- Rimozione di
\r
ridondanti dalla precompilazione di Windowsecho.exe
. Il\r
ridondante ha causato l'erroregdb.setup
in GNU Debugger (GDB) perché è diventato erroneamente parte del percorso. (Problema 36054) - Sono state corrette le build parallele di Windows che a volte non riuscivano a causa di problemi di sincronizzazione nell'implementazione di
host-mkdir
. (Problema 25875) - È stato corretto GCC 4.4.3 GNU
libstdc++
in modo che non unisse i nomitypeinfo
per impostazione predefinita. Per maggiori dettagli, veditoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Problema 22165) - Risolto il problema nel contesto
null
in GCC 4.6cp/mangle.c::write_unscoped_name
, dove GCC potrebbe arrestarsi in modo anomalo quando il contesto ènull
e viene dereferenziato inTREE_CODE
. - È stato corretto il problema di arresto anomalo di GCC 4.4.3 nelle definizioni di tipo specifiche per ARM NEON per i numeri in virgola mobile. (Problema 34613)
- È stata corretta l'implementazione interna
STLport
_IteWrapper::operator*()
in cui veniva restituita una posizione dello stack obsoleta contenente il valore dereferenziato e causava arresti anomali in fase di runtime. (Problema 38630) - Correzioni specifiche per ARM:
- Corretto ARM GCC 4.4.3/4.6
g++
per non avvisare che la manipolazione di <va_list> è stata modificata in GCC 4.4. La soluzione alternativa che utilizza l'opzione-Wno-psabi
per evitare questo avviso non è più necessaria. - È stato risolto un problema quando un progetto con i suffissi
.arm
o.neon
inLOCAL_SRC_FILES
utilizzava ancheAPP_STL
. ConAPP_STL
, lo scriptndk-build
cerca i file C++ inLOCAL_SRC_FILES
prima di aggiungere i percorsi STLheader/lib
alla compilazione. Modificatondk-build
per filtrare i suffissi.arm
e.neon
prima della ricerca, altrimenti gli elementi inLOCAL_SRC_FILES
comemyfile.cpp.arm.neon
non verranno compilati come codice C++. - È stato corretto
binutils-2.21/ld.bfd
per consentire il collegamento di oggetti da binutils precedenti senzatag_FP_arch
, che produceva messaggi di errore assertion fail in GNU Binutils. (Problema 35209) - Avviso Unknown EABI object attribute 44 rimosso quando
binutils-2.19/ld
collega l'oggetto precompilato a una versione più recente dibinutils-2.21
- È stato risolto un problema nella compilazione di GNU
stdc++
con-mthumb
e-march=armv7-a
, modificandomake-standalone-toolchain.sh
per popolareheaders/libs
nella sottodirectoryarmv7-a/thumb
. (Problema 35616) - È stato corretto l'errore R_ARM_THM_CALL di riassegnazione non risolvibile. (Problema 35342)
- È stato corretto l'errore interno del compilatore in
reload1.c:3633
, causato dal backend ARM che si aspetta il tipo di operando errato durante l'estensione del segno dachar
. (GCC Issue 50099) - È stato corretto l'errore interno del compilatore con un valore di spostamento negativo. (Problema GCC)
- Corretto ARM GCC 4.4.3/4.6
- È stato corretto
-fstack-protector
per x86, che è anche il valore predefinito per il target ABI x86ndk-build
. - Correzioni specifiche per MIPS:
- È stato corretto l'endianness di
STLport
impostando_STLP_LITTLE_ENDIAN
su 1 durante la compilazione di MIPSlibstlport_*
. - È stato risolto il problema di GCC
__builtin_unreachable
durante la compilazione di LLVM. (GCC Issue 54369) - Correzione di cui è stato eseguito il backporting per il processo di compilazione
cc1
che consuma il 100% della CPU. (GCC Issue 50380)
- È stato corretto l'endianness di
- Correzioni specifiche di GNU Debugger:
- Supporto Python disattivato in gdb-7.x in fase di compilazione, altrimenti la funzione di configurazione gdb-7.x potrebbe rilevare qualsiasi versione di Python disponibile sull'host e compilare
gdb
con una dipendenza hardcoded da una versione specifica di Python. (Problema 36120) - È stato corretto
ndk-gdb
quandoAPP_ABI
contieneall
e non corrisponde a nessuna delle architetture note. (Issue 35392) - È stato corretto il supporto dei percorsi di Windows mantenendo il carattere
:
se sembra che possa far parte di un percorso di Windows che inizia con una lettera di unità. (GDB Issue 12843) - È stato corretto l'aggiunta del supporto dei punti di interruzione hardware per ARM in
gdbserver
. (GDB Issue) - È stata aggiunta una correzione per leggere solo l'
solibs
corrente quando il linker è coerente. Questa modifica velocizza la gestione degli eventisolib
. (Problema 37677) - È stata aggiunta una correzione per effettuare tentativi ripetuti di trovare i punti di interruzione
solib
. GDB ora ritentaenable_break()
a ogni chiamata asvr4_current_sos()
finché non riesce. (Modifica 43563) - È stato risolto un problema per cui
gdb
non si arrestava in corrispondenza dei punti di interruzione inseriti nelle libreriedlopen-ed
. (Issue 34856) - È stato corretto
SIGILL
nel linker dinamico durante la chiamata adlopen()
, sul sistema in cui/system/bin/linker
è privo di simboli ertld_db_dlactivity()
è implementato comeThumb
, perché non viene conservatoLSB
disym_addr
. (Problema 37147)
- Supporto Python disattivato in gdb-7.x in fase di compilazione, altrimenti la funzione di configurazione gdb-7.x potrebbe rilevare qualsiasi versione di Python disponibile sull'host e compilare
- Risolto un problema per cui l'esecuzione di
- Altre correzioni di bug:
-
- Intestazioni NDK fisse:
- Corretto il codice
arch-mips/include/asm/*
che era stato rimosso erroneamente dal kernel originale. (Modifica 43335) - Sostituito il membro struct data
__unused
con__linux_unused
inlinux/sysctl.h
elinux/icmp.h
per evitare conflitti con#define __unused
insys/cdefs.h
. - È stato corretto
fenv.h
per le funzioni C incluse con__BEGIN_DECLS
e__END_DECLS
. - Sono state rimosse le funzioni non implementate in
malloc.h
. - Definizione di
stdint.h
diuint64_t
corretta per i compilatori ANSI. (Numero 1952) - Macro del preprocessor fisse in
<arch>/include/machine/*
. - Sostituito
link.h
per MIPS con una nuova versione che supporta tutte le piattaforme. - Opzione
linux-unistd.h
rimossa - Sposta le macro specifiche di GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
eULONG_LONG_MAX
da<pthread.h>
a<limits.h>
.
- Corretto il codice
- È stato corretto un overflow del buffer in
ndk-stack-parser
. - Corretto
_STLP_USE_EXCEPTIONS
, quando non definito, per omettere tutte le dichiarazioni e gli utilizzi di__Named_exception
. La compilazione e l'utilizzo delle impostazioni di__Named_exception
si verificano solo quandoSTLport
può utilizzare le eccezioni. - È stata corretta la creazione di pacchetti NDK solo per Linux senza creare anche codice Windows. Utilizza le seguenti impostazioni per eseguire questo tipo di build:
./build/tools/make-release.sh --force --systems=linux-x86
- È stato corretto
libc.so
in modo che non esportiatexit()
e__do_handler
. Questi simboli vengono esportati per le build ARM dalla versione di sistema della libreria C per supportare le librerie native legacy. NDK-generated should never reference them directly. Al contrario, ogni libreria condivisa o eseguibile deve incorporare la propria versione di questi simboli, fornita dacrtbegin_*.o
.Se il tuo progetto è collegato alle opzioni
-nostdlib -Wl,--no-undefined
, devi fornire il tuo__dso_handle
perchécrtbegin_so.o
non è collegato in questo caso. Il contenuto di__dso_handle
non è importante, come mostrato nel seguente esempio di codice:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Decodificatore di simboli fisso per ARM utilizzato in
objdump
per le vociplt
per generare un modulo più leggibilefunction@plt
. - Sono stati rimossi dalla libreria della piattaforma X86
libc.so
i seguenti simboli, introdotti in GCC 4.6libgcc.a
:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
e__aeabi_unwind_cpp_pr2
. - Rimossi
.ctors
,.dtors
e.eh_frame
inutilizzati in MIPScrt*_so.S
. ndk-gdb
aggiornato in modo che prenda solo l'ultima riga dell'output perndk-build
DUMP_XXXX
. Questa modifica garantisce che seApplication.mk
oAndroid.mk
stampano qualcosa con la sintassi$(info ...)
, non venga inserito nel risultato diDUMP_XXXX
. (Scopri di più)
- Intestazioni NDK fisse:
- Altre modifiche:
-
- Intestazioni
arch-x86
earch-mips
rimosse daplatforms/android-[3,4,5,8]
. Queste intestazioni erano incomplete, poiché le ABI X86 e MIPS sono supportate solo dall'API 9 o versioni successive. - Percorso di inclusione C++ semplificato nei pacchetti autonomi, come mostrato di seguito.
(Problema 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- È stato corretto
ndk-build
per riconoscere più estensioni di file C++ per impostazione predefinita:.cc .cp .cxx .cpp .CPP .c++ .C
. Puoi comunque utilizzareLOCAL_CPP_EXTENSION
per sovrascrivere queste impostazioni dell'estensione. - È stato risolto un problema in
samples/san-angeles
che causava una schermata nera o un fotogramma bloccato al riavvio. - Sostituite le API deprecate negli esempi di NDK.
(Issue 20017)
hello-gl2
da android-5 a android-7native-activity
da android-9 a android-10native-audio
da android-9 a android-10native-plasma
da android-9 a android-10
- È stato aggiunto un nuovo branding per gli eseguibili Android con uno schema più semplice nella sezione
.note.android.ident
(definito incrtbegin_static/dynamic.o
) in modo che gli strumenti di debug possano agire di conseguenza. Il membro e i valori della struttura sono definiti come segue: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 */ }
Le opzioni di branding precedenti nella sezione
.note.ABI-tag
sono obsolete. - È stato aggiunto un nuovo script
run-tests-all.sh
che chiamarun-tests.sh
estandalone/run.sh
con varie condizioni. Lo scriptrun-tests.sh
viene eseguito senza l'opzione--abi
e viene migliorato per compilare la maggior parte dei test per tutte le ABI supportate ed eseguirli su tutti i dispositivi collegati
- Intestazioni
Android NDK r8b (luglio 2012)
Le funzionalità principali di questa release sono una nuova toolchain GNU Compiler Collection (GCC) 4.6 e GNU Debugger (GDB) 7.3.x, che aggiunge il supporto per il debug dell'immagine di sistema Android 4.1 (livello API 16).
- Correzioni di bug importanti:
-
- Risolti i problemi relativi a
LOCAL_SHORT_COMMANDS
su Mac OS e negli ambienti Windows Cygwin per le librerie statiche. La generazione del file di elenco è più rapida e non viene rigenerata per evitare ricostruzioni ripetute del progetto. - Sono stati risolti diversi problemi in
ndk-gdb
:- Strumento aggiornato per passare i flag
-e
,-d
e-s
ad adb in modo più coerente. - Strumento aggiornato per accettare nomi seriali di dispositivi contenenti spazi.
- Strumento aggiornato per recuperare le informazioni
/system/bin/link
, in modo chegdb
sull'host possa impostare un punto di interruzione in__dl_rtld_db_dlactivity
ed essere a conoscenza dell'attività del linker (ad es. eseguire nuovamente la scansione dei simbolisolib
quando viene chiamatodlopen()
).
- Strumento aggiornato per passare i flag
- È stato corretto
ndk-build clean
su Windows, che non riusciva a rimuovere./libs/*/lib*.so
. - È stato corretto
ndk-build.cmd
in modo che restituisca un valoreERRORLEVEL
diverso da zero quandomake
non va a buon fine. - Correzione di
libc.so
per impedire l'esportazione errata dei simboli__exidx_start
e__exidx_end
. - Correzione di
SEGV
durante l'annullamento dello stack oltre__libc_init
per ARM e MIPS.
- Risolti i problemi relativi a
- Modifiche importanti:
-
- È stata aggiunta la toolchain GCC 4.6 (
binutils
2.21 congold
e GDB 7.3.x) per coesistere con la toolchain GCC 4.4.3 originale (binutils
2.19 e GDB 6.6).- GCC 4.6 è ora la toolchain predefinita. Puoi impostare
NDK_TOOLCHAIN_VERSION=4.4.3
inApplication.mk
per selezionare quello originale. - Il supporto del linker
gold
è disponibile solo per le architetture ARM e x86 su host Linux e Mac OS. Questo supporto è disattivato per impostazione predefinita. AggiungiLOCAL_LDLIBS += -fuse-ld=gold
inAndroid.mk
per attivarlo. - I programmi compilati con
-fPIE
richiedono il nuovoGDB
per il debug, inclusi i file binari nelle immagini di sistema di Android 4.1 (livello API 16). - Lo strumento
binutils
2.21ld
contiene correzioni di porting all'indietro dalla versione 2.22:- Corretto
ld --gc-sections
, che conserva erroneamente riferimenti zombie a librerie esterne. (maggiori informazioni). - È stato corretto il comando ARM
strip
per conservare i valori originali dip_align
ep_flags
nella sezioneGNU_RELRO
se sono validi. Senza questa correzione, i programmi creati con-fPIE
non potevano essere sottoposti a debug. (ulteriori informazioni)
- Corretto
- Ottimizzazione
sincos()
disattivata per la compatibilità con piattaforme precedenti.
- GCC 4.6 è ora la toolchain predefinita. Puoi impostare
- Opzioni di compilazione aggiornate per attivare il bit Never eXecute (NX) e le protezioni
relro
/bind_now
per impostazione predefinita:- Sono stati aggiunti
--noexecstack
all'assembler e-z noexecstack
al linker che fornisce protezione NX contro gli attacchi di overflow del buffer abilitando il bit NX sullo stack e sull'heap. - Sono stati aggiunti
-z relro
e-z now
al linker per l'hardening delle sezioni di dati interne dopo il collegamento per proteggersi dalle vulnerabilità di sicurezza causate dal danneggiamento della memoria. (maggiori informazioni: 1, 2) - Queste funzionalità possono essere disattivate utilizzando le seguenti opzioni:
- Disattiva la protezione NX impostando l'opzione
--execstack
per l'assembler e-z execstack
per il linker. - Disattiva l'hardening dei dati interni impostando le opzioni
-z norelro
e-z lazy
per il linker. - Disabilita queste protezioni nell'NDK
jni/Android.mk
impostando le seguenti opzioni:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Per maggiori dettagli, consulta
docs/ANDROID-MK.html
. - Disattiva la protezione NX impostando l'opzione
- Sono stati aggiunti
- È stata aggiunta la brandizzazione per gli eseguibili Android con la sezione
.note.ABI-tag
(incrtbegin_static/dynamic.o
) in modo che gli strumenti di debug possano agire di conseguenza. Il membro e i valori della struttura sono definiti come segue: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 */ }
- È stata aggiunta la toolchain GCC 4.6 (
- Altre correzioni di bug:
-
- È stato risolto il problema relativo al troncamento del trasferimento di
mips-linux-gnu
per adattarsi aR_MIPS_TLS_LDM
. (ulteriori informazioni) - Sono stati corretti gli errori di segmentazione dello strumento
ld
quando viene utilizzato--gc-sections
. (ulteriori informazioni) - Risolto il problema di conteggio
GOT_PAGE
MIPS. (ulteriori informazioni) - È stato corretto il link al simbolo di avviso di follow per
mips_elf_count_got_symbols
. - È stato corretto il link al simbolo di avviso di follow per
mips_elf_allocate_lazy_stub
. - È stato spostato MIPS
.dynamic
nel segmento di dati, in modo che sia scrivibile. - Sono stati sostituiti i valori hardcoded per i simboli con le dimensioni corrette dei segmenti per MIPS.
- È stata rimossa l'opzione
-mno-shared
dai valori predefiniti nella toolchain MIPS. Il valore predefinito per la toolchain Android è-fPIC
(o-fpic
se supportato). Se non specifichi esplicitamente-mshared
,-fpic
,-fPIC
,-fpie
o-fPIE
, il compilatore MIPS aggiunge-mno-shared
che disattiva PIC. È stato corretto il compilatore in modo che non aggiunga-mno-shared
in questo caso. - Sono stati corretti i nomi dei pacchetti errati negli esempi
hello-jni
etwo-libs
in modo che il progettotests
sottostante possa essere compilato.
- È stato risolto il problema relativo al troncamento del trasferimento di
- Altre modifiche:
-
- Posizioni modificate dei file binari:
- Elemento
gdbserver
spostato datoolchain/<arch-os-ver>/prebuilt/gdbserver
aprebuilt/android-<arch>/gdbserver/gdbserver
. - Il prefisso della toolchain x86 è stato rinominato da
i686-android-linux-
ai686-linux-android-
. sources/cxx-stl/gnu-libstdc++/include
elib
sono stati spostati insources/cxx-stl/gnu-libstdc++/4.6
se compilati con GCC 4.6 osources/cxx-stl/gnu-libstdc++/4.4.3
se compilati con GCC 4.4.3.- Elementi
libbfd.a
elibintl.a
spostati dalib/
alib32/
.
- Elemento
- Sono stati aggiunti e migliorati vari script nella toolchain NDK di ricompilazione e test:
- È stato aggiunto
build-mingw64-toolchain.sh
per generare una nuova toolchain ospitata su Linux che genera eseguibili Win32 e Win64. - Velocità migliorata di
download-toolchain-sources.sh
utilizzando il comandoclone
e utilizzandocheckout
solo per le directory necessarie per creare i file binari della toolchain NDK. - Sono stati aggiunti gli script
build-host-gcc.sh
ebuild-host-gdb.sh
. - È stato aggiunto
tests/check-release.sh
per controllare il contenuto di una determinata directory di installazione dell'NDK o di un pacchetto NDK esistente. - Sono stati riscritti i
tests/standalone/run.sh
test autonomi .
- È stato aggiunto
- Intestazione
if_dl.h
rimossa da tutte le piattaforme e le architetture. Gli elementiAF_LINK
esockaddr_dl
che descrive sono specifici di BSD (ovvero non esistono in Linux).
- Posizioni modificate dei file binari:
Android NDK r8 (maggio 2012)
Questa release dell'NDK include il supporto per l'ABI MIPS e alcune correzioni aggiuntive.
- Nuove funzionalità:
-
- Aggiunto il supporto per l'ABI MIPS, che consente di generare codice macchina eseguito su
dispositivi Android compatibili basati su MIPS. Le funzionalità principali per MIPS includono toolchain, intestazioni di sistema, librerie e supporto per il debug specifici per MIPS. Per ulteriori dettagli
sul supporto MIPS, consulta
docs/CPU-MIPS.html
nel pacchetto NDK.Per impostazione predefinita, il codice viene generato per i dispositivi basati su ARM. Puoi aggiungere
mips
alla definizione diAPP_ABI
nel fileApplication.mk
per la compilazione per le piattaforme MIPS. Ad esempio, la seguente riga indica andk-build
di compilare il codice per tre ABI distinte:APP_ABI := armeabi armeabi-v7a mips
A meno che tu non faccia affidamento su origini di assembly specifiche dell'architettura, come il codice assembly ARM, non dovresti dover modificare i file
Android.mk
per creare codice macchina MIPS. - Puoi creare una toolchain MIPS autonoma utilizzando l'opzione
--arch=mips
quando chiamimake-standalone-toolchain.sh
. Per ulteriori dettagli, consultadocs/STANDALONE-TOOLCHAIN.html
.
Nota:per garantire che le tue applicazioni siano disponibili per gli utenti solo se i loro dispositivi sono in grado di eseguirle, Google Play filtra le applicazioni in base alle informazioni sul set di istruzioni incluse nell'applicazione. non è necessario alcun intervento da parte tua per attivare il filtro. Inoltre, il sistema Android stesso controlla l'applicazione al momento dell'installazione e consente di continuare l'installazione solo se l'applicazione fornisce una libreria compilata per l'architettura della CPU del dispositivo.
- Aggiunto il supporto per l'ABI MIPS, che consente di generare codice macchina eseguito su
dispositivi Android compatibili basati su MIPS. Le funzionalità principali per MIPS includono toolchain, intestazioni di sistema, librerie e supporto per il debug specifici per MIPS. Per ulteriori dettagli
sul supporto MIPS, consulta
- Correzioni di bug importanti:
-
- Corretto un errore di battitura nell'implementazione di GAbi++ in cui il risultato di
dynamic_cast<D>(b)
dell'oggetto della classe baseb
alla classe derivataD
viene erroneamente modificato nella direzione opposta rispetto alla classe base. (Problema 28721) - Risolto un problema per cui
make-standalone-toolchain.sh
non riesce a copiarelibsupc++.*
.
- Corretto un errore di battitura nell'implementazione di GAbi++ in cui il risultato di
- Altre correzioni di bug:
-
- È stato corretto
ndk-build.cmd
per garantire chendk-build.cmd
funzioni correttamente anche se l'utente ha ridefinito la variabile di ambienteSHELL
, che potrebbe essere modificata durante l'installazione di una serie di strumenti di sviluppo negli ambienti Windows.
- È stato corretto
Android NDK r7c (aprile 2012)
Questa release dell'NDK include una correzione importante per i dispositivi basati su Tegra2 e alcuni miglioramenti e correzioni aggiuntivi:
- Correzioni di bug importanti:
-
- Sono stati corretti i file binari GNU STL armeabi-v7a in modo che non si arrestino in modo anomalo sui dispositivi non NEON. I file forniti con NDK r7b non sono stati configurati correttamente,
il che ha causato arresti anomali su dispositivi basati su Tegra2 e altri quando si tentava di utilizzare
determinate funzioni in virgola mobile (ad es.
cosf
,sinf
,expf
).
- Sono stati corretti i file binari GNU STL armeabi-v7a in modo che non si arrestino in modo anomalo sui dispositivi non NEON. I file forniti con NDK r7b non sono stati configurati correttamente,
il che ha causato arresti anomali su dispositivi basati su Tegra2 e altri quando si tentava di utilizzare
determinate funzioni in virgola mobile (ad es.
- Modifiche importanti:
-
- È stato aggiunto il supporto per le directory di output personalizzate tramite la variabile di ambiente
NDK_OUT
. Se definita, questa variabile viene utilizzata per archiviare tutti i file intermedi generati, anziché$PROJECT_PATH/obj
. La variabile è riconosciuta anche dandk-gdb
. - È stato aggiunto il supporto per la creazione di moduli con centinaia o addirittura migliaia di file di origine
definendo
LOCAL_SHORT_COMMANDS
cometrue
inAndroid.mk
.Questa modifica impone al sistema di compilazione NDK di inserire la maggior parte delle opzioni del linker o dell'archiviatore nei file di elenco, come soluzione alternativa alle limitazioni della lunghezza della riga di comando. Per i dettagli, visita la pagina
docs/ANDROID-MK.html
.
- È stato aggiunto il supporto per le directory di output personalizzate tramite la variabile di ambiente
- Altre correzioni di bug:
-
- È stata corretta l'implementazione di
android_getCpuCount()
nella libreria helpercpufeatures
. Su alcuni dispositivi, in cui i core vengono attivati dinamicamente dal sistema, l'implementazione precedente restituiva il numero totale di core attivi alla prima chiamata della funzione, anziché il numero totale di core fisicamente disponibili.
- È stata corretta l'implementazione di
Android NDK r7b (febbraio 2012)
Questa release dell'NDK include correzioni per le build native di Windows, Cygwin e molti altri miglioramenti:
- Correzioni di bug importanti:
-
sys/atomics.h
aggiornato per evitare problemi di correttezza su alcuni dispositivi multi-core basati su ARM. Ricompila le sorgenti non modificate con questa versione dell'NDK e questo problema dovrebbe essere completamente eliminato. Per maggiori dettagli, leggidocs/ANDROID-ATOMICS.html
.- È stato ripristinato
binutils
2.19 per risolvere i problemi di debug che si sono verificati in NDK r7 (che è passato abinutils
2.20.1). - È stato corretto
ndk-build
su Linux a 32 bit. Un errore di packaging ha inserito una versione a 64 bit dell'eseguibileawk
inprebuilt/linux-x86/bin
nell'NDK r7. - È stata corretta la build nativa di Windows (
ndk-build.cmd
). Le altre modalità di build non sono state interessate. Le correzioni includono:- È stato rimosso un bug di loop infinito / overflow dello stack che si verificava quando si tentava
di chiamare
ndk-build.cmd
da una directory che non si trovava nella parte superiore del percorso del progetto (ad esempio, in una sottodirectory). - È stato risolto un problema per cui i file di dipendenza generati automaticamente venivano ignorati. Ciò significava che l'aggiornamento di un'intestazione non attivava la ricompilazione delle origini che la includevano.
- È stato risolto un problema per cui i caratteri speciali in file o percorsi, diversi da spazi e virgolette, non venivano gestiti correttamente.
- È stato rimosso un bug di loop infinito / overflow dello stack che si verificava quando si tentava
di chiamare
- È stata corretta la toolchain autonoma per generare i binari corretti quando si utilizza
-lstdc++
(ovvero il collegamento al runtime C++ GNUlibstdc++
). Devi utilizzare-lgnustl_shared
se vuoi eseguire il collegamento alla versione della libreria condivisa o-lstdc++
per la versione statica.Per ulteriori dettagli su questa correzione, consulta
docs/STANDALONE-TOOLCHAIN.html
. - Risolto il problema
gnustl_shared
su Cygwin. Il linker ha segnalato che non è stato possibile trovarelibsupc++.a
anche se il file si trovava nella posizione corretta. - Corretto il collegamento C++ di Cygwin quando non si utilizza alcun runtime C++ specifico tramite
APP_STL
.
- Altre modifiche:
-
- Quando la tua applicazione utilizza il runtime GNU
libstdc++
, il compilatore non abiliterà più forzatamente eccezioni e RTTI. Questa modifica comporta un codice più piccolo.Se hai bisogno di queste funzionalità, devi effettuare una delle seguenti operazioni:
- Attiva le eccezioni e/o RTTI in modo esplicito nei moduli o
Application.mk
. (consigliato) - Definisci
APP_GNUSTL_FORCE_CPP_FEATURES
su'exceptions'
,'rtti'
o entrambi nel tuoApplication.mk
. Per maggiori dettagli, consultadocs/APPLICATION-MK.html
.
- Attiva le eccezioni e/o RTTI in modo esplicito nei moduli o
ndk-gdb
ora funziona correttamente quando l'applicazione ha servizi privati in esecuzione in processi indipendenti. Esegue il debug del processo dell'applicazione principale, anziché del primo processo elencato daps
, che di solito è un processo di servizio.- È stato corretto un bug raro per cui NDK r7 non rispettava il valore
LOCAL_ARM_MODE
e compilava sempre alcuni file di origine (ma non tutti) in istruzioni a 32 bit. STLport
: aggiorna le origini in modo che corrispondano alla versione della piattaforma Android. Questo aggiornamento corregge alcuni bug minori:- È stata corretta l'istanza di un tipo incompleto
- È stato corretto un errore di battitura minore "==" anziché "="
- Utilizzato
memmove
invece dimemcpy
instring::assign
- È stata aggiunta una migliore gestione di
IsNANorINF
,IsINF
,IsNegNAN
, ecc.
Per tutti i dettagli, consulta il log dei commit.
STLport
: sono stati rimossi 5 inizializzatori statici non necessari dalla libreria.- Le librerie GNU libstdc++ per armeabi-v7a sono state compilate per errore per armeabi. Questa modifica non ha influito sulla correttezza, ma l'utilizzo dell'ABI corretta dovrebbe garantire prestazioni leggermente migliori.
- La libreria helper
cpu-features
è stata aggiornata per segnalare tre funzionalità CPU x86 facoltative (SSSE3
,MOVBE
ePOPCNT
). Per maggiori dettagli, consultadocs/CPU-FEATURES.html
. docs/NDK-BUILD.html
è stato aggiornato per menzionareNDK_APPLICATION_MK
anzichéNDK_APP_APPLICATION_MK
per selezionare un fileApplication.mk
personalizzato.- Cygwin:
ndk-build
non crea più un file "NUL" vuoto nella directory attuale quando viene richiamato. - Cygwin: è stato aggiunto un migliore rilevamento automatico delle dipendenze. Nella versione precedente, non
funzionava correttamente nei seguenti casi:
- Quando il prefisso dell'unità Cygwin non era
/cygdrive
. - Quando si utilizzano montaggi senza unità, ad esempio quando Cygwin traduce
/home
in\\server\subdir
anziché inC:\Some\Dir
.
- Quando il prefisso dell'unità Cygwin non era
- Cygwin:
ndk-build
non tenta di utilizzare gli strumenti Windows nativi in$NDK/prebuilt/windows/bin
con alcune versioni di Cygwin e/o GNU Make.
- Quando la tua applicazione utilizza il runtime GNU
Android NDK r7 (novembre 2011)
Questa release dell'NDK include nuove funzionalità per supportare anche la piattaforma Android 4.0, nonché molte altre aggiunte e miglioramenti:
- Nuove funzionalità
-
- Sono state aggiunte API NDK ufficiali per Android 4.0 (livello API 14), che aggiungono le seguenti
funzionalità native alla piattaforma:
- È stata aggiunta un'API multimediale nativa basata sullo standard Khronos Group OpenMAX AL 1.0.1. Le nuove intestazioni
<OMXAL/OpenMAXAL.h>
e<OMXAL/OpenMAXAL_Android.h>
consentono alle applicazioni che hanno come target il livello API 14 di eseguire l'output multimediale direttamente dal codice nativo utilizzando una nuova interfaccia di coda del buffer specifica per Android. Per maggiori dettagli, vedidocs/openmaxal/index.html
e http://www.khronos.org/openmax/. - È stata aggiornata l'API audio nativa in base allo standard OpenSL ES 1.0.1 del Khronos Group. Con il livello API 14, ora puoi decodificare l'audio compresso (ad es. MP3, AAC,
Vorbis) in PCM. Per ulteriori dettagli, consulta
docs/opensles/index.html
e http://www.khronos.org/opensles/.
- È stata aggiunta un'API multimediale nativa basata sullo standard Khronos Group OpenMAX AL 1.0.1. Le nuove intestazioni
- Aggiunto il supporto di CCache. Per velocizzare le ricompilazioni di grandi dimensioni, definisci la variabile di ambiente
NDK_CCACHE
succache
(o sul percorso del tuo binarioccache
). Se dichiarata, il sistema di build NDK utilizza automaticamente CCache durante la compilazione di qualsiasi file sorgente. Ad esempio:export NDK_CCACHE=ccache
Nota:CCache non è incluso nella release dell'NDK, quindi devi installarlo prima di utilizzarlo. Per ulteriori informazioni su CCache, visita il sito http://ccache.samba.org.
- È stato aggiunto il supporto per l'impostazione di
APP_ABI
suall
per indicare che vuoi creare i moduli NDK per tutte le ABI supportate dalla versione NDK specificata. Ciò significa che una delle due righe seguenti nel tuoApplication.mk
sono equivalenti a questa release:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Questa operazione funziona anche se definisci
APP_ABI
quando chiamindk-build
dalla riga di comando, che è un modo rapido per verificare che la compilazione del progetto avvenga per tutte le ABI supportate senza modificareApplication.mk file
del progetto. Ad esempio:ndk-build APP_ABI=all
- È stata aggiunta una variabile
LOCAL_CPP_FEATURES
inAndroid.mk
che consente di dichiarare quali funzionalità C++ (RTTI o eccezioni) utilizza il modulo. In questo modo, il collegamento finale funziona correttamente se hai moduli predefiniti che dipendono da queste funzionalità. Per maggiori dettagli, consultadocs/ANDROID-MK.html
edocs/CPLUSPLUS-SUPPORT.html
. - Percorsi abbreviati dei file di origine e degli oggetti utilizzati nei comandi di compilazione. Quando
richiami
$NDK/ndk-build
dal percorso del progetto, i percorsi dei file di origine, oggetto e binari passati ai comandi di compilazione sono ora molto più brevi, perché vengono passati in relazione alla directory corrente. Questa opzione è utile quando crei progetti con molti file sorgente, per evitare i limiti alla lunghezza massima della riga di comando supportata dal sistema operativo host. Il comportamento rimane invariato se richiamindk-build
da una sottodirectory dell'albero del progetto o se definisciNDK_PROJECT_PATH
in modo che punti a una directory specifica.
- Sono state aggiunte API NDK ufficiali per Android 4.0 (livello API 14), che aggiungono le seguenti
funzionalità native alla piattaforma:
- Funzionalità sperimentali
-
Ora puoi creare i file di origine NDK su Windows senza Cygwin chiamando lo script
ndk-build.cmd
dalla riga di comando dal percorso del progetto. Lo script accetta esattamente gli stessi argomenti dello scriptndk-build
originale. Il pacchetto Windows NDK include i propri file binari precompilati per GNU Make, Awk e altri strumenti richiesti dalla build. Non dovresti aver bisogno di installare altro per ottenere un sistema di build funzionante.Importante:
ndk-gdb
non funziona su Windows, quindi hai comunque bisogno di Cygwin per il debug.Questa funzionalità è ancora sperimentale, quindi non esitare a provarla e a segnalare problemi nel database pubblico dei bug o nel forum pubblico. Tutti gli esempi e i test delle unità inclusi nell'NDK vengono compilati correttamente con questa funzionalità.
- Correzioni di bug importanti
-
- Le librerie condivise importate vengono ora installate per impostazione predefinita nella posizione di installazione di destinazione (
libs/<abi>
) seAPP_MODULES
non è definito inApplication.mk
. Ad esempio, se un modulo di primo livellofoo
importa un modulobar
, sialibfoo.so
chelibbar.so
vengono copiati nella posizione di installazione. In precedenza, veniva copiato sololibfoo.so
, a meno che non avessi elencatobar
anche inAPP_MODULES
. Se definisciAPP_MODULES
in modo esplicito, il comportamento rimane invariato. ndk-gdb
ora funziona correttamente per le attività con più categorie nei filtri per intent MAIN.- Ora le importazioni di librerie statiche sono transitive. Ad esempio, se un modulo di primo livello
foo
importa la libreria staticabar
che importa la libreria staticazoo
,libfoo.so
verrà ora collegato alibbar.a
elibzoo.a
.
- Le librerie condivise importate vengono ora installate per impostazione predefinita nella posizione di installazione di destinazione (
- Altre modifiche
-
docs/NATIVE-ACTIVITY.HTML
: Correzione di un errore di battitura. Il livello API minimo deve essere 9, non 8 per le attività native.docs/STABLE-APIS.html
: è stata aggiunta la documentazione mancante che elenca EGL come API stabile supportata, a partire dal livello API 9.download-toolchain-sources.sh
: aggiornato per scaricare le origini della toolchain da android.googlesource.com, che è la nuova posizione dei server AOSP.- È stato aggiunto un nuovo runtime di supporto C++ denominato
gabi++
. Maggiori dettagli sono disponibili nell'docs/CPLUSPLUS-SUPPORT.html
aggiornato. - È stato aggiunto un nuovo runtime di supporto C++ denominato
gnustl_shared
che corrisponde alla versione della libreria condivisa di GNU libstdc++ v3 (licenza GPLv3). Scopri di più sudocs/CPLUSPLUS-SUPPORT.html
- È stato aggiunto il supporto per RTTI nei runtime C++ STLport (nessun supporto per le eccezioni).
- È stato aggiunto il supporto per più estensioni dei file in
LOCAL_CPP_EXTENSION
. Ad esempio, per compilare siafoo.cpp
chebar.cxx
come origini C++, dichiara quanto segue:LOCAL_CPP_EXTENSION := .cpp .cxx
- Sono stati rimossi molti simboli esportati indesiderati dalle librerie di sistema condivise in fase di collegamento fornite dall'NDK. In questo modo, il codice generato con la toolchain autonoma non rischia di dipendere accidentalmente da un simbolo ABI non stabile (ad es. qualsiasi simbolo libgcc.a che cambia ogni volta che viene modificata la toolchain utilizzata per creare la piattaforma)
- Sono state aggiornate le intestazioni EGL e OpenGLES Khronos per supportare più estensioni. Tieni presente
che questa operazione non modifica le ABI NDK per le librerie corrispondenti,
perché ogni estensione deve essere analizzata in fase di runtime dall'applicazione client.
Le estensioni disponibili dipendono dal dispositivo e dai driver della GPU effettivi, non dalla versione della piattaforma su cui viene eseguito il dispositivo. Le modifiche all'intestazione aggiungono semplicemente nuove costanti e tipi per semplificare l'utilizzo delle estensioni quando sono state testate con
eglGetProcAddress()
oglGetProcAddress()
. Il seguente elenco descrive le estensioni appena supportate:- 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 2011)
Questa release dell'NDK non include nuove funzionalità rispetto alla r6. La release r6b risolve i seguenti problemi della release r6:
- Correzioni di bug importanti
-
- È stata corretta la build quando
APP_ABI="armeabi x86"
viene utilizzato per build multi-architettura. - È stata corretta la posizione dei file binari STLport precompilati nel pacchetto di rilascio dell'NDK. Un bug nello script di packaging li ha posizionati nella posizione errata.
- Utilizzo di
atexit()
fisso nelle librerie condivise con la toolchain x86standalone. - Fissa
make-standalone-toolchain.sh --arch=x86
. In precedenza, non riusciva a copiare i binari GNU libstdc++ corretti nella posizione giusta. - Sono stati corretti gli avvisi del linker della toolchain autonoma relativi alla definizione e
alle dimensioni mancanti per il simbolo
__dso_handle
(solo ARM). - È stato corretto l'ordine di inclusione di
$(SYSROOT)/usr/include
per le build x86. Per ulteriori informazioni, consulta il bug. - Sono state corrette le definizioni di
ptrdiff_t
esize_t
nei sistemi specifici per x86 quando vengono utilizzati con la toolchain autonoma x86.
- È stata corretta la build quando
Android NDK r6 (luglio 2011)
Questa release dell'NDK include il supporto dell'ABI x86 e altre modifiche minori.
Per informazioni dettagliate che descrivono le modifiche in questa release, leggi il
documento CHANGES.HTML
incluso nel pacchetto NDK.
- Note generali:
-
- Aggiunge il supporto per l'ABI x86, che consente di generare codice macchina
che viene eseguito su dispositivi Android compatibili basati su x86. Le principali funzionalità per x86
includono toolchain, intestazioni di sistema, librerie e
supporto per il debug specifici per x86. Per tutti i dettagli relativi al supporto x86,
consulta
docs/CPU-X86.html
nel pacchetto NDK.Per impostazione predefinita, il codice viene generato per i dispositivi basati su ARM, ma puoi aggiungere x86 alla definizione di
APP_ABI
nel fileApplication.mk
per la compilazione per le piattaforme x86. Ad esempio, la seguente riga indica andk-build
di compilare il codice per tre ABI distinte:APP_ABI := armeabi armeabi-v7a x86
A meno che tu non utilizzi origini di assembly basate su ARM, non dovresti dover modificare i file
Android.mk
per creare codice macchina x86. - Puoi creare una toolchain x86 autonoma utilizzando l'opzione
--toolchain=x86-4.4.3
quando chiamimake-standalone-toolchain.sh
. Per ulteriori dettagli, consultadocs/STANDALONE-TOOLCHAIN.html
. - Il nuovo strumento
ndk-stack
ti consente di tradurre gli stack trace inlogcat
generati dal codice nativo. Lo strumento traduce gli indirizzi delle istruzioni in un formato leggibile che contiene elementi come la funzione, il file di origine e il numero di riga corrispondente a ogni stack frame. Per ulteriori informazioni e un esempio di utilizzo, vedidocs/NDK-STACK.html
.
- Aggiunge il supporto per l'ABI x86, che consente di generare codice macchina
che viene eseguito su dispositivi Android compatibili basati su x86. Le principali funzionalità per x86
includono toolchain, intestazioni di sistema, librerie e
supporto per il debug specifici per x86. Per tutti i dettagli relativi al supporto x86,
consulta
- Altre modifiche:
arm-eabi-4.4.0
, deprecato da NDK r5, è stato rimosso dalla distribuzione NDK.
Android NDK r5c (giugno 2011)
Questa release dell'NDK non include nuove funzionalità rispetto alla r5b. La release r5c risolve i seguenti problemi della release r5b:
- Correzioni di bug importanti:
-
ndk-build
: È stato corretto un bug raro che si verificava quando si tentava di eseguire build parallele di progetti di cui è possibile eseguire il debug.- È stato corretto un errore di battitura che impediva il funzionamento di
LOCAL_WHOLE_STATIC_LIBRARIES
corretto con la nuova toolchain ed è stata aggiunta la documentazione relativa indocs/ANDROID-MK.html
. - È stato corretto un bug per cui il codice collegato a
gnustl_static
si arrestava in modo anomalo quando veniva eseguito su versioni della piattaforma precedenti al livello API 8 (Android 2.2). ndk-gdb
: È stato corretto un bug che causava un errore di segmentazione durante il debug di dispositivi Android 3.0 o versioni successive.<android/input.h>
: sono state corrette due funzioni introdotte nel livello API 9 (Android 2.3). Sebbene ciò interrompa l'API di origine, l'interfaccia binaria del sistema rimane invariata. Le funzioni errate non avevano un parametrohistory_index
e le definizioni corrette sono mostrate di seguito: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);
- È stato aggiornato il binario ARM della libreria C per il livello API 9 (Android 2.3) in modo da esporre correttamente in fase di collegamento le nuove funzioni aggiunte a questo livello API (ad esempio,
pthread_rwlock_init
).
- Miglioramenti e correzioni minori:
-
- Ora i file oggetto sono sempre collegati nell'ordine in cui vengono visualizzati in
LOCAL_SRC_FILES
. In precedenza non era così perché i file venivano raggruppati in base alle estensioni delle origini. - Quando
import-module
non va a buon fine, ora stampa l'elenco delle directory in cui è stata eseguita la ricerca. È utile per verificare che la definizione diNDK_MODULE_PATH
utilizzata dal sistema di compilazione sia corretta. - Quando
import-module
ha esito positivo, ora stampa la directory in cui è stato trovato il modulo nel log (visibile conNDK_LOG=1
). - È stata aumentata la velocità di compilazione delle applicazioni di cui è possibile eseguire il debug quando nel progetto è presente un numero molto elevato di directory di inclusione.
ndk-gdb
: Migliore rilevamento degli erroriadb shell
e messaggi di errore migliorati.<pthread.h>
: è stata corretta la definizione diPTHREAD_RWLOCK_INITIALIZER
per il livello API 9 (Android 2.3) e versioni successive.- Risolto un problema per cui un modulo poteva importare se stesso, causando un ciclo infinito in GNU Make.
- È stato corretto un bug che causava l'errore della build se
LOCAL_ARM_NEON
era impostato su true (errore ortografico inbuild/core/build-binary.mk
). - È stato corretto un bug che impediva la compilazione dei file di assembly
.s
(i file.S
funzionavano correttamente).
- Ora i file oggetto sono sempre collegati nell'ordine in cui vengono visualizzati in
Android NDK r5b (gennaio 2011)
Questa release dell'NDK non include nuove funzionalità rispetto alla r5. La release r5b risolve i seguenti problemi della release r5:
- I file binari r5 richiedono glibc 2.11, ma i file binari r5b vengono generati con una toolchain speciale che ha come target glibc 2.7 o versioni successive. I binari della toolchain Linux ora vengono eseguiti su Ubuntu 8.04 o versioni successive.
- Corregge un bug del compilatore nella toolchain arm-linux-androideabi-4.4.3. Il precedente binario generava sequenze di istruzioni Thumb non valide quando gestiva caratteri firmati.
- Aggiunge la documentazione mancante per il valore "gnustl_static" per APP_STL, che consente di collegarsi a una versione della libreria statica di GNU libstdc++. la
- Sono stati risolti i seguenti problemi relativi a
ndk-build
:- Un bug che creava file di dipendenza incoerenti quando si verificava un errore di compilazione su Windows. Ciò ha impedito una compilazione corretta dopo la correzione dell'errore nel codice sorgente.
- Un bug specifico di Cygwin in cui l'utilizzo di percorsi molto brevi per l'installazione di Android NDK o il percorso del progetto ha portato alla generazione di file di dipendenze non validi. Ciò ha reso impossibile le build incrementali.
- Un errore di battitura che impediva il corretto funzionamento della libreria cpufeatures con la nuova toolchain NDK.
- Le build in Cygwin sono più veloci perché evitano le chiamate a
cygpath -m
da GNU Make per ogni file di origine o oggetto, il che causava problemi con alberi di origine molto grandi. Se non funziona correttamente, definisciNDK_USE_CYGPATH=1
nel tuo ambiente per utilizzare di nuovocygpath -m
. - L'installazione di Cygwin ora avvisa l'utente dei percorsi di installazione non validi che contengono spazi. In precedenza, un percorso non valido restituiva un errore che segnalava una versione errata di GNU Make, anche se era installata quella corretta.
- È stato corretto un errore di battitura che impediva il corretto funzionamento della variabile di ambiente
NDK_MODULE_PATH
quando conteneva più directory separate da due punti. - Lo script
prebuilt-common.sh
contiene correzioni per controllare il compilatore per il codice macchina generato a 64 bit, anziché fare affidamento al tag host, il che consente alla toolchain a 32 bit di ricompilare correttamente su Snow Leopard. Gli script di ricompilazione della toolchain ora supportano anche l'utilizzo di una toolchain host a 32 bit. - È stata aggiunta una dichiarazione mancante per
INET_ADDRSTRLEN
a<netinet/in.h>
. - Sono state aggiunte a
<netinet/in6.h>
le dichiarazioni mancanti perIN6_IS_ADDR_MC_NODELOCAL
eIN6_IS_ADDR_MC_GLOBAL
. - "asm" è stato sostituito con "__asm__" in
<asm/byteorder.h>
per consentire la compilazione con-std=c99
.
Android NDK r5 (dicembre 2010)
Questa release dell'NDK include molte nuove API, la maggior parte delle quali sono state introdotte per
supportare lo sviluppo di giochi e applicazioni simili che utilizzano ampiamente
codice nativo. Utilizzando le API, gli sviluppatori hanno accesso nativo diretto a eventi, audio,
grafica e gestione delle finestre, asset e spazio di archiviazione. Gli sviluppatori possono anche implementare il ciclo di vita dell'applicazione Android in codice nativo con l'aiuto della nuova classe NativeActivity
. Per informazioni dettagliate che descrivono le modifiche
in questa
release, leggi il documento CHANGES.HTML
incluso nel pacchetto NDK scaricato.
- Note generali:
-
- Aggiunge il supporto per le attività native, che ti consente di implementare il ciclo di vita dell'applicazione Android nel codice nativo.
- Aggiunge il supporto nativo per quanto segue:
- Sottosistema di input (ad esempio tastiera e touch screen)
- Accesso ai dati dei sensori (accelerometro, bussola, giroscopio e così via).
- API del ciclo di eventi per attendere eventi di input e sensori.
- Sottosistema di finestre e superfici
- API audio basate sullo standard OpenSL ES che supportano la riproduzione e la registrazione nonché il controllo degli effetti audio della piattaforma
- Accesso agli asset inclusi in un file
.apk
.
- Include una nuova toolchain (basata su GCC 4.4.3), che genera codice migliore e ora può essere utilizzata anche come cross-compiler autonomo per chi vuole creare i propri contenuti con
./configure && make
. Per i dettagli, consulta docs/STANDALONE-TOOLCHAIN.html. I file binari per GCC 4.4.0 sono ancora forniti, ma i file binari 4.2.1 sono stati rimossi. - Aggiunge il supporto per le librerie statiche e condivise precompilate (docs/PREBUILTS.html) e per le esportazioni e le importazioni dei moduli per semplificare notevolmente la condivisione e il riutilizzo di moduli di terze parti (docs/IMPORT-MODULE.html spiega il motivo).
- Fornisce un'implementazione STL C++ predefinita (basata su STLport) come modulo helper. Può essere utilizzata come libreria statica o condivisa (i dettagli e gli esempi di utilizzo sono disponibili in sources/android/stlport/README). Se scegli di eseguire la compilazione in base a queste librerie anziché all'implementazione STL C++ predefinita, vengono forniti anche i file binari precompilati per STLport (statici o condivisi) e GNU libstdc++ (solo statici). Le eccezioni C++ e RTTI non sono supportate nell'implementazione STL predefinita. Per ulteriori informazioni, consulta docs/CPLUSPLUS-SUPPORT.HTML.
- Include miglioramenti alla libreria di supporto
cpufeatures
che migliorano la segnalazione del tipo di CPU (in precedenza alcuni dispositivi segnalavano la CPU ARMv7 quando in realtà era una CPU ARMv6). Consigliamo agli sviluppatori che utilizzano questa libreria di ricompilare le proprie applicazioni e poi caricarle su Google Play per usufruire dei miglioramenti. - Aggiunge una libreria EGL che consente di creare e gestire texture e servizi OpenGL ES.
- Aggiunge nuove applicazioni di esempio,
native-plasma
enative-activity
, per mostrare come scrivere un'attività nativa. - Include molte correzioni di bug e altri piccoli miglioramenti. Per un elenco più dettagliato delle modifiche, consulta docs/CHANGES.html.
Android NDK r4b (giugno 2010)
- Note di NDK r4b:
-
Include correzioni per diversi problemi negli script di build e debug dell'NDK. Se utilizzi NDK r4, ti consigliamo di scaricare la build NDK r4b. Per informazioni dettagliate che descrivono le modifiche in questa release, leggi il documento CHANGES.TXT incluso nel pacchetto NDK scaricato.
- Note generali:
-
- Fornisce un sistema di compilazione semplificato tramite il nuovo comando
ndk-build
. - Aggiunge il supporto per il debug nativo semplificato del codice macchina generato sui dispositivi di produzione tramite il nuovo comando
ndk-gdb
. - Aggiunge una nuova ABI specifica per Android per le architetture CPU basate su ARM,
armeabi-v7a
. La nuova ABI estende l'ABIarmeabi
esistente per includere queste estensioni del set di istruzioni della CPU:- Istruzioni per Thumb-2
- Istruzioni FPU hardware VFP (VFPv3-D16)
- Supporto facoltativo per gli intrinseci GCC ARM Advanced SIMD (NEON) e VFPv3-D32. Supportato da dispositivi come Verizon Droid by Motorola, Google Nexus One e altri.
- Aggiunge una nuova libreria statica
cpufeatures
(con sorgenti) che consente alla tua app di rilevare le funzionalità della CPU del dispositivo host in fase di runtime. In particolare, le applicazioni possono verificare il supporto di ARMv7-A, nonché di VFPv3-D32 e NEON, quindi fornire percorsi di codice separati in base alle necessità. - Aggiunge un'applicazione di esempio,
hello-neon
, che illustra come utilizzare la libreriacpufeatures
per controllare le funzionalità della CPU e quindi fornire un percorso di codice ottimizzato utilizzando le funzioni intrinseche NEON, se supportate dalla CPU. - Consente di generare codice macchina per uno o entrambi i set di istruzioni supportati
dall'NDK. Ad esempio, puoi creare per le architetture ARMv5 e ARMv7-A contemporaneamente e archiviare tutto nel
.apk
finale dell'applicazione. - Per garantire che le tue applicazioni siano disponibili per gli utenti solo se i loro dispositivi sono in grado di eseguirle, Google Play ora filtra le applicazioni in base alle informazioni sul set di istruzioni incluse nell'applicazione. Non è necessario alcun intervento da parte tua per attivare il filtro. Inoltre, il sistema Android stesso controlla l'applicazione al momento dell'installazione e consente di continuare l'installazione solo se l'applicazione fornisce una libreria compilata per l'architettura della CPU del dispositivo.
- Aggiunge il supporto per Android 2.2, inclusa una nuova API stabile per accedere ai buffer
di pixel degli oggetti
Bitmap
dal codice nativo.
- Fornisce un sistema di compilazione semplificato tramite il nuovo comando
Android NDK r3 (marzo 2010)
- Note generali:
-
- Aggiunge il supporto della libreria nativa OpenGL ES 2.0.
- Aggiunge un'applicazione di esempio,
hello-gl2
, che illustra l'utilizzo di shader di vertici e frammenti OpenGL ES 2.0. - I binari della toolchain sono stati aggiornati per questa release con GCC 4.4.0, che dovrebbe generare un codice macchina leggermente più compatto ed efficiente rispetto a quello precedente (4.2.1). L'NDK fornisce ancora i binari 4.2.1, che puoi utilizzare facoltativamente per creare il tuo codice macchina.
Android NDK r2 (settembre 2009)
Originariamente rilasciato come "Android 1.6 NDK, Release 1".
- Note generali:
-
- Aggiunge il supporto della libreria nativa OpenGL ES 1.1.
- Aggiunge un'applicazione di esempio,
san-angeles
, che esegue il rendering della grafica 3D tramite le API OpenGL ES native, gestendo il ciclo di vita dell'attività con un oggettoGLSurfaceView
.
Android NDK r1 (giugno 2009)
Originariamente rilasciato come "Android 1.5 NDK, Release 1".
- Note generali:
-
- Include il supporto del compilatore (GCC) per le istruzioni ARMv5TE, incluse le istruzioni Thumb-1.
- Include intestazioni di sistema per API native stabili, documentazione e applicazioni di esempio.