Questa pagina fornisce informazioni sulle modifiche apportate in tutte le versioni stabili rilasciate dell'NDK. Per scaricare l'ultima versione stabile dell'NDK o una versione beta attualmente disponibile, consulta la pagina relativa ai download di NDK.
Per informazioni più complete, consulta il gruppo Google android-ndk-announce e iscriviti per ricevere annunci delle release.
Android NDK r26 LTS (settembre 2023)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
- Lollipop (API 19 e 20) non è più supportato.
Android NDK r25 LTS (luglio 2022)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
- Include le API di Android 13.
- LLVM aggiornato a clang-r450784d, basato sullo sviluppo di LLVM 14.
Android NDK r24 (marzo 2022)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
GNU Assembler (GAS) è stato rimosso. Se stai creando con
-fno-integrated-as
, dovrai rimuovere il flag. Consulta le note sulla migrazione Clang per suggerimenti su come rendere l'assemblaggio compatibile con LLVM. - GDB è stato rimosso. Utilizza invece LLDB. Tieni presente che ndk-gdb utilizza LLDB per impostazione predefinita, mentre Android Studio ha supportato solo LLDB.
- Jelly Bean (API 16, 17 e 18) non è più supportata. Il sistema operativo minimo supportato da NDK è Lollipop (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 se ne accorgerà, a parte il miglioramento delle prestazioni.
- Il supporto alla build RenderScript è stato rimosso. RenderScript è stato deprecato 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 stai creando con
Android NDK r23 LTS (agosto 2021)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
GNU binutils, escluso GNU Assembler (GAS), è stato rimosso. GAS verrà rimosso nella prossima release. Se stai creando con
-fno-integrated-as
, segnala bug se qualcosa ti impedisce di rimuovere il flag. -
Il supporto per GDB non è più supportato. GDB verrà rimosso dalla prossima release.
Utilizza invece LLDB. Tieni presente che
ndk-gdb
utilizza LLDB per impostazione predefinita. - NDK r23 è l'ultima release che supporterà le versioni non Neon. A partire da NDK r24, le librerie armeabi-v7a in sysroot saranno create con Neon. Un numero molto ridotto di dispositivi molto vecchi non supporta Neon, pertanto la maggior parte delle app non se ne accorgerà, a parte il miglioramento delle prestazioni.
- Jelly Bean (API 16, 17 e 18) non sarà supportata nella prossima release di NDK. Il sistema operativo minimo supportato da NDK per r24 sarà Lollipop (livello API 19).
-
GNU binutils, escluso GNU Assembler (GAS), è stato rimosso. GAS verrà rimosso nella prossima release. Se stai creando con
Android NDK r22b (marzo 2021)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
GNU binutils è deprecato e verrà rimosso in una prossima release NDK. Tieni presente che l'assemblatore GNU (
as
) fa parte di questo processo. Se stai creando con-fno-integrated-as
, segnala bug se qualcosa ti impedisce di rimuovere il flag. Se utilizzias
direttamente, usaclang
. - LLD è ora il linker predefinito. È stata eseguita la migrazione di ndk-build e del nostro file Toolchain CMake a utilizzando llvm-ar e llvm-strip.
- ndk-gdb ora utilizza lldb come debugger. gdb è deprecato e verrà rimosso in una release futura. Per ricorrere a gdb, utilizza l'opzione --no-lldb. Tuttavia, segnala un bug spiegando il motivo per cui non hai potuto utilizzare lldb.
-
È ora inclusa l'assistenza
std::filesystem
. Esistono due problemi noti:-
Problema 1258:
std::filesystem::perm_options::nofollow
potrebbe non essere applicato sui vecchi dispositivi. -
Problema 1260:
std::filesystem::canonical
non va a buon fine se viene passato un percorso inesistente su dispositivi precedenti.
-
Problema 1258:
-
GNU binutils è deprecato e verrà rimosso in una prossima release NDK. Tieni presente che l'assemblatore GNU (
Android NDK r21e LTS (gennaio 2021)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
Windows a 32 bit non è più supportato. Questo non influisce sulla stragrande maggioranza degli utenti. Se devi comunque creare app NDK da versioni a 32 bit di Windows, continua a utilizzare NDK r20.
Per maggiori informazioni su questa modifica all'interno degli Strumenti per sviluppatori Android, consulta il post del blog sull'argomento.
-
LLD è ora disponibile per i test.
AOSP è passato all'utilizzo dell'LLD per impostazione predefinita e l'NDK seguirà
(sequenza temporale sconosciuta). Testa LLD nella tua app passando
-fuse-ld=lld
durante il collegamento. Tieni presente che il Problema 843 influirà sulle build che utilizzano LLD con binutils strip e objcopy anziché llvm-strip e llvm-objcopy. -
I percorsi di installazione della Toolchain legacy verranno rimossi nelle prossime release. Questi percorsi sono obsoleti da NDK r19 e occupano una notevole quantità di spazio nell'NDK. I percorsi da rimuovere sono:
- piattaforme
- sorgenti/cxx-stl
- Sysroot
- strumentochains (con l'eccezione di strumentochains/llvm)
make_standalone_toolchain.py
(sebbene questo script sia superfluo dalla versione r19). Per informazioni sulla migrazione dal layout Toolchain legacy, consulta la Guida per i manutentori del sistema di creazione per la versione NDK che stai utilizzando. - Il Play Store richiederà il supporto del formato a 64 bit per il caricamento di un APK a partire da agosto 2019. Inizia subito a eseguire il trasferimento per evitare sorprese quando sarà il momento. Per maggiori informazioni, consulta questo post del blog.
- Un app bundle macOS firmato e autenticato ora è disponibile per il download dal nostro wiki e dal nostro sito web. Tieni presente che, poiché solo i pacchetti possono utilizzare RPATH e la notarizzazione pass, il pacchetto NDK tradizionale per macOS non può essere autenticato. L'SDK continuerà a utilizzare il pacchetto tradizionale poiché 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 il gestore dell'SDK, pertanto è attualmente consentito da Gatekeeper. Attualmente il gestore SDK è il modo più affidabile per ottenere l'NDK per macOS.
-
Android NDK r20b (giugno 2019)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
LLD è ora disponibile per i test.
L'AOSP sta passando all'utilizzo dell'LLD per impostazione predefinita e seguirà l'NDK (tempiatura sconosciuta). Testa LLD nella tua app superando
-fuse-ld=lld
durante il collegamento. - Il Play Store richiederà il supporto del formato a 64 bit per il caricamento di un APK a partire da agosto 2019. Inizia subito a eseguire il trasferimento per evitare sorprese quando sarà il momento. Per maggiori informazioni, consulta questo post del blog.
- API Android Q aggiunte.
-
LLD è ora disponibile per i test.
L'AOSP sta passando all'utilizzo dell'LLD per impostazione predefinita e seguirà l'NDK (tempiatura sconosciuta). Testa LLD nella tua app superando
Android NDK r19c (gennaio 2019)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
-
Gli sviluppatori devono iniziare a testare le loro app con LLD. AOSP è passato all'utilizzo di LLD per impostazione predefinita e NDK lo userà per impostazione predefinita nella prossima release. BFD e Gold verranno rimossi una volta che l'LLD avrà superato un ciclo di rilascio senza problemi critici non risolti (r21 stimato). Testa l'LLD nella tua app passando
-fuse-ld=lld
durante il collegamento. Nota: al momento lld non supporta i simboli compressi su Windows. Numero 888. Inoltre, Clang non può generare simboli compressi su Windows, ma questo può essere un problema quando utilizzi artefatti creati da Darwin o Linux. - Il Play Store richiederà il supporto del formato a 64 bit per il caricamento di un APK a partire da agosto 2019. Inizia subito a eseguire il trasferimento per evitare sorprese quando sarà il momento. Per maggiori informazioni, consulta questo post del blog.
-
Problema 780:
le Toolchain indipendenti ora non sono più necessarie. Clang, binutils, sysroot e altri componenti della Toolchain sono ora tutti installati in
$NDK/toolchains/llvm/prebuilt/<host-tag>
e Clang li troverà automaticamente. Invece di creare una Toolchain autonoma per l'API ARM dell'API 26, richiama il compilatore direttamente dall'NDK:$ $NDK/toolchains/llvm/prebuilt/
Per r19, la Toolchain viene installata anche nel percorso precedente per dare ai sistemi di build la possibilità di adattarsi al nuovo layout. I vecchi percorsi verranno rimossi in r20. Lo script/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
non verrà rimosso. Ora non è necessario ed emetterà un avviso con le informazioni precedenti, ma lo script continuerà a preservare i flussi di lavoro esistenti. Se utilizzi ndk-build, CMake o una Toolchain autonoma, il flusso di lavoro non deve essere modificato. Questa modifica è significativa per i gestori di sistemi di build di terze parti, che ora dovrebbero essere in grado di eliminare parte del codice specifico per Android. Per ulteriori informazioni, consulta la guida Crea mantenitori dei sistemi. - ndk-depends è stato rimosso. Riteniamo che ReLinker sia una soluzione migliore ai problemi di caricamento delle librerie native sulle versioni precedenti di Android.
- Problema 862: gli script wrapper GCC che reindirizzavano a Clang sono stati rimossi, in quanto non sono abbastanza funzionali da poter essere sostituiti con sostituzioni.
-
Gli sviluppatori devono iniziare a testare le loro app con LLD. AOSP è passato all'utilizzo di LLD per impostazione predefinita e NDK lo userà per impostazione predefinita nella prossima release. BFD e Gold verranno rimossi una volta che l'LLD avrà superato un ciclo di rilascio senza problemi critici non risolti (r21 stimato). Testa l'LLD nella tua app passando
Android NDK r18b (settembre 2018)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
- GCC è stato rimosso.
-
LLD è ora disponibile per i test.
L'AOSP sta passando all'utilizzo dell'LLD per impostazione predefinita e seguirà l'NDK (tempiatura sconosciuta). Testa LLD nella tua app superando
-fuse-ld=lld
durante il collegamento. - gnustl, gabi++ e stlport sono stati rimossi.
- Il supporto per ICS (android-14 e android-15) è stato rimosso. Le app che utilizzano file eseguibili non devono più fornire un file eseguibile PIE e non PIE.
- Il Play Store richiederà il supporto del formato a 64 bit per il caricamento di un APK a partire da agosto 2019. Inizia subito a eseguire il trasferimento per evitare sorprese quando sarà il momento. Per maggiori informazioni, consulta questo post del blog.
Android NDK r17c (giugno 2018)
Log delle modifiche- Download
-
- I download di questa release sono disponibili qui.
- Annunci
-
- GCC non è più supportato. Verrà rimosso in NDK r18.
-
libc++ è ora il codice STL predefinito per CMake e per le Toolchain autonome. Se hai selezionato manualmente un altro STL, ti consigliamo vivamente di passare a
libc++
. Tieni presente che ndk-build rimane invariato per impostazione predefinita su nessun STL. Per maggiori 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. Se provi a creare una di queste ABI, si verificherà un errore.
- Il supporto per ICS (android-14 e android-15) verrà rimosso da r18.
- Il Play Store richiederà il supporto del formato a 64 bit per il caricamento di un APK a partire da agosto 2019. Inizia subito a eseguire il trasferimento per evitare sorprese quando sarà il momento. Per maggiori informazioni, consulta questo post del blog.
Android NDK r16b (dicembre 2017)
Log delle modifiche- Download
- I download di questa release sono disponibili qui.
- Annunci
-
- Le intestazioni obsolete sono state rimosse. Le intestazioni unificate ora sono semplicemente "le intestazioni". Per suggerimenti sulla migrazione, consulta Note sulla migrazione delle intestazioni unificate.
- GCC non è più supportato. Non verrà ancora rimosso dall'NDK, ma non riceverà più backport. Non può essere rimosso fino a quando libc++ non è diventato sufficientemente stabile da poter essere impostato come predefinito, poiché alcune parti di gnustl sono ancora incompatibili con Clang. Verrà rimosso quando gli altri STL verranno rimossi in r18.
libc++
non è più in versione beta ed è ora il codice STL preferito nell'NDK. A partire dalla versione r17,libc++
è il codice STL predefinito per CMake e per le Toolchain indipendenti. 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 è deprecato. Non verranno più create per impostazione predefinita con ndk-build, ma sono comunque generabili se hanno un nome esplicito e saranno incluse da "all", "all32" e "all64". Il supporto per ciascuna funzionalità è stato rimosso nella versione r17. Se scegli come target una di queste ABI, sia CMake sia ndk-build emetteranno un avviso.
- API
-
Sono state aggiunte API native per Android 8.1. Per scoprire di più su queste API, consulta la panoramica sulle API native.
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo log delle modifiche.
Android NDK r15c (luglio 2017)
Log delle modifiche- Download
- I download di questa release sono disponibili qui.
- Annunci
-
- Le intestazioni unificate sono abilitate per impostazione predefinita. Per scoprire come utilizzare queste intestazioni, vedi Intestazioni unificate.
- GCC non è più supportato. Non è ancora stato rimosso da NDK, ma non riceve più backport. Non può essere rimosso fino a quando libc++ non si sarà stabilizzato a sufficienza per essere impostato come predefinito, poiché alcune parti di gnustl non sono ancora compatibili con Clang.
- Android 2.3 (
android-9
) non è più supportato. Ora il target del livello API minimo nell'NDK è Android 4.0 (android-14
). Se il valore del tuoAPP_PLATFORM
è impostato su un valore inferiore aandroid-14
, viene utilizzatoandroid-14
. - CMake in NDK ora supporta il codice di assemblaggio di build scritto in YASM per l'esecuzione su architetture x86 e x86-64. Per scoprire di più, consulta Creazione di un codice di assemblaggio.
Nota : le intestazioni deprecate verranno rimosse in una release futura. Se riscontri problemi con queste intestazioni, invia una segnalazione di 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 sulle API native.
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo log delle modifiche.
Android NDK r14b (marzo 2017)
Log delle modifiche- Download
- I download di questa release sono disponibili qui.
- Annunci
-
- Intestazioni unificate: questa release introduce intestazioni di piattaforma sincronizzate
e sempre aggiornate e precise con la piattaforma Android. Le correzioni di bug solo sulle intestazioni ora
interessano tutti i livelli dell'API. L'introduzione delle intestazioni unificate corregge le incoerenze nelle release precedenti di NDK, ad esempio:
- Le intestazioni in M e N erano in realtà intestazioni per L.
- Le dichiarazioni delle funzioni nelle intestazioni non corrispondevano correttamente ai livelli di piattaforma; le intestazioni hanno dichiarato funzioni inesistenti o non sono riuscite a dichiarare le funzioni disponibili.
- Diversi livelli API precedenti presentavano costanti mancanti o errate nei livelli API più recenti.
Queste nuove intestazioni unificate non sono attive per impostazione predefinita. Per scoprire come abilitare e utilizzare queste intestazioni, vedi Intestazioni unificate.
- Ritiro di GCC:in questa release non è più supportato il supporto attivo per GCC. GCC non è stato ancora rimosso dall'NDK, ma non riceverà più backport. Poiché alcune parti di gnustl sono ancora incompatibili con Clang, GCC verrà rimosso completamente solo dopo che libc++ sarà diventato abbastanza stabile da poter essere impostato come predefinito.
- Intestazioni unificate: questa release introduce intestazioni di piattaforma sincronizzate
e sempre aggiornate e precise con la piattaforma Android. Le correzioni di bug solo sulle intestazioni ora
interessano tutti i livelli dell'API. L'introduzione delle intestazioni unificate corregge le incoerenze nelle release precedenti di NDK, ad esempio:
Per ulteriori informazioni sulle novità e sulle modifiche di questa release, consulta questo log delle modifiche.
Android NDK r13b (ottobre 2016)
- Download
- I download di questa release vengono archiviati qui.
- Annunci
-
- GCC non è più supportato. Non verrà ancora rimosso dall'NDK, ma non riceverà più backport. Non può essere rimosso fino a quando libc++ non è diventato abbastanza stabile da poter essere impostato come predefinito, poiché alcune parti di gnustl non sono ancora compatibili con Clang. Probabilmente verrà rimossa successivamente.
- Aggiunto simpleperf, un profiler CPU per Android.
- R13B
-
-
Correzioni aggiuntive per la mancanza di
__cxa_bad_cast
.
-
Correzioni aggiuntive per la mancanza di
- NDK
-
- Per impostazione predefinita,
NDK_TOOLCHAIN_VERSION
è impostato su Clang. - libc++ è stato aggiornato alla versione r263688.
- Abbiamo ripristinato un flusso upstream (quasi) pulito. Questa operazione dovrebbe eliminare una serie di bug, ma dobbiamo comunque eliminare libandroid_support prima che venga consigliato come predefinito.
-
Ora
make-standalone-toolchain.sh
è semplicemente un wrapper intorno alla versione Python dello strumento. Esistono alcune differenze di comportamento. Consulta il messaggio di commit per i dettagli. - Alcune librerie per ABI non supportate sono state rimosse (mips64r2, mips32r6, mips32r2 e x32). Potrebbero esserci ancora degli elementi in ritardo.
- Sono stati risolti i problemi relativi a crtbegin_static.o che hanno comportato la mancanza di atexit al momento del collegamento durante la creazione di un eseguibile statico per ARM android-21+: Problema 132
- Aggiunto il file Toolchain CMake in build/cmake/android.toolchain.cmake.
- Per impostazione predefinita,
- Problemi noti
-
- Questo non deve essere inteso come un elenco completo di tutti i bug in sospeso.
- Le Toolchain indipendenti che utilizzano libc++ e GCC non funzionano. Sembra che si tratti di un bug di GCC. Consulta il messaggio di commit per maggiori dettagli.
- Le intestazioni e le librerie bionic per Marshmallow e N non sono ancora esposte, nonostante la presenza di android-24. Queste piattaforme sono ancora le intestazioni e le librerie Lollipop (non una regressione da r11).
- Gli strumenti RenderScript non sono presenti (non una regressione da r11): Problema 7.
Android NDK r12b (giugno 2016)
- Download
- I download di questa release vengono archiviati qui.
- Annunci
- Per impostazione predefinita, il comando
ndk-build
utilizza Clang in r13. Rimuoveremo GCC in una release successiva. - Lo script
make-standalone-toolchain.sh
verrà rimosso nella versione r13. Assicurati chemake_standalone_toolchain.py
sia adatto alle tue esigenze. - Segnala eventuali problemi a GitHub.
- Abbiamo corretto
ndk-gdb.py
. (Problema 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 non corretti per le librerie statiche che utilizzano libc++. Per ulteriori informazioni su questa modifica, leggi i commenti qui.
- Le intestazioni OpenSLES sono state aggiornate per android-24.
- Abbiamo rimosso il supporto per l'ABI armeabi-v7a-hard. Per ulteriori informazioni, consulta questa spiegazione.
- Rimosse tutte le risorse sysroot per i livelli della piattaforma precedenti a GB. Abbiamo interrotto il supporto nella versione r11, ma abbiamo trascurato di rimuoverli.
- La gestione delle eccezioni quando si utilizza c++_shared su ARM32 ora funziona principalmente. Lo svolgitore sarà ora collegato a ciascun oggetto collegato anziché a libc++ stesso. Per maggiori informazioni sulla gestione delle eccezioni, consulta la pagina Problemi noti.
- I flag del compilatore predefiniti sono stati eliminati.
(Problema 27).
- Per informazioni complete su queste modifiche, consulta questo elenco delle modifiche.
- È stata aggiunta un'implementazione Python di strumentichain autonomi:
build/tools/make_standalone_toolchain.py
.- Gli utenti Windows non hanno più bisogno di Cygwin per utilizzare questa funzionalità.
- Rimuoveremo il sapore bash in r13, quindi prova quello nuovo ora.
-fno-limit-debug-info
è stato abilitato per impostazione predefinita per le build di debug Clang. Questa modifica dovrebbe migliorare la possibilità di debug con LLDB.- Il servizio
--build-id
è ora attivo per impostazione predefinita.- L'ID build verrà ora mostrato nei report sugli arresti anomali nativi per consentirti di identificare facilmente la versione del codice in esecuzione.
NDK_USE_CYGPATH
non dovrebbe più causare problemi con libgcc. (Android Problema 195486)- Le opzioni
-Wl
,--warn-shared-textrel
e-Wl,--fatal-warnings
sono ora abilitate per impostazione predefinita. Se hai condiviso rilocazioni di testi, la tua app non può essere caricata su Android 6.0 (livello API 23) o versioni successive. Non sono mai stati consentiti spostamenti del testo per le app a 64 bit. - Le intestazioni precompilate dovrebbero funzionare meglio. (Problema 14 e Problema 16)
- Rimosse le librerie STL ARM (senza pollice) non raggiungibili.
- Aggiunto il supporto di Vulkan per android-24.
- È stata aggiunta l'API Choreographer ad android-24.
- Sono state aggiunte API
libcamera2
per i dispositivi conINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o versioni successive. Per maggiori informazioni, consulta la sezione Caratteristiche della fotocamera. - Clang
- Clang è stato aggiornato alla versione 3.8svn (r256229, build 2812033).
- Gli eseguibili
clang.exe
eclang++.exe
nel pacchetto Windows a 32 bit sono in realtà a 64 bit. L'eseguibile a 32 bit è denominatoclang_32.exe
.
- Gli eseguibili
- GCC
- Sincronizzazione con ChromeOS GCC @ google/gcc-4_9 r227810.
- Patch disinfettante con copertura supportata da ToT (r231296).
- È stato corretto il problema di libatomic in modo che non utilizzi
ifuncs
. (Problema 31) - Binutil
- Messaggi informativi "Erratum 843419 found and corretti" silenziati.
- È stata introdotta l'opzione
--long-plt
per correggere l'errore del linker interno che si verifica durante il collegamento di enormi programmi binari di arm32. - Sono stati corretti gli stub di tempo di esecuzione errati per AArch64. Di conseguenza, gli indirizzi di passaggio venivano calcolati in modo errato per i DSO di grandi dimensioni.
- È stata introdotta l'opzione predefinita
--no-apply-dynamic
per aggirare un bug del linker dinamico nelle release precedenti di Android. - NDK r11 KI per
dynamic_cast
non funziona con Clang. Abbiamo corretto x86,stlport_static
e ottimizzazione. - GDB
- Aggiornato a GDB 7.11. Per maggiori informazioni, consulta la pagina di GDB News.
- Alcune correzioni di bug per
ndk-gdb.py
. - Problemi noti
- L'ASAN x86 continua a non funzionare. Per ulteriori informazioni, consulta la discussione su questo elenco delle modifiche.
- Lo sblocco con
c++_shared
continua a non funzionare 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 Android 5.0 (livello API 21) (non una regressione da r11).
- Gli strumenti RenderScript non sono presenti (non è una regressione da r11). (Problema 7)
- Questo log delle modifiche non intende essere un elenco completo di tutti i bug in sospeso.
__thread
dovrebbe funzionare in tempo reale questa volta.
Android NDK r12 (giugno 2016)
- Download
- I download di questa release vengono archiviati qui.
- Annunci
- Il comando
ndk-build
utilizzerà per impostazione predefinita l'utilizzo di Clang in una release futura. GCC verrà rimosso in una release futura. - Lo script
make-standalone-toolchain.sh
verrà rimosso in una versione futura. Se utilizzi questo script, pianifica la migrazione amake_standalone_toolchain.py
il prima possibile. - Rimosso il supporto per l'ABI armeabi-v7a-hard. Consulta la spiegazione nella documentazione.
- Rimosse tutte le risorse sysroot per i livelli di piattaforma precedenti ad Android 2.3 (livello API 9). Abbiamo perso il supporto di questi dispositivi in NDK r11, ma abbiamo trascurato di rimuoverli.
- È stata aggiornata la gestione delle eccezioni quando si utilizza c++_shared su ARM32 in modo che funzioni principalmente (vedi Problemi noti). Lo svolgitore è ora collegato a ciascun oggetto collegato anziché a libc++ stesso.
- Sono stati troncati i flag del compilatore predefiniti (NDK Issue 27). Puoi vedere i dettagli di questo aggiornamento in Modifica 207721.
- È stata aggiunta un'implementazione Python di strumentichain autonomi in
build/tools/make_standalone_toolchain.py
. Su Windows, non è più necessario Cygwin per utilizzare questa funzionalità. Tieni presente che la versione bash verrà rimossa in una versione futura, quindi testa subito la nuova versione. - Le build di debug Clang configurate in modo che l'opzione
-fno-limit-debug-info
siano abilitate per impostazione predefinita. Questa modifica consente un migliore debug con LLDB. --build-id
è stata attivata come opzione predefinita. Questa opzione determina la visualizzazione di un identificatore nei report nativi sugli arresti anomali, in modo da poter identificare facilmente la versione del codice in esecuzione.- È stato risolto il problema relativo a
NDK_USE_CYGPATH
in modo che non causi più problemi con libgcc (Problema 195486). - Sono state abilitate le seguenti opzioni per impostazione predefinita:
-Wl,--warn-shared-textrel
e-Wl,--fatal-warnings
. Se hai condiviso rilocazioni di testi, 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 per migliorare il funzionamento delle intestazioni precompilate (NDK problema 14, NDK problema 16).
- Rimosse le librerie STL ARM (senza pollice) non raggiungibili.
- Aggiunto il supporto di Vulkan per android-24.
- È stata aggiunta l'API Choreographer ad android-24.
- Sono state aggiunte le API libcamera2 per i dispositivi che supportano il livello di funzionalità
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
o superiore. Per maggiori informazioni, consulta il riferimentoCameraCharacteristics
. - Clang
- Clang è stato aggiornato alla versione 3.8svn (r256229, build 2812033). Gli eseguibili
clang.exe
eclang++.exe
nel pacchetto Windows a 32 bit sono in realtà a 64 bit. L'eseguibile a 32 bit è denominatoclang_32.exe
. - È stato corretto
__thread
in modo che funzioni in tempo reale questa volta. - GCC
- Sincronizzato il compilatore con GCC di ChromeOS @ google/gcc-4_9 r227810.
- Patch disinfettante con copertura supportata da ToT (r231296).
- Risolto il problema di
libatomic
per non utilizzare ifuncs (NDK Issue 31). - Binutil
- Silenziati i messaggi informativi "Erratum 843419 trovato e corretto".
- È stata introdotta l'opzione
--long-plt
per correggere un errore di linker interno durante il collegamento di enormi programmi binari di arm32. - Sono stati corretti gli stub di tempo di esecuzione errati per
AArch64
. Questo problema causava il calcolo errato degli indirizzi di passaggio per gli oggetti condivisi dinamici (DSO) di grandi dimensioni. - È stata introdotta l'opzione predefinita
--no-apply-dynamic
per aggirare un bug del linker dinamico nelle release precedenti di Android. - Risolto un problema noto di NDK r11 per cui
dynamic_cast
non funzionava con Clang, x86, stlport_static e l'ottimizzazione. - GDB
- Aggiornato alla versione GDB 7.11. Per maggiori informazioni su questa release, consulta GDB News.
- Sono stati corretti alcuni bug nello script
ndk-gdb.py
. - Problemi noti
- Al momento, x86 Address Sanitizer (ASAN) non funziona. Per maggiori informazioni, consulta il Problema 186276.
- Lo sblocco 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 Android 5.0 (livello API 21), coerenti con NDK r11.
- Non sono presenti gli strumenti RenderScript, che è coerente con NDK r11. (NDK Problema 7)
- Nel file di intestazione
NdkCameraMetadataTags.h
, il valore enum del tag dei metadati della fotocameraACAMERA_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 correzioni aggiuntive allo script
ndk-gdb.py
. - È stato aggiunto un argomento facoltativo del nome del pacchetto all'opzione
--attach
del comandondk-gdb
. (Problema 13) - Sono stati corretti i percorsi della Toolchain non validi per la piattaforma Windows a 32 bit. (Problema 45)
- È stato corretto il percorso relativo per il comando
ndk-which
. (Problema 29) - È stato corretto l'uso di cygpath per il compilatore libgcc. (Problema 195486 Android)
Android NDK r11b (marzo 2016)
- NDK
-
- Comunicazioni importanti
- Abbiamo spostato il nostro tracker dei bug in GitHub.
- Modifiche
ndk-gdb.py
corretto. È regredito completamente in 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 del tutto assente nelle release precedenti.
- Sono state corrette le Toolchain indipendenti per libc++, che mancavano di
__cxxabi_config.h
. - È stata corretta la documentazione della guida per
--toolchain
inmake-standalone-toolchain.sh
.
- Comunicazioni importanti
- Clang
-
- Errata
- Contrariamente a quanto riportato nelle note di rilascio della versione r11,
__thread
non funziona. Questo perché la versione di Clang che spediamo non include una correzione di bug per il supporto TLS emulato.
Android NDK r11 (marzo 2016)
- Clang
-
- Comunicazioni importanti
- Ti consigliamo vivamente di passare a Clang.
- Se riscontri problemi con Clang, segnalali qui per problemi specifici relativi a Clang nell'NDK. Per problemi più generali relativi a Clang, presenta i bug seguendo le istruzioni in questa pagina.
- Clang è stato aggiornato alla versione 3.8svn (r243773, build 2481030).
- Questa versione è un clang upstream quasi puro.
- Il pacchetto NDK scaricabile a 64 bit per Windows contiene una versione a 32 bit di Clang.
- Ti consigliamo vivamente di passare a Clang.
- Componenti aggiuntivi
- Clang ora fornisce supporto per 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 sull'esecuzione di Android 6.0 (livello API 23) o versioni successive. - Il protocollo TLS emulato non funziona ancora con Aarch64 quando si accede alle variabili TLS da una libreria condivisa.
- Il compilatore ora supporta
- Clang ora fornisce supporto per TLS emulato.
- Comunicazioni importanti
- GCC
-
- Comunicazioni importanti
- GCC nell'NDK è stato ritirato a favore di Clang.
- NDK non eseguirà l'upgrade alla versione 5.x e non accetterà backport non critici.
- La manutenzione per gli errori di compilazione e gli 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
-
- Comunicazioni importanti
- Gli esempi non sono più inclusi nel pacchetto NDK. Sono invece disponibili su GitHub.
- La documentazione non è più inclusa nel pacchetto NDK. ma si trova sul sito web per sviluppatori Android.
- Componenti aggiuntivi
- È stata aggiunta un'API di tracciamento nativa a
android-23
. - È stata aggiunta un'API multirete nativa a
android-23
. - libc, m e dl sono abilitati per fornire i simboli del controllo delle versioni, a partire dal livello API 21.
- Intestazioni e libreria Vulkan aggiunte al livello API N.
- È stata aggiunta un'API di tracciamento nativa a
- Rimozioni
- Rimosso il supporto per
_WCHAR_IS_8BIT
. - Sed. rimossa
- Mclinker rimosso.
- Perl rimosso.
- Rimossi da tutte le versioni di NDK libc, m e dl da tutti i simboli non supportati dalle versioni della piattaforma di queste libc.
- Supporto parzialmente rimosso per mips64r2. Il resto verrà rimosso in futuro.
- Rimosso il supporto per
- Altre modifiche
- Le Toolchain indipendenti di ARM sono state modificate in arm7 come predefinita.
- Puoi ripristinare il comportamento precedente passando specificando
l'opzione
-target
comearmv5te-linux-androideabi
.
- Puoi ripristinare il comportamento precedente passando specificando
l'opzione
- Il sistema di build è stato modificato in modo da utilizzare
-isystem
per le inclusioni della piattaforma.- Avvisi che informano che le cause bioniche non interrompono più le build di app.
- Risolto un problema di segfault che si verificava quando un programma binario generava eccezioni tramite gabi++ (problema 179410)
- Lo spazio dei nomi in linea di libc++ è stato modificato in
std::__ndk1
per evitare problemi ODR con la piattaforma libc++. - Tutte le librerie libc++ ora sono create con libc++abi.
- Il valore predefinito di
APP_PLATFORM
è stato impostato su Gingerbread.- Il supporto per Froyo e versioni precedenti verrà interrotto in una release futura.
- Le Toolchain indipendenti di ARM sono state modificate in arm7 come predefinita.
- struct gabi++
_Unwind_Exception
aggiornato per 64 bit. - Sono state aggiunte le seguenti funzionalità alla CPU:
- Rileva SSE4.1 e SSE4.2.
- Rileva le funzionalità della CPU su x86_64.
- libc++abi aggiornato in 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 in tutti i livelli API.fegetenv and fesetenv
corretto per il gruppo.- Correggi la dimensione/l'allineamento del puntatore finale di
crtend_*
per mips64 e x86_64.
- Comunicazioni importanti
- Binutil
-
- Componenti aggiuntivi
- Nuova opzione aggiunta:
--pic-veneer
.
- Nuova opzione aggiunta:
- Rimozioni
- Il pacchetto Windows a 32 bit non contiene più ld.gold. Puoi invece ottenere ld.gold dal pacchetto Windows a 64 bit.
- Modifiche
- Origine binutils unificata tra Android e ChromiumOS. Per ulteriori informazioni su questa modifica, leggi i commenti qui.
- È stata migliorata l'affidabilità della versione Gold per aarch64. Usa
-fuse-ld=gold
al momento del collegamento per usare oro anziché bfd. L'impostazione predefinita probabilmente cambierà nella prossima release. - Miglioramento del tempo di collegamento per programmi binari di grandi dimensioni per il backend ARM Gold (riduzione fino al 50% del tempo di collegamento per il browser Chrome di cui è possibile eseguire il debug).
- Componenti aggiuntivi
- GDB
-
- Rimozioni
- Rimosso ndk-gdb a favore di ndk-gdb.py.
- Modifiche
- gdb aggiornato alla versione 7.10.
- Rendimento migliorato.
- Messaggi di errore migliorati.
- Sono stati corretti i percorsi di progetto relativi.
- Interruzione dell'interruzione del server gdbserver in background tramite Ctrl + C.
- Supporto di Windows migliorato.
- Rimozioni
- YASM
-
- Modifiche
- YASM aggiornato alla versione 1.3.0.
- Modifiche
- Problemi noti
-
- Al momento l'ASAN x86 non funziona. Per ulteriori informazioni, consulta la discussione qui.
- La combinazione di livelli di Clang, x86, stlport_static e di ottimizzazione superiori a
-O0
causa errori di test condynamic_cast
. Per ulteriori informazioni, leggi i commenti qui. - Spesso la gestione delle eccezioni non riesce con c++_shared su ARM32. La causa principale è l'incompatibilità tra lo svolgitore LLVM utilizzato da libc++abi per ARM32 e libgcc. Questo comportamento non è una regressione da r10e.
Android NDK r10e (maggio 2015)
- Download
- I download di questa release vengono archiviati qui.
- Modifiche importanti:
-
- La soluzione alternativa per Cortex-A53 Erratum 843419 è stata integrata nel
linker
aarch64-linux-android-4.9
. Per ulteriori informazioni su questa soluzione alternativa, consulta la sezione Soluzione per cortex-a53 erratum 843419. - Aggiunto Clang 3.6; ora
NDK_TOOLCHAIN_VERSION=clang
sceglie quella versione di Clang per impostazione predefinita. - Rimosso Clang 3.4.
- Rimozione di GCC 4.6.
- Supporto multi-threading implementato in
ld.gold
per tutte le architetture. Ora può collegarsi con o senza supporto per il multithreading; l'impostazione predefinita prevede di farlo senza.- Per la compilazione con multi-threading, utilizza l'opzione
--threads
. - Per compilare senza multi-threading, utilizza l'opzione
--no-threads
.
- Per la compilazione con multi-threading, utilizza l'opzione
- Aggiornato GDB/gdbserver a 7.7 per tutte le architetture.
- È stato rimosso il pacchetto NDK per Darwin a 32 bit.
- La soluzione alternativa per Cortex-A53 Erratum 843419 è stata integrata nel
linker
- Correzioni di bug importanti:
-
- Risolto un arresto anomalo che si verificava quando erano presenti loop OpenMP al di fuori del thread principale.
- Risolto un errore del compilatore interno GCC 4.9 (ICE) che si è verificato quando l'utente ha dichiarato
#pragma GCC optimize ("O0")
, ma aveva un livello di ottimizzazione diverso specificato nella riga di comando.pragma
ha la precedenza. - Risolto un errore che causava un arresto anomalo con il seguente messaggio:
in add_stores, at var-tracking.c:6000
- È stata implementata una soluzione alternativa per un problema Clang 3.5 in cui la vettore automatica LLVM genera
llvm.cttz.v2i64()
, un'istruzione senza controparte nel set di istruzioni ARM.
- Altre correzioni di bug:
-
- Apportate le seguenti correzioni per intestazioni e librerie:
- Correzione di
PROPERTY_*
inmedia/NdkMediaDrm.h
. sys/ucontext.h
corretto permips64
.- Controllo della versione clan per
__builtin_isnan
e__builtin_isinf
ignorato. android-21/arch-mips/usr/include/asm/reg.h
eandroid-21/arch-mips64/usr/include/asm/reg.h
aggiunti.- È stato risolto un avviso non valido relativo ai limiti dell'array che GCC 4.9 produceva per x86 e ha riattivato i limiti dell'array per segnalare che GCC 4.9 aveva prodotto per ARM. L'avviso per ARM era stato precedentemente disattivato in modo incondizionato.
- È 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 durante la compilazione di Clang permips64
. Per ulteriori informazioni, consulta la sezione relativa al problema 20098 di LLVM. - Sono stati corretti gli arresti anomali di Clang 3.5 che si verificavano nei commenti non ASCII. (Problema 81440)
- È stato risolto il problema di
stlport collate::compare
che restituiva-1
e1
. In precedenza, restituisceva numeri firmati arbitrari. - È stato corretto
ndk-gdb
per le ABI a 64 bit. (Problema 118300) - È stato risolto l'arresto anomalo prodotto dall'esempio HelloComputeNDK per RenderScript su Android 4.4 (livello API Android 19). Per maggiori informazioni, visita questa pagina.
libc++ __wrap_iter
corretto per GCC. Per maggiori informazioni, consulta la pagina relativa al problema 22355 di LLVM.- Corretto il supporto di
.asm
per 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. (Numero 160584) - Risolto l'errore
no rule to make target
che si verificava durante la compilazione di un singolo file.c
mediante l'esecuzione del comandondk-build.cmd
dagradle
. (Problema 66937) - Sono state aggiunte le librerie
libatomic.a
elibgomp.a
mancanti dalle seguenti Toolchain host:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Altre modifiche:
-
ld.gold
aggiunto peraarch64
. Il linker predefinito rimaneld.bfd
. Per abilitare in modo esplicitold.gold
, aggiungi-fuse-ld=gold
alla variabileLOCAL_LDFLAGS
oAPP_LDFLAGS
.- Ha creato le Toolchain MIPS e MIPS64 con
binutils-2.25
, che fornisce un supporto R6 migliorato. -fstandalone-debug
(informazioni di debug complete) è stata impostata come opzione predefinita per Clang.- È stato sostituito
-fstack-protector
con-fstack-protector-strong
per le Toolchain ARM, AArch64, X86 e X86_64 per GCC 4.9, Clang 3.5 e Clang 3.6. - È stata aggiunta l'opzione della riga di comando
--package
andk-gdb
per consentire al sistema di build di eseguire l'override del nome del pacchetto. (Problema 56189) - Deprecato
-mno-ldc1-stc1
per MIPS. Questa opzione potrebbe non funzionare con le nuove opzioni-fpxx
e-mno-odd-spreg
o con l'ABI FPXX. - Rilevamento MIPS MSA e R6 aggiunto a
cpu-features
.
Android NDK r10d (dicembre 2014)
- Modifiche importanti:
-
- Imposta GCC 4.8 come predefinito per tutte le ABI a 32 bit. GCC 4.6 deprecato:
rimuoverà la versione successiva. Per ripristinare il comportamento precedente, aggiungi
NDK_TOOLCHAIN_VERSION=4.6
a ndk-build oppure aggiungi--toolchain=arm-linux-androideabi-4.6
durante l'esecuzione dimake-standalone-toolchain.sh
sulla riga di comando. GCC 4.9 rimane il servizio predefinito per le ABI a 64 bit. - È stata interrotta l'aggiunta di
-mstackrealign
in tutte le Toolchain x86[_64] per impostazione predefinita. La Toolchain di NDK presuppone un allineamento dello stack a 16 byte. Gli strumenti e le opzioni utilizzati per impostazione predefinita applicano questa regola. Un utente che scrive il codice Assembly deve assicurarsi di preservare l'allineamento dello stack e che anche altri compilatori rispettino questa regola. (Bug di GCC 38496) - Aggiunta la funzionalità Address Sanitizer al supporto di Clang 3.5 per ARM e ABI x86. Per maggiori informazioni su questa modifica, consulta il progetto Address Sanitizer.
- Introdotto il requisito, a partire dal livello API 21, per utilizzare
-fPIE -pie
durante la creazione. Nei livelli API 16 e successivi, ndk-build utilizzaPIE
durante la creazione. Questa modifica ha una serie di implicazioni, illustrate nel problema di anteprima per gli sviluppatori 888. Queste implicazioni non si applicano alle librerie condivise.
- Imposta GCC 4.8 come predefinito per tutte le ABI a 32 bit. GCC 4.6 deprecato:
rimuoverà la versione successiva. Per ripristinare il comportamento precedente, aggiungi
- Correzioni di bug importanti:
-
- Abbiamo apportato altre correzioni relative all'
A53 Errata #835769 nel linker aarch64-linux-android-4.9. Nell'ambito di questo processo, GCC trasmette una nuova opzione,
--fix-cortex-a53-835769
, quando viene specificato-mfix-cortex-a53-835769
(attivato per impostazione predefinita). Per maggiori informazioni, consulta questo messaggio binutils e questo messaggio binutils. - È stata documentata una correzione per un blocco
sscanf/vsscanf
di libc++ che si è verificato nel livello API 21. La correzione è stata implementata in r10c. (Numero 77988) - Risolto un arresto anomalo di AutoFDO (
-fauto-profile
) che si è verificato con GCC 4.9 quando è stato specificato-Os
. (Numero 77571)
- Abbiamo apportato altre correzioni relative all'
A53 Errata #835769 nel linker aarch64-linux-android-4.9. Nell'ambito di questo processo, GCC trasmette una nuova opzione,
- Altre correzioni di bug:
-
- Apportate le seguenti correzioni per intestazioni e librerie:
- Aggiunta di
posix_memalign
al livello API 16. È stato inoltre aggiunto un prototipo instdlib.h
ai livelli API 16-19. (Numero 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
esgidefs.h
per il livello API 21. - È stato modificato
sys/user.h
per rinominaremxcsr_mask
inmxcr_mask
e per cambiare il tipo di dati peru_ar0
da - Tipo di valore restituito
sysconf()
cambiato daint
along
. - È stata corretta la gestione di
thumb
perLOCAL_ARM_MODE
da parte di ndk-build: 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"
), dove la modalità ARM è quella predefinita per mantenere la compatibilità con le Toolchain precedenti. (Numero 74040) - È stato corretto
LOCAL_SRC_FILES
in ndk-build per utilizzare i percorsi assoluti di Windows. (Numero 74333) - Codice specifico per bash rimosso da ndk-gdb. (Numero 73338)
- Codice specifico per bash rimosso da
make-standalone-toolchain.sh
. (Numero 74145) - È stata aggiornata la documentazione relativa a una correzione per le dipendenze transitive di
System.loadLibrary()
. (Numero 41790) - Risolto un problema che impediva l'estrazione dei pacchetti a 64 bit su Ubuntu 14.04 e OS X 10.10 (Yosemite). (Numero 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
per struct user_regs_struct*.
Android NDK r10c (ottobre 2014)
- Modifiche importanti:
-
- Apportate le seguenti modifiche alla struttura dei download:
- Ogni pacchetto ora contiene le intestazioni, le librerie e gli strumenti a 32 e 64 bit per la rispettiva piattaforma.
- Le librerie STL con informazioni di debug non devono più essere scaricate separatamente.
- È stata modificata la denominazione di tutto ciò che in precedenza si chiamava
Android-L
e ora è la release ufficiale:android-21
. - Aggiornamento di GCC 4.9 mediante ribassamento al ramo
google
del repository GCC. Le principali differenze rispetto alla versione upstream di GCC 4.9 includono: - L'opzione
-O2
ora attiva la vettorializzazione, senza Peeling in loop ma con uno srotolamento più aggressivo. - Miglioramenti a FDO e LIPO
- Aggiunto il supporto di Clang 3.5 a tutti gli host:
NDK_TOOLCHAIN_VERSION=clang
ora sceglie Clang 3.5. Tieni presente che: - Per impostazione predefinita, ARM e x86 utilizzano l'assemblatore integrato. Se ciò causa problemi, utilizza
-fno-integrated-as
come soluzione alternativa. - Clang 3.5 genera ulteriori avvisi per i flag inutilizzati, ad esempio l'opzione
-finline-functions
supportata da GCC. - È stato possibile attivare la 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. - Rimosso il supporto per Clang 3.3.
- GCC 4.6 obsoleto e che potrebbe essere rimosso dalle versioni future.
- mclinker aggiornato alla versione 2.8 con supporto Identical Code Folding ("ICF"). Specifica ICF utilizzando l'opzione
--icf
. - Ampliato il supporto di
arm_neon.h
in x86 e x86_64, raggiungendo una copertura di circa il 93% delle funzionalità intrinseche NEON. Per ulteriori informazioni sul supporto NEON:- Vai alla Guida per i programmatori NDK (
docs/Programmers_Guide/html/
) e vedi Architetture e CPU > Neon. - Esamina il campione aggiornato di
hello-neon
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 era disponibile in r10 (quandoandroid-21
era ancora chiamatoAndroid-L
), ma non aveva documentazione.
Per informazioni più dettagliate, consulta la sezione Correzioni di bug importanti riportate di seguito.
Quando esegui la migrazione da progetti utilizzando GCC, puoi utilizzare
-Wno-invalid-command-line-argument
e-Wno-unused-command-line-argument
per ignorare i flag inutilizzati fino a quando non sarai in grado di decidere come utilizzarli a lungo termine. - Correzioni di bug importanti:
-
- Risolto un errore interno del compilatore con GCC4.9/aarch64 che causava il seguente messaggio di errore (problema 77564):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- È stata corretta la generazione errata del codice da GCC4.9/arm. (Problema 77567)
- Risolto un errore interno del compilatore con GCC4.9/mips che coinvolge l'assemblaggio in linea. (Problema 77568)
- È stato corretto il codice errato che GCC4.9/arm generava per
x = (cond) ? y : x
. (Numero 77569)- È stato corretto GCC4.9/aarch64 e Clang3.5/aarch64 in modo che aggirino l' errore Cortex-A53 (835769) per impostazione predefinita. Per disattivare la soluzione alternativa, specifica
-mno-fix-cortex-a53-835769
. - Altre correzioni di bug:
-
- Sono state apportate le seguenti correzioni a
android-21
per intestazioni e librerie:- Sono stati aggiunti altri codici 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>
. sys/ucontext.h
esys/user.h
aggiunti a tutti i livelli API. L'intestazionesignal.h
ora include<sys/ucontext.h>
. Puoi rimuovere qualsiasi definizione esistente distruct ucontext
.- Aggiunta di
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
epthread_gettid_np
. - Sono state aggiunte le autorizzazioni richieste all'esempio
native-media/AndroidManifest.xml
. (Numero 106640) - Aggiunti
clock_nanosleep
eclock_settime
al livello API 21. (Problema 77372) - Sono stati rimossi 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
, {2,__srget
,__wait4
,__futex_wake
__open
__get_tls
__getdents64
dlmalloc
- 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
. - Tipo del terzo argomento cambiato 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
. cxa_*
e gli operatorinew
edelete
sono stati spostati nuovamente inlibstdc++.so
. Questa modifica ripristina il comportamento di r9d; le versioni precedenti di r10 contenevano file segnaposto.
- Sono stati aggiunti altri codici TV:
- Ripristino del supporto MXU in GCC 4.8 e 4.9 per i mips. Questo supporto non era presente in r10 e r10b perché quelle versioni di GCC erano state compilate con binutils-2.24, che non supportava MXU. Ora sì.
- È stato risolto il problema
--toolchain=
inmake-standalone-toolchain.sh
, che ora supporta correttamente l'utilizzo di un suffisso che specifica una versione di Clang. - Sono state corrette le funzioni
strtod()
libc++/armeabi. - Correzioni alla documentazione NDK in
docs/
.
- Sono state apportate le seguenti correzioni a
- Altre modifiche:
-
- È stato migliorato
cpu-features
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. È specificato da Clang anziché*-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. (Numero 73728) - Risolto un problema relativo a
-flto
con GCC 4.8 su Mac OS X. Il messaggio di errore diceva:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Corretto un errore di battitura in
build-binary.mk.
(problema 76992) - È stato migliorato
- Problemi noti importanti:
-
- Se specifichi -Os (
-fauto-profile
) in GCC4.9, potrebbe verificarsi un arresto anomalo. (Numero 77571)
- Se specifichi -Os (
Android NDK r10b (settembre 2014)
- Note importanti:
-
- A causa della limitazione di dimensioni di 512 MB per i pacchetti scaricabili, i seguenti elementi a 32 bit non sono inclusi nei pacchetti di download NDK a 32 bit. Questi si trovano invece in quelli a 64 bit:
- Intestazioni Android-L
- GCC 4.9
- Attualmente, l'unico supporto per 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 il codice nativo, devi usare un pacchetto NDK a 64 bit, dove si trovano tutte le intestazioni Android-L.
- Correzioni di bug importanti:
- Altre correzioni di bug:
-
stdio.h
rimosso dalle directoryinclude-fixed/
di tutte le versioni di GCC. (Numero 73728).- Sono stati rimossi i file di intestazione duplicati dai pacchetti Windows nelle directory
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (Numero 73704.) - Risolto un problema che impediva a Clang di creare HelloComputeNDK.
- Atexit corretto. (Numero 66595).
- Apportate varie correzioni ai documenti in
docs/
esources/third_party/googletest/README.NDK
. (Numero 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*_l()
. cmsg_nxthdr
rinominato in__cmsg_nxthdr
.__libc_malloc_dispatch
rimosso.- Il prototipo
ptrace()
è stato modificato inlong ptrace(int, ...);
. sha1.h
rimosso.- Estensione di
android_dlextinfo
estesa aandroid/dlext.h
. __NDK_FPABI__
annotata per le funzioni che ricevono o restituiscono valori di tipo float o doppio instdlib.h
,time.h
,wchar.h
ecomplex.h
.
- Altre modifiche:
-
- Sono stati aggiornati
mipsel-linux-android-4.9
emips64el-linux-android-4.9
, implementando un nuovo layout di directory multilib e fornendo supporto per gdb-7.7 - È stato migliorato il criterio
cpu-features
per rilevare più funzionalità di ARM64. (Elenco delle modifiche 100339).
- Sono stati aggiornati
Android NDK r10 (luglio 2014)
- Modifiche importanti:
-
- Aggiunte 3 nuove ABI, tutte a 64 bit: arm64-v8a, x86_64, mips64. Tieni presente che:
- GCC 4.9 è il compilatore predefinito per le ABI a 64 bit. Clang è attualmente la 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à al momento della release L.
- Questa release ora include le impostazioni di
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.
- Il nuovo GNU libstdc++ in Android-L contiene tutti i valori
<tr1/cmath>
Prima di definire una funzione matematica personalizzata, controlla in_GLIBCXX_USE_C99_MATH_TR1
se esiste già una funzione con questo nome, in modo da evitare errori di "definizione multipla" del linker. - La libreria cpu-features è stata aggiornata per il kernel ARMv8. La libreria di funzionalità CPU esistente potrebbe non riuscire a rilevare la presenza di NEON sulla piattaforma ARMv8. Ricompila il tuo codice con la nuova versione.
- È stata aggiunta una nuova directory dell'API
platforms/android-L/
. tra cui: - Le intestazioni Bionic sono state aggiornate, che non sono cambiate dai livelli API Android 3 (Cupcake) al livello 19 (Lollipop). 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 precisione singola con virgola mobile in AudioPlayer. - Estensioni GLES 3.1 e AEP a
libGLESv3.so.
- Intestazioni GLES2 e GLES3 aggiornate alle ultime versioni ufficiali di Khronos.
- Aggiunti i compilatori GCC 4.9 alle ABI a 32/64 bit. GCC 4.9 è il compilatore predefinito (solo) per le ABI a 64 bit, come accennato in precedenza. Per le ABI a 32 bit, devi abilitare esplicitamente GCC 4.9, poiché GCC 4.6 è ancora l'impostazione predefinita.
- Per ndk-build, abilita la creazione a 32 bit con GCC 4.9 aggiungendo
NDK_TOOLCHAIN_VERSION=4.9
aApplication.mk
o esportandola 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.
- Aggiornato 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 (impostazione predefinita per ARM e MIPS), devi impostare
NDK_TOOLCHAIN_VERSION=4.8
o4.9
per abilitare ndk-gdb e selezionare GDB 7.6. - Aggiunta l'opzione di build
-mssse3
per fornire il supporto SSSE3 e resa predefinita per ABI x86 (upgrade da SSE3). L'immagine rilasciata da Google non contiene istruzioni SSSE3. - Aggiornamento del GCC dalla versione 4.8 alla versione 4.8.3.
- Supporto ARM libc++ EH migliorato passando da gabi++ a libc++abi. Per maggiori dettagli, consulta la sezione "Assistenza C++" della documentazione. Tieni presente che:
- Tutti i test, ad eccezione delle impostazioni internazionali, vengono ora superati per Clang 3.4 e GCC 4.8. Per ulteriori informazioni, consulta la sezione "Assistenza C++" della documentazione.
- Le librerie libc++ per X86 e MIPS libc++ usano ancora gabi++.
- GCC 4.7 e versioni successive ora possono utilizzare <atomic>.
- Devi aggiungere
-fno-strict-aliasing
se utilizzi<list>
, poiché__list_imp::_end
_ infrange le regole del TBAA. (Numero 61571). - A partire da GCC 4.6, LIBCXX_FORCE_RECALL:=true non ricrea più libc++. La ricostruzione richiede l'utilizzo di un compilatore diverso. Tieni presente che Clang 3.3 non è stato testato.
- mclinker è ora la versione 2.7 e ha il supporto Linux aarch64.
- Aggiunto il supporto delle intestazioni precompilate per le intestazioni specificate da
LOCAL_PCH
. (Numero 25412).
- Correzioni di bug importanti:
-
- È stato risolto il problema di libc++ che ora compila
std::feof
e così via (Problema 66668). - È stata corretta una chiamata alla libreria atomica Clang 3.3/3.4 che causava arresti anomali in alcuni dei test libc++ per ABI armeabi.
- Sono stati corretti gli arresti anomali di Clang 3.4 che si verificavano durante la lettura di intestazioni precompilate. (numero 66657).
- Correzione dell'asserzione
-O3
Clang 3.3/3.4 su: - Risolto 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
(numero 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
. (numero 66950). - È stato risolto il problema di libc++ che ora compila
- Altre correzioni di bug:
-
- Intestazioni corrette:
- È stato risolto il problema di
ssize_t
a 32 bit che eraint
anzichélong int
. - Sono stati corretti
WCHAR_MIN
eWCHAR_MAX
in modo che adottino segnali appropriati in base all'architettura su cui vengono eseguiti: - X86/MIPS: firmato.
- ARM: non firmato.
- Per forzare l'impostazione predefinita di X86/MIPS su senza firma, utilizza
-D__WCHAR_UNSIGNED__
. - Per forzare il valore di
wchar_t
a 16 bit, utilizza-fshort-wchar
. - Sono stati rimossi i simboli inesistenti da
libc.so
a 32 bit e sono stati aggiuntipread64
,pwrite64
eftruncate64
per il livello API Android 12 e successivi. (Numero 69319). Per ulteriori informazioni, consulta il messaggio di commit associato all'elenco delle modifiche di AOSP 94137. - Risolto l'avviso di GCC relativo alla ridefinizione di
putchar
. Il messaggio di avviso dice: - È stato corretto
make-standalone-toolchain.sh --stl=libc++
in modo che: - Copia
cxxabi.h
. (Numero 68001). - Viene eseguito in directory diverse dalla directory di installazione NDK. (problemi 67690 e 68647).
- È stato risolto il problema GCC/Windows per citare gli argomenti solo quando necessario per i processi di generazione in programmi esterni. Questa modifica riduce le probabilità di superare il limite di lunghezza di 32.000.
- Risolto un problema che impediva la regolazione della variabile di ambiente
APP_PLATFORM
. - È stata corretta l'implementazione di
IsSystemLibrary()
in crazy_linker in modo che utilizzistrrchr()
anzichéstrchr()
per trovare il vero nome base del percorso della libreria. - È stata corretta l'incapacità dell'audio nativo di creare in modalità di debug.
- È stata corretta l'incapacità di gdb di stampare numeri estremi a virgola mobile. (Numero 69203).
- È stata corretta l'impossibilità di compilare Clang 3.4 con
-Wl,-shared
(anziché-shared
, che non presentava problemi di compilazione). Il problema era che Clang aveva aggiunto-pie
per i target Android se non esistevano né-shared
né-static
. Questo comportamento, che non era corretto, ha fatto sì che il linker si lamentasse del fatto che-shared
e-pie
non potevano coesistere.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(elenco delle modifiche 91185). - Altre modifiche:
-
- È stato aggiunto
arm_neon.h
alla Toolchain x86 in modo che ora emula circa il 47% di Neon. Al momento i tipi a 64 bit non sono supportati. Per ulteriori informazioni, consulta la sezione sul supporto della funzionalità intrinseca ARM Neon nella documentazione di x86. - Ottimizzazione ARM/GOT_PREL trasferita (presente in GCC 4.6 creato dal ramo di Google GCC) a ARM GCC 4.8/4.9. Questa ottimizzazione a volte riduce il conteggio delle istruzioni quando si accede alle variabili globali. Come 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à Mi piace che la modalità Pollice.
- 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:
-
- Aggiunto il supporto per il compilatore Clang 3.4. L'opzione
NDK_TOOLCHAIN_VERSION=clang
ora seleziona Clang 3.4. GCC 4.6 è ancora il compilatore predefinito. - Aggiunta di
APP_ABI=armeabi-v7a-hard
, con opzione aggiuntiva per più librerie-mfloat-abi=hard
. Queste opzioni sono per l'utilizzo con ARM GCC 4.6/4.8 e Clang 3.3/3.4 (che utilizzano assembler, linker e librerie di 4.8). Quando utilizzi queste opzioni, tieni presente le seguenti modifiche: - Durante l'esecuzione dello script
ndk-build
, aggiungi le seguenti opzioni per il target armeabi-v7a:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
La libreria creata viene copiata inlibs/armeabi-v7a
. Affinché la funzione si comporti come previsto, non puoi specificare siaarmeabi-v7a
siaarmeabi-v7a-hard
come target di creazione (ossia, nella riga APP_ABI=). In caso contrario, uno di questi verrà ignorato. Tieni presente cheAPP_ABI=all
equivale ancora aarmeabi armeabi-v7a x86 mips
. - Lo script
make-standalone-toolchain.sh
copia le librerie aggiuntive nelle directory/hard
. Aggiungi i valoriCFLAGS
eLFLAGS
precedenti al makefile per consentire a GCC o Clang di collegarsi alle librerie in/hard
. - Sono stati aggiunti l'assemblaggio yasm, nonché i flag
LOCAL_ASMFLAGS
eEXPORT_ASMFLAGS
per i target x86. Lo scriptndk-build
utilizzaprebuilts/*/bin/yasm*
per creareLOCAL_SRC_FILES
che hanno l'estensione.asm
. - MClinker aggiornato alla versione 2.6.0, che aggiunge il supporto
-gc-sections
. - Aggiunto il supporto sperimentale libc++ (upstream r201101). Per utilizzare questa nuova funzionalità, segui questi passaggi:
- Aggiungi
APP_STL := c++_static
oAPP_STL := c++_shared
inApplication.mk
. Puoi ricreare dal codice sorgente tramiteLIBCXX_FORCE_REBUILD := true
- Esegui
make-standalone-toolchain.sh --stl=libc++
per creare una Toolchain autonoma con intestazioni/lib libc++.
CPLUSPLUS-SUPPORT.html
. (Numero 36496) - Aggiungi
- Aggiunto il supporto per il compilatore Clang 3.4. L'opzione
- Correzioni di bug importanti:
-
- È stato corretto un lancio non rilevato da un gestore di eccezioni impreviste per GCC 4.6/4.8 ARM EABI. (Numero GCC 59392)
- È stato corretto GCC 4.8 in modo che ora risolva correttamente la specializzazione parziale di un modello con un argomento dipendente e non di tipo. (Numero 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:
- Corretto il server gdbserver x86 e MIPS
event_getmsg_helper
. - Risolti numerosi problemi nella Toolchain di RenderScript NDK, tra cui problemi di compatibilità tra dispositivi meno recenti e riflessione C++.
- Altre correzioni di bug:
-
- Correzioni delle intestazioni:
- È stato risolto un errore di tipo
#include <sys/types.h>
mancante inandroid/asset_manager.h
per il livello API Android 13 e successivi. (Numero 64988) - È stato risolto un errore di tipo
#include
mancante inandroid/rect_manager.h
per l'API Android 14 e livelli successivi. - Aggiunto
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 dover includere manualmente le loro dipendenze (problema 64679):
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- È stato risolto un errore di tipo
sys/cachectl.h
aggiunto per tutte le architetture. Gli sviluppatori MIPS ora possono includere questa intestazione invece di scrivere#ifdef __mips__
.- È stato risolto
platforms/android-18/include/android/input.h
aggiungendo__NDK_FPABI__
alle funzioni che acquisiscono o restituiscono valori in virgola mobile o doppi. - È stato corretto il MIPS
struct stat
, che era erroneamente impostato sulla sua controparte a 64 bit per il livello API Android 12 e versioni successive. Questa impostazione errata era una regressione introdotta nella versione r9c. - Definito
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
e__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
per il livello API Android 9 e livelli precedenti. - Sono stati aggiunti
scalbln
,scalblnf
escalblnl
a x86libm.so
per le API 18 e versioni successive. - È stato corretto un errore di battitura in
sources/android/support/include/iconv.h
. (Numero 63806)
- È stato corretto il comando
std::unexpected()
di gabi++ a chiamarestd::terminate()
, in modo che un gestorestd::terminate()
definito dall'utente abbia la possibilità di essere eseguito.- È stato risolto il problema di gabi++ per catturare
std::nullptr
.- Esempi corretti di Teapot e MoreTepot:
- Risolto un problema con i chip Tegra 2 e 3 modificando le variabili speculari in modo da usare una precisione media. I valori per la potenza speculare ora possono essere inferiori a 1,0.
- Sono stati modificati i campioni in modo che la pressione del tasto del volume ripristini la modalità immersiva e renda la validità di
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. La rotazione dello schermo non attivaonSystemUiVisibilityChange
, pertanto non ripristina la modalità immersiva.
- È stato corretto lo script
ndk-build
per aggiungere-rpath-link=$SYSROOT/usr/lib
e-rpath-link=$TARGET_OUT
al fine di utilizzareld.bfd
per collegare gli eseguibili. (Numero 64266)-Bsymbolic
rimosso da tutte le build STL.- È stato risolto
ndk-gdb-py.cmd
impostandoSHELL
come variabile di ambiente anziché passarla apython.exe
, il che ignora l'impostazione. (Numero 63054)- È stato corretto lo script
make-standalone-toolchain.sh
in modo che l'opzione--stl=stlport
copi le intestazioni gabi++ anziché simbolizzarle; le shellcmd.exe
e MinGW non comprendono i link simbolici creati da cygwin. - Correzioni delle intestazioni:
- Altre modifiche:
-
- Sono state applicate 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 script consigliatondk-build
. - È stata migliorata la velocità dello script
make-standalone-toolchain.sh
spostandolo anziché copiandolo se la directory di destinazione specificata non esiste.
- Sono state applicate autorizzazioni di esecuzione a tutti gli script
Android NDK r9c (dicembre 2013)
Questa è una release che consente solo la correzione di bug.
- Correzioni di bug importanti:
-
- Risolto un problema con ARM GCC 4.8, in cui il puntatore allo stack viene ripristinato troppo presto. Questo problema ha impedito al puntatore del frame di accedere in modo affidabile a una variabile nello stack frame. (Numero GCC 58854)
- Risolto un problema con GCC 4.8 libstdc++, per cui un bug in std::nth_element causava la generazione di codice che generava un segfault casuale. (Numero 62910)
- È stato risolto il problema ICE di GCC 4.8 in cc1/cc1plus con
-fuse-ld=mcld
, in modo che non si verificasse più il seguente errore:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Risolto il supporto di
-mhard-float
per le funzioni matematiche__builtin
. Per informazioni aggiornate sulle correzioni di-mhard-float
con STL, consulta il problema 61784.
- Altre correzioni di bug:
-
- Correzioni delle intestazioni:
- Prototipo di
poll
modificato 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 dal 12 al 19. - Introdotto
futimens
inlibc.so
, per il livello API Android 19. - Sono stati aggiunti i valori
clock_settime()
eclock_nanosleep()
mancanti atime.h
per l'API Android 8 e livelli successivi. CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
eCLOCK_BOOTTIME_ALARM
aggiunti intime.h.
- Rimossi
CLOCK_REALTIME_HR
eCLOCK_MONOTONIC_HR.
obsoleti
- Prototipo di
- Negli esempi di Teapot, MoreTeapots e
source/android/ndk_helper
:- Le ho cambiate in modo che ora utilizzino un abi galleggiante per armeabi-v7a.
- Aggiornamento delle funzionalità in modo da usare la modalità immersiva su API Android 19 e livelli successivi.
- Risolto il problema di
Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
che causava arresti anomali sui dispositivi x86.
- Risolto il problema di
ndk-build
che si verificava in cygwin quando si fa riferimento al pacchetto NDK tramite link simbolico. - È stato risolto il problema di
ndk-build.cmd
che si verificava nelle finestrecmd.exe
quandoLOCAL_SRC_FILES
contiene percorsi assoluti. (Numero 69992) - È stato risolto lo script
ndk-stack
in modo che continuasse anche se non è possibile analizzare un frame a causa dell'impossibilità di trovare una routine, un nome file o un numero di riga. In ognuno di 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 di piattaforma Android userdebug/eng.
- Correzioni delle intestazioni:
- Altre modifiche:
-
LOCAL_EXPORT_LDFLAGS
aggiunto.- È stata introdotta l'impostazione
NDK_PROJECT_PATH=null
per l'utilizzo in un sistema di compilazione integrato in cui le opzioni vengono passate esplicitamente andk-build
. Con questa impostazione,ndk-build
non tenterà di cercareNDK_PROJECT_PATH.
. Questa impostazione impedisce anche alle variabili di ricavare le impostazioni predefinite da NDK_PROJECT_PATH. Di conseguenza, le seguenti variabili devono ora essere specificate esplicitamente (con i relativi valori predefiniti, se presenti):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(facoltativa, il valore predefinito è 0) e le altre variabiliAPP_*
contenute inApplication.mk
. APP_ABI
ora può essere enumerato in un elenco delimitato da virgole. Ad esempio:APP_ABI := "armeabi,armeabi-v7a"
- È stata possibile ricreare tutto il codice 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 consente allo scriptndk-stack
di fornire un migliore dump dello stack nel codice STL. Questa modifica non dovrebbe influire sul codice o sulle dimensioni del file finale rimosso. - Sono stati avanzati
hello-jni
esempi per segnalareAPP_ABI
al momento della compilazione. - È stato utilizzato lo strumento
ar
in modalità deterministica (opzione-D
) per creare librerie statiche. (Numero 60705)
Android NDK r9b (ottobre 2013)
- Modifiche importanti:
-
- Sono stati aggiornati
include/android/*h
emath.h
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 19 di Android, inclusa l'associazione Renderscript.
- Aggiunto il supporto per
-mhard-float
nell'ABI armeabi-v7a esistente. Per ulteriori informazioni e per le attuali limitazioni su Clang, consultatests/device/hard-float/jni/Android.mk
. - Migrazione dalla GNU Compiler Collection (GCC) dalla versione 4.8 alla versione 4.8.2 e aggiunto il supporto dei colori per la diagnostica. Per attivare i colori della diagnostica, imposta
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
o esportaGCC_COLORS
come mostrato di seguito:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Per maggiori informazioni, consulta Opzioni indipendenti dalla lingua di GCC. - Sono stati aggiunti due nuovi campioni 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 deprecato GCC 4.7 e Clang 3.2, che verrà rimosso nella prossima release.
- Sono stati aggiornati
- Correzioni di bug importanti:
-
- È stato risolto il problema a causa del quale
thumb2
di ARM GCC 4.6 non riusciva a generare tabelle di salto relative a 16 bit. (Problema GCC) - Corretto l'errore di compilatore interno (ICE) in GCC 4.8 su
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Modifica 62770, Problema GCC) - Risolto il problema che non consentiva l'avvio dei file eseguibili
*-gdb.exe
a 32 bit di Windows. (Problema 58975) - È stato risolto il problema ICE di GCC 4.8 durante la creazione di una libreria bullet. Il messaggio di errore è il seguente:
internal compiler error: verify_flow_info failed
(Problema 58916, Problema GCC) - La build GDB/ARM è stata modificata per saltare i dati di
ARM.exidx
per l'annullamento nel codice del prologo e è stato aggiunto un comando (set arm exidx-unwinding
) per controllare lo svolgimento dello stack basato su exidx. (Problema 55826) - È stato risolto il problema del compilatore MIPS Clang 3.3 a causa del quale i registri HI e LO venivano riutilizzati in modo errato.
- È stato risolto il problema relativo a MIPS 4.7 ICE in
dbx_reg_number
. Il messaggio di errore è il seguente:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(Patch di GCC)
- È stato risolto il problema a causa del quale
- Altre correzioni di bug:
-
- Correzioni delle intestazioni
- È stato corretto l'annullamento della firma di ARM
WCHAR_MIN
eWCHAR_MAX
in base alle specifiche (le versioni X86/MIPS sono firmate). Definisci_WCHAR_IS_ALWAYS_SIGNED
per ripristinare il comportamento precedente. (Problema 57749) - È stato risolto il problema di
include/netinet/tcp.h
che conteneva l'enum dello statoTCP_INFO
. (Problema 38881) - È stata corretta la macro
cdefs_elh.h
_C_LABEL_STRING
per interrompere la generazione di avvisi nella Toolchain di GCC 4.8 quando si utilizza la modalità c++11. (Numero 58135, Numero 58652) - Rimosse le funzioni inesistenti
imaxabs
eimaxdiv
dall'intestazioneinttypes.h
. - È stato risolto il problema relativo ai valori restituiti di
pthread_exit()
e dipthread_self()
. (Problema 60686) - È stata aggiunta la funzione
mkdtemp()
mancante, già esistente nell'intestazionebionic
stdlib.h
.
- È stato corretto l'annullamento della firma di ARM
- È stato risolto il problema relativo alla creazione di
samples/gles3jni
con Clang sul livello API 11 per Android. - È stato corretto MCLinker per consentire più occorrenze delle seguenti opzioni:
-gc-sections
e--eh-frame-hdr
. - È stato corretto l'accettazione dell'opzione
--no-warn-mismatch
da parte di MCLinker. - Opzione
cpu-features
modificata per non presupporre che tutti i dispositivi VFPv4 supportino IDIV. Ora questa opzione consente di aggiungere IDIV solo ai dispositivi autorizzati, tra cui Nexus 4. (Problema 57637) - È stato risolto il problema relativo a
android_native_app_glue.c
che registrava erroneamente gli errori nelle operazioni di pre-invio degli eventi. - È stato risolto il problema relativo alla sicurezza dei thread per tutte le operazioni sull'arresto
gabi++
e su imprevisto_handler. - Sono stati risolti diversi problemi relativi all'opzione
-integrated-as
di Clang che consente di superare i test perssax-instructions
efenv
. - È stato risolto il problema del compilatore GCC 4.6/4.7/4.8 che consentiva di passare l'opzione linker
--eh-frame-hdr
anche per gli eseguibili statici. Per maggiori informazioni, consulta la patch di GCC. - È stato corretto l'apostrofo aggiuntivo in
CPU-ARCH-ABIS.html
. Per maggiori informazioni, vediNDK-DEPENDS.html
. (Problema 60142) - Sono state corrette le virgolette aggiuntive nell'output ndk-build su Windows. (Problema 60649)
- È stato corretto Clang 3.3 per compilare le operazioni atomiche integrate di ARM come
__atomic_fetch_add
,__atomic_fetch_sub
e__atomic_fetch_or
. - Risolto Clang 3.3 ICE con
vfprintf
personalizzato. (Problema clang)
- Correzioni delle intestazioni
- Altre modifiche:
-
- OpenMP abilitato per tutte le build GCC. Per utilizzare questa funzionalità, aggiungi i seguenti flag alle impostazioni della build:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Per esempi di codice, consultatests/device/test-openmp
- Ridotta in modo significativo la dimensione di
ld.mcld
(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 ma non a C++.LOCAL_CFLAGS
eAPP_CFLAGS
esistenti vengono utilizzati anche per la compilazione C++ (per evitare di dover specificare due volte la maggior parte delle opzioni), pertanto opzioni come-std=gnu99
potrebbero non riuscire nelle build di g++ con un avviso e le build clang++ con un errore. - Sono state aggiunte
gabi++
funzioni helper dell'array. - Build GCC modificate in modo che tutti i file
libgcc.a
vengano creati con-funwind-tables
per consentire lo svolgimento dello stack oltre i punti bloccati in precedenza, come__aeabi_idiv0
. - Aggiunto il supporto Ingenic MXU in MIPS GCC4.6/4.7/4.8 con la nuova opzione
-mmxu
. - MIPS estesi GCC4.6/4.7/4.8
-mldc1-sdc1
per controllare anche ldxc1/sdxc1 - Aggiunto linker pazzesco. Per maggiori 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. - Ha ridotto le dimensioni della Toolchain di Linux e Darwin del 25% grazie alla creazione di link simbolici a file identici.
- OpenMP abilitato per tutte le build GCC. Per utilizzare questa funzionalità, aggiungi i seguenti flag alle impostazioni della build:
Android NDK r9 (luglio 2013)
- Modifiche importanti:
-
- Aggiunto il supporto per Android 4.3 (livello API 18). Per maggiori informazioni, consulta
STABLE-APIS.html
e nuovi esempi di codice insamples/gles3jni/README
. - Sono state aggiunte intestazioni e librerie per OpenGL ES 3.0, che è 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 abilitare esplicitamente questa opzione:
- Per
ndk-build
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 maggiori informazioni, consulta la pagina Modifica del codice 55460Nota: nella release GCC 4.7 e successive, i compilatori ARM generano per impostazione predefinita codice di accesso non allineato per le destinazioni delle build ARMv6 e successive. Potrebbe essere necessario aggiungere l'opzione di build
-mno-unaligned-access
durante la creazione per kernel che non supportano questa funzionalità. - Per
- Aggiunto il supporto per Clang 3.3. L'opzione di build
NDK_TOOLCHAIN_VERSION=clang
ora sceglie Clang 3.3 per impostazione predefinita.Nota: GCC 4.4.3 e Clang 3.1 sono entrambi deprecati e verranno rimossi dalla prossima release di NDK.
- Aggiornamento di GNU Project Debugger (GDB) per supportare Python 2.7.5.
- È stato aggiunto MCLinker per supportare gli host Windows. Poiché
ld.gold
è l'impostazione predefinita, dove disponibile, devi aggiungere-fuse-ld=mcld
inLOCAL_LDFLAGS
oAPP_LDFLAGS
per abilitare MCLinker. - 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 maggiori informazioni, consulta
- Correzioni di bug importanti:
-
- Risolto il 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 il caricamento NEON e l'archiviazione delle istruzioni VST e VLD. (Numero GCC 57271)
- Risolto un errore ICE (Internal Compilatore) di GCC 4.4.3/4.6/4.7 per un valore di indice negativo costante su un valore letterale stringa. (Problema 54623)
- Risolto il problema di segmentazione GCC 4.7 per l'inizializzazione costante con un indirizzo oggetto. (Problema 56508)
- Risolto l'errore di segmentazione ARM in GCC 4.6 per i valori
-O
quando si utilizza il boost 1.52.0. (Problema 42891) - Sono stati corretti
libc.so
elibc.a
per supportare la funzionewait4()
. (Numero 19854) - Sono stati aggiornati i file x86 libc.so e libc.a in modo da includere la funzione
clone()
. - È stato corretto il bug
LOCAL_SHORT_COMMANDS
per cui il filelinker.list
era vuoto o non utilizzato. - Risolto il problema della build MIPS GCC su Mac OS per l'utilizzo delle direttive CFI, senza le quali
ld.mcld --eh-frame-hdr
restituisce spesso errori. - È stato corretto l'errore di compilazione interno X86/MIPS di Clang 3.2 in
llvm/lib/VMCore/Value.cpp
. (Cambia 59021) - Risolto l'arresto anomalo dell'assemblatore di 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
attendano ora il server di debug GNU, in modo che possa raggiungere i punti di interruzione impostati in modo più affidabile all'inizio del percorso di esecuzione (come i punti di interruzione nel codice JNI). (Problema 41278)Nota: questa funzionalità richiede jdb e genera avvisi sui punti di interruzione in sospeso. Specifica l'opzione
--nowait
per ripristinare il comportamento precedente. - È stato risolto l'arresto anomalo di GDB quando l'elenco delle librerie era vuoto.
- È stato risolto l'arresto anomalo di GDB durante l'utilizzo di un comando
stepi
dopo un'istruzione Thumbbx pc
oblx pc
. (Numero 56962, Numero 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, allora B è stato eliminato dalla build. (Problema 56690)
- Risolto il 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 esempioNDK_TOOLCHAIN_VERSION=clang3.2
). In precedenza, solo specificare la versione come variabile di ambiente funzionava. - È stata corretta la dimensione gabi++ di
_Unwind_Exception
in modo che sia 24 per le destinazioni delle build MIPS quando si utilizza il compilatore Clang. (Cambia 54141) - È stato corretto lo script
ndk-build
per garantire che le librerie create vengano effettivamente rimosse dai progetti che includono librerie statiche predefinite quando si utilizza il comandondk-build clean
. (Cambia 54461, Cambia 54480) - L'opzione
NDK_ANALYZE=1
è stata modificata per renderla meno dettagliata. - È stato corretto
gnu-libstdc++/Android.mk
per includere un percorsobackward/
per le build che utilizzano la compatibilità con le versioni precedenti. (Problema 53404) - Risolto il problema per cui a volte
stlport new
restituisce valori casuali. - È stato corretto
ndk-gdb
in modo che corrisponda all'ordine diCPU_ABIS
e non diAPP_ABIS
. (Problema 54033) - Risolto un problema per cui la build NDK a 64 bit su MacOSX sceglieva il percorso sbagliato per il compilatore. (Problema 53769)
- Sono stati corretti gli script di build per il rilevamento di Windows Vista a 64 bit. (Problema 54485)
- Corretto l'errore x86
ntonl/swap32
:invalid 'asm': operand number out of range
. (Problema 54465, Modifica 57242) - È stato corretto
ld.gold
per unire i valori letterali stringa. - È stato risolto il problema
ld.gold
per gestire l'allineamento di simboli di grandi dimensioni. - Aggiornamento di
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 in modo statico. GCC non aggiunge più una sezione.interp
per i programmi collegati in modo statico. - Corretto l'errore di compilazione
stlport
in GCC 4.4.3 a causa di un'incoerenza ditypedef
di_Unwind_Control_Block
. (Problema 54426) - Sono stati corretti gli script
awk
per gestire i fileAndroidManifest.xml
creati su Windows che potrebbero contenere\r
caratteri finali e causare errori di build. (Problema 42548) - È stato corretto
make-standalone-toolchain.sh
per eseguire il probe della directoryprebuilts/
al fine di rilevare se l'host è a 32 o 64 bit. - È stata corretta l'opzione
-integrated-as
Clang 3.2. - Sono stati corretti i dati del gestore
pr1
epr2
del modello compatto ARM EHABI Clang 3.2. - È 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 build quando non è presente alcun elemento
uses-sdk
nel manifest dell'applicazione. (Problema 57015)
- È stato corretto lo script
- Altre modifiche:
-
- Correzioni delle intestazioni
- Intestazioni modificate per rendere
__set_errno
una funzione incorporata, dato che__set_errno
inerrno.h
è deprecato elibc.so
non la esporta più. elf.h
modificato con l'inclusione distdint.h
. (Problema 55443)- È stato risolto il problema di
sys/un.h
da includere indipendentemente dalle altre intestazioni. (Problema 53646) - È stata corretta l'intera famiglia di API
MotionEvent_getHistorical
in modo che utilizziconst AInputEvent* motion_event
. (Problema 55873) - È stato risolto il problema di
malloc_usable_size
che richiedevaconst void*
. (Problema 55725) - È stato corretto stdint.h per essere più compatibile con C99. (Modifica 46821)
- Modifica di
wchar.h
in modo da non ridefinireWCHAR_MAX
eWCHAR_MIN
- corretta la dichiarazione
<inttypes.h>
per le macroPRI
eSCN
relative al puntatore. (Problema 57218) - L'intestazione
sys/cdefs.h
è stata modificata 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 correzioni di documentazione di vario tipo. - Aggiunto il supporto di una tecnica di archiviazione sottile durante la creazione di librerie statiche. (Problema 40303)
- Lo script
make-standalone-toolchain.sh
è stato aggiornato 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 sono stati disattivati in NDK per una migliore compatibilità con il codice compilato da GCC:
- Aggiunto un flag
-fcxx-missing-return-semantics
per riattivare la semantica di ritorno mancante in Clang 3.2 e versioni successive. Normalmente, tutti i percorsi devono terminare con un'istruzione di ritorno per una funzione con valore restituito. In caso contrario, clang inserisce un'istruzione non definita (o esegue il trap in modalità di debug) nel percorso senza un'istruzione di ritorno. Se hai la certezza che il codice sia corretto, utilizza questo flag per consentire all'ottimizzatore di sfruttare il comportamento non definito. In caso di dubbi, non utilizzare questo flag. Il chiamante potrebbe comunque ricevere un valore casuale non corretto, 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 di variabili globali con costruttore statico per essere costanti. Con questo flag, il pass di ottimizzazione della variabile globale di LLVM tenta di valutare le variabili globali con costruttori statici e di 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 trasmettere la costante in modificabile 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.
- Aggiunto un flag
- Aggiunta di
-mldc1-sdc1
ai compilatori GCC e Clang di MIPS. 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 come l'allocatore predefinito, l'app potrebbe arrestarsi in modo anomalo a causa delle operazionildc1
esdc1
sulla memoria non allineata. In questo caso, utilizza il flag-mno-ldc1-sdc1
per risolvere il problema. - È stata ridotta la gravità dell'evento da avviso a informazioni se
APP_PLATFORM_LEVEL
è maggiore diAPP_MIN_PLATFORM_LEVEL
. Il valoreAPP_PLATFORM_LEVEL
potrebbe essere inferiore aAPP_PLATFORM
injni/Application.mk
perché l'NDK non ha intestazioni per tutti i livelli. In questo caso, il livello effettivo viene spostato verso il basso.APP_MIN_PLATFORM_LEVEL
è specificato daandroid:minSdkVersion
nel file manifest dell'applicazione. (Problema 39752) - Sono stati aggiunti i metodi
android_getCpuIdArm()
eandroid_setCpuArm()
acpu-features.c
. Questa aggiunta consente di recuperare più facilmente le informazioni del CPUID ARM. (Problema 53689) - È stato modificato il valore
ndk-build
in modo da utilizzareas/ld
di GCC 4.7 per la compilazione di clan.Nota: In GCC 4.7,
monotonic_clock
eis_monotonic
sono stati rinominati rispettivamentesteady_clock
eis_steady
. - 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 creare.
- È stato aggiunto un avviso relativo alle librerie non di sistema in uso in
LOCAL_LDLIBS/LDFLAGS
di una libreria condivisa o di moduli eseguibili.
- Sono stati aggiunti avvisi se
- Script di build aggiornati: se
APP_MODULES
non è definito e inAndroid.mk
sono elencate solo librerie statiche, lo script le crea tutte. (Problema 53502) - Aggiornamento di
ndk-build
aggiornato per supportare percorsi assoluti inLOCAL_SRC_FILES
. - Sono stati rimossi gli eseguibili
*-gdbtui
, che sono duplicati degli eseguibili*-gdb
con l'opzione-tui
abilitata. - Sono stati aggiornati gli script di build per avvisarti quando il front-end del compilatore Edison Design Group (EDG) riattiva
_STLP_HAS_INCLUDE_NEXT
. (Problema 53646) - È stata aggiunta la variabile di ambiente
NDK_LIBS_OUT
per consentire l'override del percorso perlibraries/gdbserver
dal valore predefinito$PROJECT/libs
. Per ulteriori informazioni, vediOVERVIEW.html
. - Le impostazioni predefinite dello script ndk-build sono state modificate per compilare il codice con la protezione delle stringhe di formato
-Wformat -Werror=format-security
. Puoi impostareLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
in modo da disabilitarlo. Per ulteriori informazioni, vediANDROID-MK.html
- Aggiunto il supporto per la stampa STL in
ndk-gdb-py
. Per maggiori 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 attuale non è
bash
.
- Correzioni delle intestazioni
Android NDK r8e (marzo 2013)
- Modifiche importanti:
-
- Aggiunto set di strumentichain dell'host a 64 bit (suffisso del nome del pacchetto
*-x86_64.*
). Per ulteriori informazioni, consulta le pagineCHANGES.HTML
eNDK-BUILD.html
. - Aggiunto il compilatore Clang 3.2. GCC 4.6 è ancora l'impostazione predefinita. Per informazioni sull'utilizzo del compilatore Clang, consulta
CHANGES.HTML
. - Aggiunto l'analizzatore del codice statico per gli host Linux/MacOSX. Per informazioni sull'utilizzo dell'analizzatore, vedi
CHANGES.HTML
. - È stato aggiunto MCLinker per gli host Linux/MacOSX come funzionalità sperimentale. Il linker
ld.gold
è l'impostazione predefinita, dove disponibile, quindi devi abilitarlo esplicitamente. Per maggiori informazioni, consultaCHANGES.HTML
. - ndk-build aggiornato in modo da utilizzare l'ordinamento topologico per le dipendenze dei moduli; ciò significa che la build ordina automaticamente l'ordine delle librerie specificato in
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
eLOCAL_SHARED_LIBRARIES
. Per ulteriori informazioni, vediCHANGES.HTML
. (Problema 39378)
- Aggiunto set di strumentichain dell'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 release precedenti sono state create in modo errato senza ottimizzazione. - È stato corretto lo script di compilazione che creava senza condizioni Clang/llvm per MacOSX a 64 bit.
- Corretto l'errore del compilatore interno in GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Problema 52732) - È stato risolto il problema di build a causa del quale GCC/ARM 4.6/4.7 non riesce a collegare il codice utilizzando le funzioni integrate atomiche a 64 bit. (Problema 41297)
- Sono stati corretti gli errori di mancata corrispondenza dell'utilizzo del DIV linker GCC 4.7. (Problema Sourceware)
- Corretto l'errore di compilatore interno in GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - Corretto l'errore di compilatore interno in GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (Problema 52909) - È stato corretto un segfault GCC 4.7. (Problema GCC)
- Risoluzione dell'orologio
<chrono>
fissa esteady_clock
abilitato. (Problema 39680) - È stata corretta la Toolchain per abilitare
_GLIBCXX_HAS_GTHREADS
per GCC 4.7 libstdc++ (Issue 41770, Issue 41859) - È stato risolto il problema a causa del quale il codice X86 MXX/SSE non si collegava a causa dell'assenza di
posix_memalign
. (Cambia 51872) - Corretto l'errore di segmentazione GCC4.7/X86 in
i386.c
, funzionedistance_non_agu_define_in_bb()
. (Cambia 50383) - È stato corretto GCC4.7/X86 per ripristinare il comportamento precedente di
cmov
. (Problema GCC) - Corretto il valore restituito NULL di
setlocale()
in libstdc++/GCC4.7. (Problema 46718) - Risolto il riferimento non definito del runtime
ld.gold
a__exidx_start
e__exidx_start_end
. (Cambia 52134) - È stato corretto l'errore di compilazione interno di Clang 3.1 durante l'utilizzo della libreria Eigen. (Problema 41246)
- È stato corretto l'errore di compilazione interno di Clang 3.1, che includeva
<chrono>
in modalità C++11. (Problema 39600) - È stato risolto l'errore del compilatore interno di Clang 3.1 durante la generazione del codice oggetto per una chiamata al metodo a un
rvalue
inizializzato in modo uniforme. (Problema 41387) - Riallineamento dello stack Clang 3.1/X86 fisso. (Cambia 52154)
- È stato risolto il problema con SIGILL di GNU Debugger (GDB) durante il debug su Android 4.1.2. (Problema 40941)
- È stato risolto il problema a causa del quale GDB non può impostare punti di interruzione
source:line
quando i simboli contengono percorsi di file lunghi e indiretti. (Problema 42448) - Risolto il problema di GDB
read_program_header
per gli eseguibili PIE MIPS. (Cambia 49592) - È stato corretto l'errore di segmentazione
STLport
inuncaught_exception()
. (Cambia 50236) - Corretto l'errore del bus
STLport
nella gestione delle eccezioni a causa di un accesso non allineato diDW_EH_PE_udata2
,DW_EH_PE_udata4
eDW_EH_PE_udata8
. - Risolto il problema di ricorsione infinita di Gabi++ con l'operatore
nothrow new[]
. (Problema 52833) - È stato corretto l'offset Gabi++ errato per il puntatore del gestore delle eccezioni. (Cambia 53446)
- Rimosso Gabi++ ridondante su oggetto di eccezione (Modifica 53447)
- È stato corretto lo script di build per creare tutte le Toolchain in
- Altre correzioni di bug:
-
- Intestazioni NDK corrette:
- Rimosse le definizioni ridondanti di
size_t
,ssize_t
eptrdiff_t
. - Correzione dell'intestazione MIPS e ARM
fenv.h
. - È stato corretto
stddef.h
in modo che non ridefinireoffsetof
poiché esiste già nella Toolchain. - È stato risolto il problema di
elf.h
che contenevaElf32_auxv_t
eElf64_auxv_t
. (Problema 38441) - Sono state corrette le definizioni di
#ifdef
in C++ nel file di intestazioneOpenSLES_AndroidConfiguration.h
. (Problema 53163)
- Rimosse le definizioni ridondanti di
- È stato risolto il problema di
STLport
in modo che venisse interrotto dopo un errore di esaurimento della memoria anziché uscire automaticamente. - È stato corretto il sistema e le intestazioni Gabi++ per poter eseguire la compilazione con il livello API 8 e livelli inferiori.
- Risolto il problema di
cpufeatures
per non analizzare/proc/self/auxv
. (Problema 43055) - È stato corretto
ld.gold
in modo che non dipendesse dall'host libstdc++ e dalle piattaforme Windows, in modo da non dipendere dalla librerialibgcc_sjlj_1.dll
. - È stato corretto Clang 3.1, che emette un elenco di registri incoerente in
.vsave
e non funziona l'assemblaggio. (Cambia 49930) - È stato corretto Clang 3.1 in modo da poter compilare libgabi++ e superare i test
test-stlport
per i target di build MIPS. (Cambia 51961) - È stato corretto Clang 3.1 in modo che abilitasse solo 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 vengono trovati. - È stato risolto il problema
ndk-build
per osservare il valoreNDK_APP_OUT
impostato inApplication.mk
. - Sono stati risolti i problemi di X86
libc.so
elib.a
che non avevano le funzionisigsetjmp
esiglongjmp
già dichiarate insetjmp.h
. (Numero 19851) - Rinforzato con GCC 4.4.3/4.6/4.7 libstdc++ per lavorare con Clang in C++ 11. (Problema clang)
- Corretto percorso cygwin nell'argomento passato a
HOST_AWK
. - È stato risolto l'avviso di script
ndk-build
in Windows durante l'esecuzione dalla directory JNI del progetto. (Problema 40192) - È stato risolto il problema a causa del quale lo script
ndk-build
non veniva creato se makefile presentava uno spazio vuoto finale nella definizione diLOCAL_PATH
. (Problema 42841)
- Intestazioni NDK corrette:
- Altre modifiche:
-
- Supporto del threading abilitato nella Toolchain GCC/MIPS.
- Sono stati aggiornati gli assistenti per la gestione delle eccezioni di GCC
__cxa_begin_cleanup
e__cxa_type_match
in modo che abbiano una visibilità predefinita rispetto alla visibilità nascosta precedente in GNU libstdc++. Per ulteriori informazioni, consultaCHANGES.HTML
. - Gli script di build sono stati aggiornati in modo che le librerie statiche Gabi++ e STLport siano ora create con visibilità nascosta, ad eccezione degli assistenti per la gestione delle eccezioni.
- Build aggiornata in modo che
STLport
sia costruito per ARM in modalità Pollice. - Aggiunto il supporto per
std::set_new_handler
in Gabi++ (Problema 52805) - Chiamata di sistema
FUTEX
attivata in GNU libstdc++. - È stato aggiornato
ndk-build
in modo che non copi la libreria statica predefinita nella directoryobj/local/<abi>/
di un progetto. (Problema 40302) __ARM_ARCH_5*__
rimosso dallo script ARMtoolchains/*/setup.mk
. (Problema 21132)- Ha creato librerie GNU libstdc++ aggiuntive per ARM.
- Istruzioni MIPS in virgola mobile
madd/msub/nmadd/nmsub/recip/rsqrt
abilitate con FPU a 32 bit. - È stato abilitato l'ottimizzatore di loop di grafite in GCC 4.6 e 4.7 per consentire più ottimizzazioni:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
e-ftree-loop-linear
. (informazioni) - Abilitato
polly
per Clang 3.1 su Linux e su host a 32 bit Max OS X, che analizza e ottimizza l'accesso alla memoria. (informazioni) -flto
abilitato in GCC 4.7, 4.6, Clang 3.2 e Clang 3.1 su Linux (Clang LTO tramite LLVMgold.so). Le destinazioni del compilatore MIPS non sono supportate perchéld.gold
non è disponibile.- Abilitati
--plugin
e--plugin-opt
perld.gold
in GCC 4.6/4.7. - Impostazione
--text-reorder
attivata perld.gold
in GCC 4.7. - È stato configurato GNU libstdc++ con
_GLIBCXX_USE_C99_MATH
, che non definisce lo scriptisinf
nell'intestazione bionica. Per maggiori informazioni, vediCHANGES.html
. - Elemento
APP_LDFLAGS
aggiunto agli script di build. Per maggiori informazioni, vediANDROID-MK.html
. - Sono stati aggiornati gli script di build per consentire all'app
NDK_LOG=0
di disattivareNDK_LOG
. - Sono stati aggiornati gli script di build per consentire a
NDK_HOST_32BIT=0
di disabilitare la Toolchain a 32 bit dell'ambiente di sviluppo host. - I flag GCC/X86 predefiniti
-march=
e-mtune=
sono stati modificati dapentiumpro
egeneric
ai686
eatom
. - Script di build di Toolchain avanzati:
- È stata corretta una condizione di gara in
build-gcc.sh
per il tipo di buildmingw
che impediva una quantità significativa di elaborazione della build in parallelo. - Sono stati aggiornati
build-gabi++.sh
ebuild-stlport.sh
in modo che possano essere eseguiti dal pacchetto NDK. (Problema 52835) - È stato corretto
run-tests.sh
nella raccolta di utilitàMSys
. - Miglioramento della Toolchain per l'host a 64 bit e del supporto per le build canadesi delle build.
- Script
build-mingw64-toolchain.sh
aggiornato a una versione più recente. - Aggiunta un'opzione per creare
libgnustl_static.a
estlport_static.a
senza visibilità nascosta.
- È stata corretta una condizione di gara 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 l'impostazione predefinita, quindi devi abilitare esplicitamente la nuova versione come segue:
- 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 per le 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 progetto si collega 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 Android C 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
stessa non abilita alcuna opzione per-fstack-protector*
. - È stata 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. (Problema di Chromium 164154)
- È stato aggiunto il compilatore GNU Compiler Collection (GCC) 4.7 all'NDK. Il compilatore GCC 4.6 è ancora l'impostazione predefinita, quindi devi abilitare esplicitamente la nuova versione come segue:
- Correzioni di bug importanti:
-
- È stato risolto il problema di rigenerazione non necessaria dei file degli oggetti quando si utilizza lo script
ndk-build
. (Problema 39810) - Risolto il problema del linker nella release NDK 8c per Mac OS X 10.6.x che generava il seguente errore:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
Questo problema era causato dalla creazione su Mac OS X 10.7, che produceva programmi binari non compatibili con Mac OS 10.6.x e NDK. - Sono state rimosse le opzioni
-x c++
dallo script di build 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 in ambienti Cygwin, MingGW o CMD.exe. (Numero 39915, Numero 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) - Risolto un problema che impediva alla libreria di modelli standard (STL) di utilizzare origini C++ che non hanno un'estensione file
.cpp
. - È stato corretto l'errore di compilazione interno ARM GCC 4.6 all'indirizzo ricarica1.c:1061. (Problema 20862)
- Corretto l'errore di compilazione interno ARM in GCC 4.4.3 in emit-rtl.c:1954. (Problema 22336)
- Corretto l'errore di compilazione interno ARM in GCC 4.4.3 all'indirizzo postreload.c:396. (Problema 22345)
- Risolto il problema con GCC 4.6/4.7 che saltava le funzioni lambda. (Problema 35933)
- È stato risolto il problema di rigenerazione non necessaria dei file degli oggetti quando si utilizza lo script
- Altre correzioni di bug:
-
- Correzioni del file di intestazione NDK:
- È stato corretto lo stesso tipo di
__WINT_TYPE__
ewint_t
. - Errore di ortografia corretto in
android/bitmap.h
. (Problema 15134) - Errore di ortografia corretto in
errno.h
. - È stato aggiunto il controllo della presenza di
__STDC_VERSION__
insys/cdefs.h
. (Problema 14627) - Intestazioni riorganizzate in
byteswap.h
edirent.h
. - È stato corretto l'elemento
limits.h
per includerepage.h
, che fornisce le impostazioni diPAGE_SIZE
. (Problema 39983) - Corretto il tipo restituito da
glGetAttribLocation()
eglGetUniformLocation()
daint
aGLint
. - È stata corretta la costante
__BYTE_ORDER
per le build x86. (Problema 39824)
- È stato corretto lo stesso tipo di
- È stato corretto lo script
ndk-build
in modo da non sovrascrivere-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 il problema relativo a
ld.gold
in buildfsck_msdos
che collegavano oggetti creati dal compilatore Intel C/C++ (ICC). - Risolto il supporto di ARM EHABI in Clang per garantire la conformità alle specifiche.
- È stato corretto GNU Debugger (GDB) per ridurre il tempo necessario a visualizzare la mappa dei link della destinazione durante gli eventi
solib
. (Problema 38402) - È stato risolto il problema di
libgcc.a
file mancante durante il collegamento delle librerie condivise.
- Correzioni del file di intestazione NDK:
- Altre modifiche:
-
- Funzioni atomiche integrate a 64 bit con backport per le funzioni ARM in GCC 4.6.
- È stata aggiunta la documentazione per la latenza dell'output audio, insieme ad altra documentazione e correzioni.
- Sono state corrette le build di debug con Clang in modo che le funzioni non-void generino ora un indicatore
SIGILL
per i percorsi senza un'istruzione di ritorno. - È stato aggiornato
make-standalone-toolchain.sh
per accettare il suffisso-clang3.1
, che equivale all'aggiunta di--llvm-version=3.1
alla Toolchain di GCC 4.6. - URL per la segnalazione di bug di GCC e Clang aggiornato in: https://source.android.com/source/report-bug s.html
- Aggiunto il supporto per ARM ELF a
llvm-objdump
. - Avviso trattamento input c come c++ soppresso per build Clang.
- Build aggiornata in modo che venga creata e posizionata solo la versione a 32 bit di
libiberty.a
inlib32/
.
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 come segue:
- 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 tuo makefile con<tool-path>/bin/clang
e<tool-path>/bin/clang++
. Consulta la paginaSTANDALONE-TOOLCHAIN.html
per i dettagli.
Nota: questa funzionalità è sperimentale. Provalo e segnala eventuali problemi.
- Per
- Aggiunto il linker Gold
ld.gold
per la Toolchain di Windows. Il linker oro è anche il valore predefinito 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. - È stato aggiunto il controllo degli spazi nel percorso NDK agli script
ndk-build[.cmd]
endk-gdb
per evitare errori di build difficili da diagnosticare. - Apportate le seguenti modifiche alla gestione del livello API:
- È stata modificata la logica di build 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). La nuova opzioneAPP_PIE
ti consente di controllare questo comportamento. Per informazioni dettagliate, visita la paginaAPPLICATION-MK.html
.Nota: tutti i livelli API superiori a 14 rimandano ancora a
platforms/android-14
e non sono stati aggiunti nuoviplatforms/android-N
. ndk-build
modificato per fornire avvisi se il livello API modificato è superiore aandroid:minSdkVersion
nel valoreAndroidManifest.xml
del progetto.
- È stata modificata la logica di build in modo che i progetti che specificano
- È stata aggiornata la libreria di helper
cpu-features
per includere altre funzionalità specifiche per ARM. Per informazioni dettagliate, visita la paginasources/android/cpufeatures/cpu-features.h
. - Modificato il doppio lungo sulla piattaforma X86 in modo che sia di 8 byte. Ora questo tipo di dati ha le stesse dimensioni di un tipo doppio, ma viene comunque considerato un tipo distinto.
- Build aggiornata per
APP_ABI=armeabi-v7a
:- Questo tipo di build è stato modificato in modo da passare il parametro
-march=armv7-a
al linker. Questa modifica garantisce che le librerie specifiche per v7 ecrt*.o
siano collegati correttamente. -mfpu=vfpv3-d16
aggiunta andk-build
anziché l'opzione-mfpu=vfp
utilizzata nelle release precedenti.
- Questo tipo di build è stato modificato in modo da 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 come segue:
- Correzioni di bug importanti:
-
- Risolto un problema per cui l'esecuzione di
make-standalone-toolchain.sh
con privilegi root impediva ad alcuni utenti di accedere alla catena di strumenti autonomi. (Problema 35279)- Tutti i file e gli eseguibili nel pacchetto di release NDK sono impostati per disporre delle autorizzazioni di lettura ed esecuzione per tutti.
- La proprietà o il gruppo di
libstdc++.a
vengono ora conservati quando vengono copiati.
- Rimozione dell'elemento
\r
ridondante dall'elementoecho.exe
predefinito di Windows. L'elemento ridondante\r
ha causato l'errore digdb.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 tempistica nell'implementazione
host-mkdir
. (Problema 25875) - È stato corretto GCC 4.4.3 GNU
libstdc++
in modo da non unire i nomitypeinfo
per impostazione predefinita. Per maggiori dettagli, consultatoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Problema 22165) - È stato risolto il problema nel contesto
null
in GCC 4.6cp/mangle.c::write_unscoped_name
, in cui GCC potrebbe arrestarsi in modo anomalo quando il contesto ènull
e viene rimosso il riferimento inTREE_CODE
. - Sono stati corretti gli arresti anomali di GCC 4.4.3 nelle definizioni di tipo specifiche per ARM NEON per i float. (Problema 34613)
- È stata corretta l'implementazione
_IteWrapper::operator*()
interna diSTLport
in cui veniva restituita una posizione dello stack inattiva contenente il valore dereferenziato che causava arresti anomali di runtime. (Problema 38630) - Correzioni specifiche per ARM:
- È stato risolto il problema
g++
di ARM GCC 4.4.3/4.6 per non avvisare che il mangling di <va_list> è stato modificato in GCC 4.4. La soluzione alternativa mediante l'opzione-Wno-psabi
per evitare questo avviso non è più necessaria. - Risolto un problema quando un progetto con 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. È stato modificatondk-build
per escludere 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 risolto il problema di
binutils-2.21/ld.bfd
in modo che fosse in grado di collegare l'oggetto dai binutils precedenti senzatag_FP_arch
, che produceva messaggi di errore di tipo assertion failure in GNU Binutils. (Problema 35209) - Avviso Attributo oggetto EABI sconosciuto 44 rimosso quando
binutils-2.19/ld
collega l'oggetto predefinito dalla versione più recente dibinutils-2.21
- Risolto un problema nella compilazione GNU
stdc++
con-mthumb
e-march=armv7-a
, modificandomake-standalone-toolchain.sh
in modo da completareheaders/libs
nella sottodirectoryarmv7-a/thumb
. (Problema 35616) - È stato corretto l'errore di trasferimento R_ARM_THM_CALL non risolvibile. (Problema 35342)
- È stato risolto l'errore del compilatore interno in
reload1.c:3633
, causato dal backend ARM che prevedeva il tipo di operando sbagliato quando si effettua l'estensione di segno dachar
. (Versione GCC 50099) - È stato corretto l'errore di compilazione interno con una quantità di spostamento negativa. (Problema GCC)
- È stato risolto il problema
- È stato corretto
-fstack-protector
per X86, che è anche il valore predefinito per il target ABI x86ndk-build
. - Correzioni specifiche per MIPS:
- È stato risolto l'endianità di
STLport
impostando_STLP_LITTLE_ENDIAN
su 1 durante la compilazione del MIPSlibstlport_*
. - È stato risolto il problema
__builtin_unreachable
di GCC durante la compilazione dell'LLVM. (Numero GCC 54369) - Correzione di backport per il processo di compilazione di
cc1
che consumava il 100% della CPU. (Versione GCC 50380)
- È stato risolto l'endianità di
- Correzioni specifiche di GNU Debugger:
- Supporto Python disabilitato in gdb-7.x in fase di compilazione, altrimenti la funzione di configurazione gdb-7.x potrebbe recuperare qualsiasi versione Python disponibile sull'host e creare
gdb
con una dipendenza tramite cavo su una versione specifica di Python. (Problema 36120) - È stato risolto il problema
ndk-gdb
quandoAPP_ABI
contieneall
e non corrisponde a nessuna delle architetture note. (Problema 35392) - È stato risolto il supporto dei nomi di percorso di Windows, mantenendo il carattere
:
se sembrava far parte di un percorso Windows che iniziava con una lettera di unità. (Versione GDB 12843) - È stato corretto l'aggiunta del supporto dei punti di interruzione hardware per ARM in
gdbserver
. (Problema GDB) - Aggiunta una correzione per leggere l'attuale
solibs
solo quando il linker è coerente. Questa modifica velocizza la gestione degli eventi disolib
. (Problema 37677) - È stata aggiunta una correzione per tentare ripetuti tentativi di trovare
solib
punti di interruzione. GDB ora fa un nuovo tentativo conenable_break()
durante ogni chiamata asvr4_current_sos()
finché l'operazione non va a buon fine. (Cambia 43563) - Risolto un problema per cui
gdb
non si interrompeva sui punti di interruzione posizionati nelle libreriedlopen-ed
. (Problema 34856) - È stato corretto
SIGILL
nel linker dinamico durante la chiamata adlopen()
, sui sistemi in cui/system/bin/linker
è stato rimosso dai simboli ertld_db_dlactivity()
è stato implementato comeThumb
, poiché non è stato conservatoLSB
disym_addr
. (Problema 37147)
- Supporto Python disabilitato in gdb-7.x in fase di compilazione, altrimenti la funzione di configurazione gdb-7.x potrebbe recuperare qualsiasi versione Python disponibile sull'host e creare
- Risolto un problema per cui l'esecuzione di
- Altre correzioni di bug:
-
- Intestazioni NDK corrette:
- È stato corretto il codice
arch-mips/include/asm/*
che è stato erroneamente rimosso dal kernel originale. (Cambia 43335) - I dati del membro struct
__unused
sono stati sostituiti con__linux_unused
inlinux/sysctl.h
elinux/icmp.h
per evitare conflitti con#define __unused
insys/cdefs.h
. fenv.h
corretto per le funzioni C racchiuse con__BEGIN_DECLS
e__END_DECLS
.- Le funzioni non implementate sono state rimosse in
malloc.h
. - Definizione di
stdint.h
diuint64_t
per i compilatori ANSI corretta. (Numero 1952) - Sono state corrette le macro del preprocessore in
<arch>/include/machine/*
. - È stato sostituito
link.h
per MIPS con una nuova versione che supporta tutte le piattaforme. linux-unistd.h
rimosso- Sposta le macro specifiche di GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
eULONG_LONG_MAX
da<pthread.h>
a<limits.h>
.
- È stato corretto il codice
- È stato corretto un overflow del buffer in
ndk-stack-parser
. - È stato corretto
_STLP_USE_EXCEPTIONS
, se non definito, per omettere tutte le dichiarazioni e gli utilizzi di__Named_exception
. La compilazione e l'utilizzo delle impostazioni__Named_exception
si verificano solo quandoSTLport
è autorizzato a utilizzare le eccezioni. - Risoluzione corretta di pacchetti NDK solo per Linux senza creare anche codice Windows. Utilizza le
impostazioni seguenti per eseguire questo tipo di build:
./build/tools/make-release.sh --force --systems=linux-x86
- È stato corretto
libc.so
in modo che non vengano esportatiatexit()
e__do_handler
. Questi simboli vengono esportati per le build ARM dalla versione di sistema della libreria C per supportare le librerie native legacy. I video generati da NDK non devono mai fare riferimento a questi elementi direttamente. Ogni libreria condivisa o file eseguibile deve invece 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é in questo casocrtbegin_so.o
non è collegato. Il contenuto di__dso_handle
non è importante, come mostrato nel seguente codice di esempio:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Corretto il decodificatore di simboli per ARM utilizzato in
objdump
per le vociplt
al fine di generare un formatofunction@plt
più leggibile. - Sono stati rimossi i seguenti simboli, introdotti in GCC 4.6
libgcc.a
, dalla librerialibc.so
della piattaforma X86:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
e__aeabi_unwind_cpp_pr2
. - Rimossi
.ctors
,.dtors
e.eh_frame
inutilizzati nei MIPScrt*_so.S
. - È stato aggiornato
ndk-gdb
in modo che occupi solo l'ultima riga di output dindk-build
DUMP_XXXX
. Questa modifica assicura che seApplication.mk
oAndroid.mk
stampano elementi con la sintassi$(info ...)
, l'elemento non venga inserito nel risultato diDUMP_XXXX
. (Scopri di più)
- Intestazioni NDK corrette:
- Altre modifiche:
-
- Intestazioni
arch-x86
earch-mips
rimosse daplatforms/android-[3,4,5,8]
. Queste intestazioni erano incomplete, poiché sia le ABI X86 che MIPS sono supportate solo con l'API 9 o versioni successive. - Il formato C++ semplificato include il percorso 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 altre estensioni file C++ per impostazione predefinita:.cc .cp .cxx .cpp .CPP .c++ .C
. Puoi comunque utilizzareLOCAL_CPP_EXTENSION
per sovrascrivere le impostazioni dell'estensione. - Risolto un problema in
samples/san-angeles
che causava una schermata nera o un blocco del frame al riavvio. - API deprecate sostituite in esempi NDK.
(Problema 20017)
hello-gl2
da android-5 ad android-7native-activity
da android-9 ad android-10native-audio
da android-9 ad android-10native-plasma
da android-9 ad android-10
- È stato aggiunto un nuovo branding per gli eseguibili Android con uno schema più semplice nella sezione
.note.android.ident
(definita 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 precedenti opzioni di branding nella sezione
.note.ABI-tag
sono deprecate. - È 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
ed è migliorato per compilare la maggior parte dei test per tutte le ABI supportate ed eseguito su tutti i dispositivi collegati
- Intestazioni
Android NDK r8b (luglio 2012)
Le principali funzionalità di questa release sono una nuova strumentochain GNU Compiler Collection (GCC) 4.6 e GNU Debugger (GDB) 7.3.x che aggiunge il supporto del debug per l'immagine di sistema Android 4.1 (API Level 16).
- Correzioni di bug importanti:
-
- Sono stati risolti i problemi
LOCAL_SHORT_COMMANDS
in ambienti Mac OS e Windows Cygwin per le librerie statiche. La generazione dei file di elenco è più rapida e non viene rigenerata per evitare ripetizioni di rigenerazioni del progetto. - Sono stati risolti diversi problemi in
ndk-gdb
:- Aggiornamento dello strumento per trasmettere i flag
-e
,-d
e-s
in modo che l'ADB sia più coerente. - Strumento aggiornato per accettare nomi di serie dei dispositivi contenenti spazi.
- Lo strumento è stato aggiornato per recuperare le informazioni su
/system/bin/link
, in modo chegdb
sull'host possa impostare un punto di interruzione in__dl_rtld_db_dlactivity
e conoscere l'attività del linker (ad esempio, ripetere la scansione dei simbolisolib
quando viene chiamatodlopen()
).
- Aggiornamento dello strumento per trasmettere i flag
- È stato risolto il problema
ndk-build clean
su Windows, che non riusciva a rimuovere./libs/*/lib*.so
. - È stato corretto
ndk-build.cmd
per restituire un valoreERRORLEVEL
diverso da zero quandomake
non va a buon fine. - È stato corretto
libc.so
per interrompere l'esportazione errata dei simboli__exidx_start
e__exidx_end
. - È stato risolto il problema
SEGV
durante lo sblocco dello stack dopo le ore__libc_init
per ARM e MIPS.
- Sono stati risolti i problemi
- Modifiche importanti:
-
- È stata aggiunta la Toolchain di GCC 4.6 (
binutils
2.21 congold
e GDB 7.3.x) per coesistere con la Toolchain originale di GCC 4.4.3 (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 l'originale. - Il supporto per il 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 abilitarla. - I programmi compilati con
-fPIE
richiedono il nuovoGDB
per il debug, inclusi i programmi binari nelle immagini di sistema Android 4.1 (livello API 16). - Lo strumento
binutils
2.21ld
contiene correzioni di cui è stato eseguito il backport dalla versione 2.22:- È stato corretto
ld --gc-sections
, che conservava erroneamente i riferimenti di zombie alle librerie esterne. (ulteriori informazioni). - È stato corretto il comando ARM
strip
per mantenere i valorip_align
ep_flags
originali nella sezioneGNU_RELRO
, se validi. Senza questa correzione, non è stato possibile eseguire il debug dei programmi creati con-fPIE
. (altre informazioni)
- È stato corretto
- L'ottimizzazione di
sincos()
è stata disattivata per la compatibilità con piattaforme precedenti.
- GCC 4.6 è ora la Toolchain predefinita. Puoi impostare
- Sono state aggiornate le opzioni di build per abilitare per impostazione predefinita il bit Never eXecute (NX) e le protezioni
relro
/bind_now
:- Sono stati aggiunti
--noexecstack
all'assemblatore e-z noexecstack
al linker, che fornisce protezione NX contro gli attacchi di overflow del buffer abilitando il bit NX su stack e heap. - Sono stati aggiunti
-z relro
e-z now
al linker per la protezione delle sezioni di dati interni dopo il collegamento per prevenire le vulnerabilità di sicurezza causate dal danneggiamento della memoria. (ulteriori informazioni: 1, 2) - Puoi disattivare queste funzionalità utilizzando le seguenti opzioni:
- Disabilita la protezione NX impostando l'opzione
--execstack
per l'assemblatore e-z execstack
per il linker. - Disabilita la protezione dei dati interni impostando le opzioni
-z norelro
e-z lazy
per il linker. - Disattiva 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 ulteriori dettagli, visita la pagina
docs/ANDROID-MK.html
. - Disabilita la protezione NX impostando l'opzione
- Sono stati aggiunti
- È stato aggiunto il branding per gli eseguibili Android nella 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 di GCC 4.6 (
- Altre correzioni di bug:
-
- Risolto il trasferimento di
mips-linux-gnu
troncato per adattarsi al problema diR_MIPS_TLS_LDM
. (ulteriori informazioni) - Sono stati corretti i messaggi segfault dello strumento
ld
durante l'utilizzo di--gc-sections
. (ulteriori informazioni) - Risolto il problema di conteggio MIPS
GOT_PAGE
. (ulteriori informazioni) - Link del simbolo di avviso Segui corretto per
mips_elf_count_got_symbols
. - Link del simbolo di avviso Segui corretto per
mips_elf_allocate_lazy_stub
. - Il MIPS
.dynamic
è stato spostato nel segmento di dati, in modo che sia accessibile in scrittura. - Sostituiti i valori hardcoded dei simboli con le dimensioni dei segmenti corrette per MIPS.
- Opzione
-mno-shared
rimossa dai valori predefiniti nella Toolchain MIPS. Il valore predefinito per la Toolchain di 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 problema del compilatore che non consentiva di aggiungere-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 effettuare la compilazione.
- Risolto il trasferimento di
- Altre modifiche:
-
- Posizione dei programmi binari modificata:
- Elemento
gdbserver
spostato datoolchain/<arch-os-ver>/prebuilt/gdbserver
aprebuilt/android-<arch>/gdbserver/gdbserver
. - Prefisso strumentochain x86 rinominato da
i686-android-linux-
ai686-linux-android-
. sources/cxx-stl/gnu-libstdc++/include
elib
spostati insources/cxx-stl/gnu-libstdc++/4.6
se compilati in GCC 4.6, oppuresources/cxx-stl/gnu-libstdc++/4.4.3
se compilati in GCC 4.4.3.libbfd.a
elibintl.a
spostati dalib/
alib32/
.
- Elemento
- Sono stati aggiunti e migliorati vari script nella Toolchain di rigenerazione e test di NDK:
- È stato aggiunto
build-mingw64-toolchain.sh
per generare una nuova Toolchain ospitata da Linux che genera gli eseguibili Win32 e Win64. - È stata migliorata la velocità di
download-toolchain-sources.sh
utilizzando il comandoclone
e utilizzando solocheckout
per le directory necessarie per creare i programmi binari della portachiavi NDK. - Sono stati aggiunti
build-host-gcc.sh
ebuild-host-gdb.sh
script. - È stato aggiunto
tests/check-release.sh
per controllare i contenuti di una determinata directory di installazione 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 architetture. Gli elementiAF_LINK
esockaddr_dl
descritti sono specifici di BSD (ovvero, non esistono in Linux).
- Posizione dei programmi binari modificata:
Android NDK r8 (maggio 2012)
Questa release di NDK include il supporto per MIPS ABI e alcune correzioni aggiuntive.
- Nuove funzionalità:
-
- Aggiunto il supporto per MIPS ABI, che consente di generare un codice macchina che viene eseguito su dispositivi Android compatibili basati su MIPS. Le principali funzionalità per MIPS includono Toolchain specifiche per MIPS, intestazioni di sistema, librerie e supporto per il debug. Per maggiori dettagli sul supporto MIPS, vedi
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 creare per piattaforme MIPS. Ad esempio, la riga seguente indica andk-build
di creare il codice per tre ABI distinte:APP_ABI := armeabi armeabi-v7a mips
A meno che tu non faccia affidamento su origini di assemblaggio specifiche dell'architettura, come il codice di assemblaggio ARM, non dovresti dover toccare i file
Android.mk
per creare il codice macchina MIPS. - Puoi creare una Toolchain MIPS autonoma utilizzando l'opzione
--arch=mips
quando chiamimake-standalone-toolchain.sh
. Per ulteriori dettagli, visita la paginadocs/STANDALONE-TOOLCHAIN.html
.
Nota. Per garantire che le tue applicazioni siano disponibili per gli utenti soltanto se i loro dispositivi sono in grado di eseguirle, Google Play filtra le applicazioni in base alle informazioni del set di istruzioni incluse nella tua 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 il proseguimento dell'installazione solo se l'applicazione fornisce una libreria compilata per l'architettura della CPU del dispositivo.
- Aggiunto il supporto per MIPS ABI, che consente di generare un codice macchina che viene eseguito su dispositivi Android compatibili basati su MIPS. Le principali funzionalità per MIPS includono Toolchain specifiche per MIPS, intestazioni di sistema, librerie e supporto per il debug. Per maggiori dettagli sul supporto MIPS, vedi
- Correzioni di bug importanti:
-
- È stato corretto un errore di battitura nell'implementazione di GAbi++, in cui il risultato dell'oggetto
dynamic_cast<D>(b)
della classe di baseb
nella classe derivataD
viene regolato in modo errato nella direzione opposta rispetto alla classe di base. (Problema 28721) - Risolto il problema per cui
make-standalone-toolchain.sh
non riesce a copiarelibsupc++.*
.
- È stato corretto un errore di battitura nell'implementazione di GAbi++, in cui il risultato dell'oggetto
- Altre correzioni di bug:
-
- È stato corretto
ndk-build.cmd
per garantire chendk-build.cmd
funzionasse correttamente anche se l'utente ha ridefinito la variabile di ambienteSHELL
, che potrebbe essere modificata durante l'installazione di una varietà di strumenti di sviluppo in ambienti Windows.
- È stato corretto
Android NDK r7c (aprile 2012)
Questa release dell'NDK include una correzione importante per i dispositivi basati su Tegra2 e alcune correzioni e miglioramenti aggiuntivi:
- Correzioni di bug importanti:
-
- È stato risolto il problema relativo ai programmi binari armeabi-v7a di GNU STL in modo che non si arrestassero in modo anomalo sui dispositivi non NEON. I file forniti con NDK r7b non sono stati configurati correttamente,
causando arresti anomali sui dispositivi basati su Tegra2 e altri durante il tentativo di utilizzare
determinate funzioni in virgola mobile (ad es.
cosf
,sinf
eexpf
).
- È stato risolto il problema relativo ai programmi binari armeabi-v7a di GNU STL in modo che non si arrestassero in modo anomalo sui dispositivi non NEON. I file forniti con NDK r7b non sono stati configurati correttamente,
causando arresti anomali sui dispositivi basati su Tegra2 e altri durante il tentativo di utilizzare
determinate funzioni in virgola mobile (ad es.
- Modifiche importanti:
-
- 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 generati intermedi, anziché$PROJECT_PATH/obj
. La variabile è riconosciuta anche dandk-gdb
. - Aggiunto il supporto per la creazione di moduli con centinaia o persino migliaia di file di origine mediante la definizione di
LOCAL_SHORT_COMMANDS
intrue
nel tuoAndroid.mk
.Questa modifica obbliga il sistema di compilazione NDK a inserire la maggior parte delle opzioni linker o di archiviazione nei file elenco, come soluzione alternativa per i limiti di lunghezza della riga di comando. Per informazioni dettagliate, visita la pagina
docs/ANDROID-MK.html
.
- 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 abilitati dinamicamente dal sistema, l'implementazione precedente indica il numero totale di core attivi la prima volta che viene richiamata la 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:
-
- È stato aggiornato
sys/atomics.h
per evitare problemi di correzione su alcuni dispositivi multi-core basati su ARM. Ricrea le origini non modificate con questa versione dell'NDK per eliminare completamente il problema. Per maggiori dettagli, leggidocs/ANDROID-ATOMICS.html
. - È stato ripristinato
binutils
2.19 per risolvere i problemi di debug che si verificavano in NDK r7 (che è passato abinutils
2.20.1). - È stato risolto il problema di
ndk-build
su Linux a 32 bit. Per un errore di pacchettizzazione è stata inserita una versione a 64 bit dell'eseguibileawk
inprebuilt/linux-x86/bin
in 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 durante il tentativo di chiamare
ndk-build.cmd
da una directory che non si trovava nella parte superiore del percorso del progetto (ad esempio, in una sua sottodirectory). - Risolto un problema per cui i file delle dipendenze generati automaticamente venivano ignorati. Ciò significa che l'aggiornamento di un'intestazione non attivava la ricompilazione delle origini che la includevano.
- Risolto il problema per cui i caratteri speciali nei file o nei percorsi, diversi da spazi e virgolette, non venivano gestiti correttamente.
- È stato rimosso un bug di loop infinito / overflow dello stack che si verificava durante il tentativo di chiamare
- È stata corretta la Toolchain autonoma per generare programmi binari corretti quando si utilizzava
-lstdc++
(ovvero, link al runtime GNUlibstdc++
C++). Devi usare-lgnustl_shared
se vuoi creare un collegamento con la versione della libreria condivisa o-lstdc++
per la versione statica.Visita la pagina
docs/STANDALONE-TOOLCHAIN.html
per avere ulteriori dettagli su questa correzione. - È stato risolto il problema di
gnustl_shared
su Cygwin. Il linker si è lamentato di non riuscire a trovarelibsupc++.a
anche se il file si trovava nella posizione corretta. - È stato risolto il problema relativo al link a C++ di Cygwin quando non si utilizzava un runtime C++ specifico tramite
APP_STL
.
- È stato aggiornato
- Altre modifiche:
-
- Quando l'applicazione utilizza il runtime GNU
libstdc++
, il compilatore non attiverà più forzatamente eccezioni e RTTI. Questa modifica comporta una riduzione del codice.Se hai bisogno di queste funzionalità, devi eseguire una delle seguenti operazioni:
- Abilita le eccezioni e/o RTTI in modo esplicito nei moduli oppure
Application.mk
. (consigliato) - Definisci
APP_GNUSTL_FORCE_CPP_FEATURES
in'exceptions'
,'rtti'
o entrambi inApplication.mk
. Per ulteriori dettagli, visita la paginadocs/APPLICATION-MK.html
.
- Abilita le eccezioni e/o RTTI in modo esplicito nei moduli oppure
ndk-gdb
ora funziona correttamente quando la tua applicazione dispone di servizi privati in esecuzione in processi indipendenti. Esegue il debug del processo principale dell'applicazione, anziché del primo processo elencato daps
, che di solito è un processo di servizio.- Risolto un raro bug per cui NDK r7 non rispettava il valore
LOCAL_ARM_MODE
e compilava sempre determinati file di origine (ma non tutti) con istruzioni a 32 bit. STLport
: aggiorna le origini in modo che corrispondano alla versione della piattaforma Android. Questo aggiornamento corregge alcuni bug minori:- Correzione dell'istanza di un tipo incompleto
- Correzione dell'errore di ortografia minore "==" contro "="
- Hai utilizzato
memmove
anzichémemcpy
instring::assign
- È stata aggiunta una migliore gestione di
IsNANorINF
,IsINF
,IsNegNAN
e così via.
Per informazioni dettagliate, consulta il log di commit.
STLport
: sono stati rimossi dalla libreria i 5 inizializzatori statici non necessari.- Le librerie GNU libstdc++ per armeabi-v7a sono state invece compilate erroneamente per armeabi. Questa modifica non ha avuto alcun impatto sulla correttezza, ma l'utilizzo dell'ABI giusta dovrebbe fornire prestazioni leggermente migliori.
- La libreria helper
cpu-features
è stata aggiornata in modo da segnalare tre funzionalità facoltative della CPU x86 (SSSE3
,MOVBE
ePOPCNT
). Consultadocs/CPU-FEATURES.html
per ulteriori dettagli. 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 corrente quando viene richiamato. - Cygwin: è stato aggiunto un migliore rilevamento automatico delle dipendenze. Nella versione precedente, non ha funzionato correttamente nei seguenti casi:
- Quando il prefisso di unità Cygwin non era
/cygdrive
. - Quando utilizzi supporti senza auto, ad esempio, quando Cygwin tradurrà
/home
in\\server\subdir
anzichéC:\Some\Dir
.
- Quando il prefisso di unità Cygwin non era
- Cygwin:
ndk-build
non prova a utilizzare gli strumenti nativi di Windows in$NDK/prebuilt/windows/bin
con determinate versioni di Cygwin e/o GNU Make.
- Quando l'applicazione utilizza il runtime GNU
Android NDK r7 (novembre 2011)
Questa release di NDK include nuove funzionalità per il supporto della piattaforma Android 4.0 oltre a molti altri miglioramenti e aggiunte:
- Nuove funzionalità
-
- Sono state aggiunte le 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 output multimediali direttamente dal codice nativo utilizzando una nuova interfaccia della coda di buffer specifica per Android. Per maggiori dettagli, visita le paginedocs/openmaxal/index.html
e http://www.khronos.org/openmax/. - Aggiornamento dell'API audio nativa in base allo standard Khronos Group OpenSL ES 1.0.1. Con il livello API 14, ora puoi decodificare audio compresso (ad es. MP3, AAC, Vorbis) in PCM. Per maggiori dettagli, visita le pagine
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 ricostruzioni di grandi dimensioni, definisci la variabile di ambiente
NDK_CCACHE
succache
(o il percorso del programma binarioccache
). Quando dichiarato, il sistema di compilazione NDK utilizza automaticamente CCache durante la compilazione di qualsiasi file di origine. Ad esempio:export NDK_CCACHE=ccache
Nota: CCache non è incluso nella release NDK, quindi devi installarlo prima di utilizzarlo. Per maggiori 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 tuoi moduli NDK per tutte le ABI supportate dalla release NDK specificata. Ciò significa che una delle seguenti due righe inApplication.mk
è equivalente a questa release:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Funziona anche se definisci
APP_ABI
quando chiamindk-build
dalla riga di comando, per verificare rapidamente che il tuo progetto crei per tutte le ABI supportate senza modificare gliApplication.mk file
del progetto. Ecco alcuni esempi:ndk-build APP_ABI=all
- È stata aggiunta una variabile
LOCAL_CPP_FEATURES
inAndroid.mk
che consente di dichiarare le funzionalità C++ (RTTI o eccezioni) utilizzate dal modulo. Ciò garantisce che il collegamento finale funzioni correttamente se disponi di moduli predefiniti che dipendono da queste funzionalità. Consulta idocs/ANDROID-MK.html
edocs/CPLUSPLUS-SUPPORT.html
per maggiori dettagli. - Percorsi abbreviati dei file di origine e di oggetto utilizzati nei comandi di build. Quando richiami
$NDK/ndk-build
dal percorso del progetto, i percorsi ai file di origine, agli oggetti e ai file binari che vengono passati ai comandi di build ora sono notevolmente più brevi, perché vengono passati rispetto alla directory attuale. Questo è utile quando si creano progetti con molti file di origine, per evitare limiti sulla lunghezza massima della riga di comando supportata dal sistema operativo host. Il comportamento non viene modificato se richiamindk-build
da una sottodirectory della struttura del progetto o se definisciNDK_PROJECT_PATH
in modo che rimandi a una directory specifica.
- Sono state aggiunte le API NDK ufficiali per Android 4.0 (livello API 14), che aggiungono le seguenti
funzionalità native alla piattaforma:
- Funzionalità sperimentali
-
Ora puoi creare 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 NDK di Windows include programmi binari predefiniti per GNU Make, Awk e altri strumenti richiesti dalla build. Non è necessario installare altro per ottenere un sistema di build funzionante.Importante:
ndk-gdb
non funziona su Windows, quindi devi comunque eseguire il debug di Cygwin.Questa funzionalità è ancora sperimentale, quindi non esitare a provarla e a segnalare eventuali problemi nel database dei bug pubblico o nel forum pubblico. Tutti gli esempi e i test delle unità forniti con NDK vengono compilati correttamente con questa funzionalità.
- Correzioni di bug importanti
-
- Le librerie condivise importate vengono ora installate per impostazione predefinita nel percorso di installazione di destinazione (
libs/<abi>
) seAPP_MODULES
non è definito inApplication.mk
. Ad esempio, se un modulo di primo livellofoo
importa un modulobar
, entrambi i modulilibfoo.so
elibbar.so
vengono copiati nel percorso di installazione. In precedenza, è stata copiata sololibfoo.so
, a meno che tu non abbia elencato anchebar
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 PRINCIPALI.- Le importazioni delle librerie statiche ora sono correttamente transitive. Ad esempio, se un modulo di primo livello
foo
importa la libreria staticabar
che importa la libreria staticazoo
, oralibfoo.so
sarà collegato sia alibbar.a
che alibzoo.a
.
- Le librerie condivise importate vengono ora installate per impostazione predefinita nel percorso di installazione di destinazione (
- Altre modifiche
-
docs/NATIVE-ACTIVITY.HTML
: errore di ortografia corretto. Il livello API minimo deve essere 9, non 8 per le attività native.docs/STABLE-APIS.html
: è stata aggiunta la documentazione mancante che indica EGL come API stabile supportata, a partire dal livello API 9.download-toolchain-sources.sh
: aggiornamento per scaricare le origini della Toolchain da android.googlesource.com, che è la nuova posizione per i server AOSP.- È stato aggiunto un nuovo runtime di supporto di C++ denominato
gabi++
. Maggiori dettagli sono disponibili nell'articolodocs/CPLUSPLUS-SUPPORT.html
aggiornato. - È stato aggiunto un nuovo runtime per il supporto di C++ denominato
gnustl_shared
che corrisponde alla versione della libreria condivisa di GNU libstdc++ v3 (licenza GPLv3). Scopri di più all'indirizzodocs/CPLUSPLUS-SUPPORT.html
- Aggiunto il supporto per RTTI nei runtime STLport C++ (nessun supporto per le eccezioni).
- 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 al momento del collegamento fornite dall'NDK. Ciò garantisce che il codice generato con la Toolchain autonoma non rischi di dipendere accidentalmente da un simbolo ABI non stabile (ad esempio, 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 ciò non modifica le ABI NDK per le librerie corrispondenti, perché ogni estensione deve essere esaminata in fase di runtime dall'applicazione client.
Le estensioni disponibili dipendono dai driver effettivi del dispositivo e delle GPU, non dalla versione della piattaforma su cui viene eseguito il dispositivo. Le modifiche dell'intestazione aggiungono semplicemente nuove costanti e tipi per semplificare l'utilizzo delle estensioni quando sono state analizzate con
eglGetProcAddress()
oglGetProcAddress()
. Nell'elenco che segue vengono descritte le nuove estensioni 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 versione di NDK non include nuove funzioni rispetto a r6. La release r6b risolve i seguenti problemi nella release r6:
- Correzioni di bug importanti
-
- È stata corretta la build quando
APP_ABI="armeabi x86"
viene utilizzato per build con più architetture. - È stata corretta la posizione dei file binari STLport predefiniti nel pacchetto di release NDK. Un bug nello script di pacchetto li ha inseriti nella posizione sbagliata.
- Corretto l'utilizzo di
atexit()
nelle librerie condivise con la Toolchain x86standalone. make-standalone-toolchain.sh --arch=x86
corretto. In passato non riusciva a copiare i programmi binari GNU libstdc++ corretti nella posizione corretta.- Sono stati risolti gli avvisi del linker della Toolchain standalone relativi alla mancanza della definizione e della dimensione del simbolo
__dso_handle
(solo ARM). - È stato corretto l'ordine di inclusione di
$(SYSROOT)/usr/include
per le build x86. Consulta il bug per ulteriori informazioni. - Sono state corrette le definizioni di
ptrdiff_t
esize_t
nei sistemi specifici x86 quando vengono utilizzati con la Toolchain autonoma x86.
- È stata corretta la build quando
Android NDK r6 (luglio 2011)
Questa release di NDK include il supporto per x86 ABI e altre modifiche di minore entità.
Per informazioni dettagliate sulle modifiche in questa release, leggi il documento CHANGES.HTML
incluso nel pacchetto NDK.
- Note generali:
-
- Aggiunge il supporto per x86 ABI, che consente di generare codice macchina che viene eseguito su dispositivi Android compatibili basati su x86. Le funzionalità principali di x86 includono Toolchain specifiche per x86, intestazioni di sistema, librerie e supporto del debug. Per tutti i dettagli relativi al supporto di x86,
vedi
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 creare per le piattaforme x86. Ad esempio, la riga seguente indica andk-build
di creare il codice per tre ABI distinte:APP_ABI := armeabi armeabi-v7a x86
A meno che non utilizzi origini di assemblaggio basate su ARM, non devi toccare 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, visita la paginadocs/STANDALONE-TOOLCHAIN.html
. - Il nuovo strumento
ndk-stack
consente di tradurre inlogcat
le analisi dello stack generate dal codice nativo. Lo strumento converte gli indirizzi delle istruzioni in un formato leggibile contenente elementi come la funzione, il file di origine e il numero di riga corrispondenti a ogni stack frame. Per ulteriori informazioni e un esempio di utilizzo, vedidocs/NDK-STACK.html
.
- Aggiunge il supporto per x86 ABI, che consente di generare codice macchina che viene eseguito su dispositivi Android compatibili basati su x86. Le funzionalità principali di x86 includono Toolchain specifiche per x86, intestazioni di sistema, librerie e supporto del debug. Per tutti i dettagli relativi al supporto di x86,
vedi
- Altre modifiche:
arm-eabi-4.4.0
, che era stato ritirato da NDK r5, è stato rimosso dalla distribuzione NDK.
Android NDK r5c (giugno 2011)
Questa versione di NDK non include nuove funzioni rispetto a r5b. La release r5c risolve i seguenti problemi nella release r5b:
- Correzioni di bug importanti:
-
ndk-build
: è stato corretto un bug raro che si verificava durante il tentativo di eseguire build parallele di progetti di cui è possibile eseguire il debug.- È stato corretto un errore di ortografia che impediva a
LOCAL_WHOLE_STATIC_LIBRARIES
di funzionare correttamente con la nuova strumentochain e ha aggiunto la documentazione relativa a questo problema indocs/ANDROID-MK.html
. - Risolto un bug per cui il codice collegato a
gnustl_static
si arrestava in modo anomalo quando viene eseguito su release della piattaforma precedenti al livello API 8 (Android 2.2). ndk-gdb
: corretto un bug che causava un errore di segmentazione durante il debug di dispositivi Android 3.0 o versioni successive.<android/input.h>
: due funzioni introdotte nel livello API 9 (Android 2.3) non erano corrette e sono state corrette. Anche se questa operazione interrompe l'API sorgente, l'interfaccia binaria del sistema rimane invariata. Nelle funzioni errate manca 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 programma binario ARM della libreria C per il livello API 9 (Android 2.3) per esporre correttamente
al momento del collegamento le nuove funzioni aggiunte in quel livello API (ad esempio,
pthread_rwlock_init
).
- Miglioramenti e correzioni di minore entità:
-
- Ora i file degli oggetti sono sempre collegati nell'ordine in cui appaiono in
LOCAL_SRC_FILES
. Questo non accadeva in precedenza perché i file erano invece raggruppati per estensioni di origine. - Se il metodo
import-module
non va a buon fine, viene stampato l'elenco delle directory in cui è stata eseguita la ricerca. Questo è utile per verificare che la definizione diNDK_MODULE_PATH
utilizzata dal sistema di build sia corretta. - Se
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 build delle applicazioni di cui è possibile eseguire il debug quando il progetto contiene 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 il problema per cui un modulo poteva importarsi da solo, causando un ciclo infinito in GNU Make.
- Risolto un bug che causava l'errore della build se il criterio
LOCAL_ARM_NEON
era impostato su true (errore di battitura inbuild/core/build-binary.mk
). - Risolto un bug che impediva la compilazione di
.s
file assemblaggio (.S
file andavano corretti).
- Ora i file degli oggetti sono sempre collegati nell'ordine in cui appaiono in
Android NDK r5b (gennaio 2011)
Questa release di NDK non include nuove funzioni rispetto a r5. La release r5b risolve i seguenti problemi nella release r5:
- I programmi binari r5 richiedevano glibc 2.11, ma quelli r5b vengono generati con una particolare toolchain che ha come target glibc 2.7 o versioni successive. I file binari della Toolchain di Linux ora sono eseguiti su Ubuntu 8.04 o versioni successive.
- Corregge un bug del compilatore nella Toolchain arm-linux-androideabi-4.4.3. Il programma binario precedente ha generato sequenze di istruzioni thumb non valide per la gestione dei 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 (
ndk-build
):- Un bug che ha creato file di dipendenze incoerenti quando si è verificato un errore di compilazione su Windows. Ciò ha impedito una build adeguata dopo la correzione dell'errore nel codice sorgente.
- Un bug specifico di Cygwin per 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 ortografia che ha impedito il corretto funzionamento della libreria cpufeatures con la nuova Toolchain NDK.
- Le build in Cygwin sono più veloci poiché evitano le chiamate a
cygpath -m
da GNU Make per ogni file di origine o di oggetto, causando problemi con alberi di origine di grandi dimensioni. Se ciò non funziona correttamente, definisciNDK_USE_CYGPATH=1
nel tuo ambiente per utilizzare di nuovocygpath -m
. - L'installazione di Cygwin ora avvisa l'utente di percorsi di installazione non validi che contengono spazi. In precedenza, un percorso non valido generava un errore relativo a una versione errata di GNU Make, anche se era installata quella corretta.
- È stato corretto un errore di ortografia 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 verificare se nel compilatore è presente il codice della macchina generato a 64 bit, invece di fare affidamento sul tag host, che consente alla Toolchain a 32 bit di ricostruire correttamente su Snow Leopard. Ora gli script per la rigenerazione della Toolchain supportano anche l'utilizzo di una Toolchain host a 32 bit. - Una dichiarazione mancante per
INET_ADDRSTRLEN
è stata aggiunta a<netinet/in.h>
. - Le dichiarazioni mancanti per
IN6_IS_ADDR_MC_NODELOCAL
eIN6_IS_ADDR_MC_GLOBAL
sono state aggiunte a<netinet/in6.h>
. - "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 vengono introdotte per supportare lo sviluppo di giochi e applicazioni simili che fanno ampio uso del codice nativo. Utilizzando le API, gli sviluppatori hanno accesso nativo diretto a eventi, audio, grafica e gestione delle finestre, risorse e spazio di archiviazione. Gli sviluppatori possono anche implementare il
ciclo di vita delle applicazioni Android nel codice nativo con l'aiuto della nuova
classe NativeActivity
. Per informazioni dettagliate sulle modifiche apportate in questa release, leggi il documento CHANGES.HTML
incluso nel pacchetto NDK scaricato.
- Note generali:
-
- Aggiunge il supporto per le attività native, per consentirti di implementare il ciclo di vita delle app Android nel codice nativo.
- Aggiunge il supporto nativo per:
- Sottosistema di input (ad esempio tastiera e touchscreen)
- Accesso ai dati dei sensori (accelerometro, bussola, giroscopio e così via).
- API Event Loop in attesa di elementi come eventi di input e dei sensori.
- Sottosistema finestre e superfici
- API audio basate sullo standard OpenSL ES che supportano la riproduzione e la registrazione, nonché il controllo sugli effetti audio della piattaforma
- Accesso agli asset pacchettizzati in un file
.apk
.
- Include una nuova Toolchain (basata su GCC 4.4.3), che genera codice migliore e ora può anche essere utilizzata come cross-compilatore autonomo per le persone che vogliono creare i propri contenuti con
./configure && make
. Per i dettagli, consulta la pagina docs/STANDALONE-TOOLCHAIN.html. I programmi binari per GCC 4.4.0 vengono comunque forniti, ma quelli della versione 4.2.1 sono stati rimossi. - Aggiunge il supporto per librerie statiche e condivise predefinite (docs/PREBUILTS.html) ed esportazioni e importazioni di moduli per semplificare la condivisione e il riutilizzo di moduli di terze parti (docs/IMPORT-MODULE.html spiega perché).
- Fornisce un'implementazione predefinita di STL C++ (basata su STLport) come modulo di supporto. Può essere utilizzata come libreria statica o condivisa (dettagli ed esempi di utilizzo sono in sources/android/stlport/README). Vengono forniti anche programmi binari predefiniti per STLport (statico o condiviso) e GNU libstdc++ (solo statico) se scegli di eseguire la compilazione in base a queste librerie anziché all'implementazione predefinita di C++ STL. Le eccezioni C++ e RTTI non sono supportati nell'implementazione STL predefinita. Per ulteriori informazioni, consulta docs/CPLUSPLUS-SUPPORT.HTML.
- Include miglioramenti alla libreria helper
cpufeatures
che migliora la generazione di report sul tipo di CPU (alcuni dispositivi in precedenza segnalavano CPU ARMv7 quando il dispositivo era in realtà un ARMv6). Consigliamo agli sviluppatori che usano questa libreria di ricreare le loro applicazioni, quindi di caricarle su Google Play per usufruire dei miglioramenti. - Aggiunge una libreria EGL che consente di creare e gestire servizi e texture OpenGL ES.
- Aggiunge nuove applicazioni di esempio,
native-plasma
enative-activity
, per dimostrare come scrivere un'attività nativa. - Include molte correzioni di bug e altri piccoli miglioramenti; consulta la pagina docs/CHANGES.html per un elenco più dettagliato delle modifiche.
Android NDK r4b (giugno 2010)
- Note NDK r4b:
-
Include correzioni per diversi problemi relativi alla build NDK e agli script di debug. Se utilizzi NDK r4, ti consigliamo di scaricare la build NDK r4b. Per informazioni dettagliate sulle modifiche apportate a questa release, leggi il documento CHANGES.TXT incluso nel pacchetto NDK scaricato.
- Note generali:
-
- Fornisce un sistema di build semplificato tramite il nuovo comando di
build
ndk-build
. - Aggiunge il supporto per il debug nativo del codice macchina generato sui dispositivi di produzione tramite il nuovo comando
ndk-gdb
. - Aggiunge una nuova ABI specifica per Android per le architetture di CPU basate su ARM,
armeabi-v7a
. La nuova ABI estende l'ABIarmeabi
esistente per includere queste estensioni del set di istruzioni per CPU:- Istruzioni per pollice 2
- Istruzioni per la FPU hardware VFP (VFPv3-D16)
- Supporto opzionale per gli intrinseci GCC ARM Advanced SIMD (NEON) e VFPv3-D32. Supportata da dispositivi come Verizon Droid by Motorola, Google Nexus One e altri.
- Aggiunge una nuova libreria
cpufeatures
statica (con origini) che consente alla tua app di rilevare le funzionalità della CPU del dispositivo host in fase di runtime. Nello specifico, le applicazioni possono verificare il supporto di ARMv7-A e VFPv3-D32 e NEON, quindi fornire percorsi di codice separati in base alle esigenze. - 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 instrinsics NEON, se supportato dalla CPU. - Consente di generare codice macchina per uno o entrambi i set di istruzioni supportati dall'NDK. Ad esempio, puoi creare contemporaneamente per le architetture ARMv5 e ARMv7-A
e archiviare tutto nell'elemento
.apk
finale dell'applicazione. - Per garantire che le tue applicazioni siano disponibili per gli utenti soltanto se i loro dispositivi sono in grado di eseguirle, Google Play ora filtra le applicazioni in base alle informazioni del set di istruzioni incluse nella tua applicazione; non è richiesta alcuna azione da parte tua per attivare il filtro. Inoltre, anche il sistema Android controlla l'applicazione al momento dell'installazione e consente il proseguimento dell'installazione solo se l'applicazione fornisce una libreria compilata per l'architettura della CPU del dispositivo.
- Aggiunge il supporto per Android 2.2 e include una nuova API stabile per l'accesso ai buffer di pixel degli oggetti
Bitmap
dal codice nativo.
- Fornisce un sistema di build semplificato tramite il nuovo comando di
build
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 OpenGL ES 2.0 per Vertex e Shading Frammenti. - I programmi 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 alla versione precedente (4.2.1). L'NDK fornisce anche i programmi binari 4.2.1, che puoi utilizzare facoltativamente per creare il codice della tua macchina.
Android NDK r2 (settembre 2009)
Rilasciata originariamente con il nome "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 al contempo il ciclo di vita delle attività con un oggettoGLSurfaceView
.
Android NDK r1 (giugno 2009)
Rilasciata originariamente con il nome "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.