Auf dieser Seite finden Sie Informationen zu Änderungen in allen veröffentlichten stabilen Versionen des NDK. Die aktuelle stabile Version des NDK oder eine derzeit verfügbare Betasversion können Sie auf der Seite NDK-Downloads herunterladen.
Weitere Informationen finden Sie in der Google-Gruppe android-ndk-announce. Abonnieren Sie die Gruppe, um Versionsankündigungen zu erhalten.
Android NDK r29 (Oktober 2025)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
Android NDK r28 (Februar 2025)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
Android NDK r27 LTS (Juli 2024)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
Android NDK r26 LTS (September 2023)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- KitKat (APIs 19 und 20) wird nicht mehr unterstützt.
Android NDK r25 LTS (Juli 2022)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- Enthält Android 13-APIs.
- LLVM wurde auf clang-r450784d aktualisiert, basierend auf der Entwicklung von LLVM 14.
Android NDK r24 (März 2022)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
Der GNU Assembler (GAS) wurde entfernt. Wenn Sie
-fno-integrated-as
verwendet haben, müssen Sie dieses Flag entfernen. Clang Migration Notes enthält Tipps dazu, wie Sie Assembly mit LLVM kompatibel machen können. - GDB wurde entfernt. Verwenden Sie stattdessen LLDB. Beachten Sie, dass ndk-gdb standardmäßig LLDB verwendet und Android Studio immer nur LLDB unterstützt hat.
- Jelly Bean (APIs 16, 17 und 18) wird nicht mehr unterstützt. Das vom NDK unterstützte Mindestbetriebssystem ist KitKat (API-Level 19).
- Geräte, die nicht Neon-kompatibel sind, werden nicht mehr unterstützt. Eine sehr geringe Anzahl sehr alter Geräte unterstützt Neon nicht. Bei den meisten Apps ist das aber nicht zu bemerken, abgesehen von der Leistungssteigerung.
- Die Unterstützung für RenderScript-Builds wurde entfernt. RenderScript wurde in Android 12 eingestellt. Wenn Sie die Migration Ihrer Apps von RenderScript noch nicht abgeschlossen haben, können Sie NDK r23 LTS verwenden.
-
Der GNU Assembler (GAS) wurde entfernt. Wenn Sie
Android NDK r23 LTS (August 2021)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
GNU binutils, mit Ausnahme des GNU Assembler (GAS), wurde entfernt. GAS
wird in der nächsten Version entfernt. Wenn Sie mit
-fno-integrated-as
entwickeln, melden Sie Fehler, wenn etwas Sie daran hindert, dieses Flag zu entfernen. -
Die Unterstützung für GDB wurde eingestellt. GDB wird in der nächsten Version entfernt.
Verwenden Sie stattdessen LLDB.
ndk-gdb
verwendet standardmäßig LLDB. - NDK r23 ist das letzte Release, das Nicht-Neon unterstützt. Ab NDK r24 werden die armeabi-v7a-Bibliotheken im Sysroot mit Neon erstellt. Eine sehr geringe Anzahl sehr alter Geräte unterstützt Neon nicht. Bei den meisten Apps wird dies jedoch nicht auffallen, da die Leistung verbessert wird.
- Jelly Bean (APIs 16, 17 und 18) wird in der nächsten NDK-Version nicht mehr unterstützt. Das vom NDK für r24 unterstützte Mindestbetriebssystem ist KitKat (API-Level 19).
-
GNU binutils, mit Ausnahme des GNU Assembler (GAS), wurde entfernt. GAS
wird in der nächsten Version entfernt. Wenn Sie mit
Android NDK r22b (März 2021)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
GNU binutils ist veraltet und wird in einem zukünftigen NDK-Release entfernt. Der GNU-Assembler (
as
) ist Teil davon. Wenn Sie mit-fno-integrated-as
entwickeln, melden Sie Fehler, wenn etwas Sie daran hindert, dieses Flag zu entfernen. Wenn Sieas
direkt verwenden, verwenden Sie stattdessenclang
. - LLD ist jetzt der Standard-Linker. ndk-build und unsere CMake-Toolchain-Datei verwenden jetzt auch llvm-ar und llvm-strip.
- ndk-gdb verwendet jetzt lldb als Debugger. gdb ist veraltet und wird in einer zukünftigen Version entfernt. Wenn Sie auf gdb zurückgreifen möchten, verwenden Sie die Option „--no-lldb“. Bitte reichen Sie einen Fehlerbericht ein, in dem Sie erklären, warum Sie lldb nicht verwenden konnten.
-
std::filesystem
-Support ist jetzt enthalten. Es gibt zwei bekannte Probleme:-
Problem 1258:
std::filesystem::perm_options::nofollow
wird auf alten Geräten möglicherweise nicht berücksichtigt. -
Problem 1260:
std::filesystem::canonical
wird auf alten Geräten fälschlicherweise als erfolgreich zurückgegeben, wenn ein nicht vorhandener Pfad übergeben wird.
-
Problem 1258:
-
GNU binutils ist veraltet und wird in einem zukünftigen NDK-Release entfernt. Der GNU-Assembler (
Android NDK r21e LTS (Januar 2021)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
32-Bit-Windows wird nicht mehr unterstützt. Die große Mehrheit der Nutzer ist davon nicht betroffen. Wenn Sie NDK-Apps weiterhin mit 32-Bit-Versionen von Windows erstellen müssen, verwenden Sie weiterhin NDK r20.
Weitere Informationen zu dieser Änderung in den Android-Entwicklertools finden Sie in diesem Blogpost.
-
LLD ist jetzt für Tests verfügbar.
In AOSP wird standardmäßig LLD verwendet und das NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. Problem 843 betrifft Builds, bei denen LLD mit binutils-strip und objcopy anstelle von llvm-strip und llvm-objcopy verwendet wird. -
Die alten Installationspfade für die Toolchain werden in den kommenden Releases entfernt. Diese Pfade sind seit NDK r19 veraltet und nehmen im NDK viel Speicherplatz in Anspruch. Die zu entfernenden Pfade sind:
- Plattformen
- sources/cxx-stl
- sysroot
- Toolchains (mit Ausnahme von toolchains/llvm)
make_standalone_toolchain.py
(obwohl dieses Skript seit r19 nicht mehr erforderlich ist). Informationen zur Migration vom alten Toolchain-Layout finden Sie im Build System Maintainers Guide für die von Ihnen verwendete NDK-Version. - Ab August 2019 ist im Play Store 64‑Bit-Unterstützung erforderlich, wenn Sie ein APK hochladen. Beginnen Sie jetzt mit der Übertragung, um unangenehme Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
- Ein signiertes und beglaubigtes macOS-App-Bundle ist jetzt in unserem Wiki und auf unserer Website verfügbar. Da nur Bundles RPATHs verwenden und die Notarisierung bestehen dürfen, kann das herkömmliche NDK-Paket für macOS nicht notariell beglaubigt werden. Das SDK verwendet weiterhin das herkömmliche Paket, da für das App-Bundle Layoutänderungen erforderlich sind, die es mit Android Studio inkompatibel machen würden. Das NDK wird beim Download über den SDK Manager nicht unter Quarantäne gestellt und ist daher derzeit für Gatekeeper zulässig. Der SDK-Manager ist derzeit die zuverlässigste Methode, um das NDK für macOS zu erhalten.
-
Android NDK r20b (Juni 2019)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
LLD ist jetzt für Tests verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und das NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. - Ab August 2019 ist im Play Store 64‑Bit-Unterstützung erforderlich, wenn Sie ein APK hochladen. Beginnen Sie jetzt mit der Übertragung, um unangenehme Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
- Android Q-APIs hinzugefügt
-
LLD ist jetzt für Tests verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und das NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
Android NDK r19c (Januar 2019)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
-
Entwickler sollten mit dem Testen ihrer Apps mit LLD beginnen. In AOSP wird standardmäßig LLD verwendet und im nächsten Release wird es auch im NDK standardmäßig verwendet. BFD und Gold werden entfernt, sobald LLD einen Release-Zyklus ohne größere ungelöste Probleme durchlaufen hat (voraussichtlich r21). Testen Sie die LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. Hinweis: lld unterstützt derzeit keine komprimierten Symbole unter Windows. Problem 888. Clang kann auch keine komprimierten Symbole unter Windows generieren. Das kann ein Problem sein, wenn Artefakte verwendet werden, die unter Darwin oder Linux erstellt wurden. - Ab August 2019 ist im Play Store 64‑Bit-Unterstützung erforderlich, wenn Sie ein APK hochladen. Beginnen Sie jetzt mit der Übertragung, um unangenehme Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
-
Problem 780:
Eigenständige Toolchains sind jetzt nicht mehr erforderlich. Clang, binutils, das Sysroot und andere Toolchain-Komponenten werden jetzt alle in
$NDK/toolchains/llvm/prebuilt/<host-tag>
installiert und Clang findet sie automatisch. Anstatt eine eigenständige Toolchain für API 26 ARM zu erstellen, rufen Sie den Compiler direkt über das NDK auf: Für r19 wird die Toolchain auch im alten Pfad installiert, damit Build-Systeme Zeit haben, sich an das neue Layout anzupassen. Die alten Pfade werden in Version 20 entfernt. Das$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
-Script wird nicht entfernt. Sie ist jetzt unnötig und es wird eine Warnung mit den oben genannten Informationen ausgegeben. Das Skript bleibt jedoch erhalten, um bestehende Workflows beizubehalten. Wenn Sie ndk-build, CMake oder eine eigenständige Toolchain verwenden, sollte sich an Ihrem Workflow nichts ändern. Diese Änderung ist für Maintainer von Drittanbieter-Build-Systemen von Bedeutung, da sie nun möglicherweise Android-spezifischen Code löschen können. Weitere Informationen finden Sie im Leitfaden System Maintainers erstellen. - „ndk-depends“ wurde entfernt. Wir sind der Meinung, dass ReLinker eine bessere Lösung für Probleme beim Laden nativer Bibliotheken auf alten Android-Versionen ist.
- Problem 862: Die GCC-Wrapper-Scripts, die zu Clang umgeleitet wurden, wurden entfernt, da sie nicht funktionsfähig genug sind, um als Ersatz zu dienen.
-
Entwickler sollten mit dem Testen ihrer Apps mit LLD beginnen. In AOSP wird standardmäßig LLD verwendet und im nächsten Release wird es auch im NDK standardmäßig verwendet. BFD und Gold werden entfernt, sobald LLD einen Release-Zyklus ohne größere ungelöste Probleme durchlaufen hat (voraussichtlich r21). Testen Sie die LLD in Ihrer App, indem Sie beim Verknüpfen
Android NDK r18b (September 2018)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- GCC wurde entfernt.
-
LLD ist jetzt für Tests verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und das NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. - gnustl, gabi++ und stlport wurden entfernt.
- Die Unterstützung für ICS (android-14 und android-15) wurde entfernt. Für Apps, die ausführbare Dateien verwenden, ist nicht mehr sowohl eine PIE- als auch eine nicht-PIE-ausführbare Datei erforderlich.
- Ab August 2019 ist im Play Store 64‑Bit-Unterstützung erforderlich, wenn Sie ein APK hochladen. Beginnen Sie jetzt mit der Übertragung, um unangenehme Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
Android NDK r17c (Juni 2018)
Änderungslog- Downloads
-
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- GCC wird nicht mehr unterstützt. Sie wird in NDK r18 entfernt.
-
libc++ ist jetzt die Standard-STL für CMake und eigenständige Toolchains. Wenn Sie manuell eine andere STL ausgewählt haben, empfehlen wir Ihnen dringend, zu
libc++
zu wechseln. Beachten Sie, dass für ndk-build weiterhin standardmäßig keine STL verwendet wird. Weitere Informationen finden Sie in diesem Blogpost. - gnustl und stlport sind veraltet und werden in NDK r18 entfernt.
- Die Unterstützung für ARMv5 (armeabi), MIPS und MIPS64 wurde entfernt. Wenn Sie versuchen, eines dieser ABIs zu erstellen, wird ein Fehler ausgegeben.
- Die Unterstützung für ICS (android-14 und android-15) wird in r18 entfernt.
- Ab August 2019 ist im Play Store 64‑Bit-Unterstützung erforderlich, wenn Sie ein APK hochladen. Beginnen Sie jetzt mit der Übertragung, um unangenehme Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
Android NDK r16b (Dezember 2017)
Änderungslog- Downloads
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- Die verworfenen Header wurden entfernt. Einheitliche Header werden jetzt einfach als „Die Header“ bezeichnet. Tipps zur Migration finden Sie unter Migrationshinweise für einheitliche Header.
- GCC wird nicht mehr unterstützt. Es wird noch nicht aus dem NDK entfernt, erhält aber keine Backports mehr. Sie kann erst entfernt werden, wenn libc++ stabil genug ist, um die Standardbibliothek zu sein, da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind. Sie wird entfernt, wenn die anderen STLs in r18 entfernt werden.
libc++
ist nicht mehr in der Betaphase und ist jetzt die bevorzugte STL im NDK. Ab r17 istlibc++
die Standard-STL für CMake und eigenständige Toolchains. Wenn Sie manuell eine andere STL ausgewählt haben, empfehlen wir Ihnen dringend, zulibc++
zu wechseln. Weitere Informationen finden Sie in diesem Blogpost.- Die Unterstützung für ARM5 (armeabi), MIPS und MIPS64 wurde eingestellt. Sie werden nicht mehr standardmäßig mit ndk-build erstellt, können aber weiterhin erstellt werden, wenn sie explizit angegeben werden. Sie sind in „all“, „all32“ und „all64“ enthalten. Die Unterstützung für diese wurde in Version 17 entfernt. Sowohl CMake als auch ndk-build geben eine Warnung aus, wenn Sie eines dieser ABIs als Ziel verwenden.
- APIs
-
Es wurden native APIs für Android 8.1 hinzugefügt. Weitere Informationen zu diesen APIs finden Sie in der Übersicht über native APIs.
Weitere Informationen zu Neuerungen und Änderungen in dieser Version finden Sie in diesem Änderungsprotokoll.
Android NDK r15c (Juli 2017)
Änderungslog- Downloads
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- Unified Headers sind standardmäßig aktiviert. Informationen zur Verwendung dieser Header finden Sie unter Einheitliche Header.
- GCC wird nicht mehr unterstützt. Sie wurde noch nicht aus dem NDK entfernt, erhält aber keine Backports mehr. Sie kann erst entfernt werden, wenn libc++ stabil genug ist, um die Standardbibliothek zu sein, da einige Teile von gnustl noch nicht mit Clang kompatibel sind.
- Android 2.3 (
android-9
) wird nicht mehr unterstützt. Das Mindest-API-Level im NDK ist jetzt Android 4.0 (android-14
). Wenn IhrAPP_PLATFORM
niedriger alsandroid-14
ist, wird stattdessenandroid-14
verwendet. - CMake im NDK unterstützt jetzt das Erstellen von in YASM geschriebenen Assembly-Code für die Ausführung auf x86- und x86-64-Architekturen. Weitere Informationen finden Sie unter Assembly-Code erstellen.
Hinweis : Die verworfenen Header werden in einem zukünftigen Release entfernt. Wenn Probleme mit diesen Headern auftreten, melden Sie bitte einen Fehler.
Tipps zur Migration finden Sie in den Migrationshinweisen für einheitliche Header.
- APIs
-
Es wurden native APIs für Android 8.0 hinzugefügt. Weitere Informationen zu diesen APIs finden Sie in der Übersicht über native APIs.
Weitere Informationen zu Neuerungen und Änderungen in dieser Version finden Sie in diesem Änderungsprotokoll.
Android NDK r14b (März 2017)
Änderungslog- Downloads
- Downloads für diese Version sind hier verfügbar.
- Ankündigungen
-
- Einheitliche Header:In dieser Version werden Plattformheader eingeführt, die mit der Android-Plattform synchronisiert und immer auf dem neuesten Stand gehalten werden. Header-only-Fehlerkorrekturen wirken sich jetzt auf alle API-Levels aus. Durch die Einführung einheitlicher Header werden Inkonsistenzen in früheren NDK-Versionen behoben, z. B.:
- Die Header in M und N waren eigentlich Header für L.
- Funktionsdeklarationen in Headern stimmten nicht korrekt mit den Plattformebenen überein. In Headern wurden nicht vorhandene Funktionen deklariert oder verfügbare Funktionen nicht deklariert.
- Bei einigen der alten API-Levels fehlten Konstanten oder sie waren falsch, während sie in neueren API-Levels vorhanden waren.
Diese neuen einheitlichen Headern sind nicht standardmäßig aktiviert. Informationen zum Aktivieren und Verwenden dieser Header finden Sie unter Einheitliche Header.
- Einstellung von GCC:Mit dieser Version wird die aktive Unterstützung für GCC eingestellt. GCC wird noch nicht aus dem NDK entfernt, erhält aber keine Backports mehr. Da einige Teile von gnustl noch nicht mit Clang kompatibel sind, wird GCC erst entfernt, wenn libc++ stabil genug ist, um als Standard verwendet zu werden.
- Einheitliche Header:In dieser Version werden Plattformheader eingeführt, die mit der Android-Plattform synchronisiert und immer auf dem neuesten Stand gehalten werden. Header-only-Fehlerkorrekturen wirken sich jetzt auf alle API-Levels aus. Durch die Einführung einheitlicher Header werden Inkonsistenzen in früheren NDK-Versionen behoben, z. B.:
Weitere Informationen zu Neuerungen und Änderungen in dieser Version finden Sie in diesem Änderungsprotokoll.
Android NDK r13b (Oktober 2016)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Ankündigungen
-
- GCC wird nicht mehr unterstützt. Es wird noch nicht aus dem NDK entfernt, erhält aber keine Backports mehr. Sie kann erst entfernt werden, wenn libc++ stabil genug ist, um die Standardbibliothek zu sein, da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind. Danach wird sie wahrscheinlich entfernt.
- Neu: simpleperf, ein CPU-Profiler für Android.
- r13b
-
-
Zusätzliche Korrekturen für fehlende
__cxa_bad_cast
.
-
Zusätzliche Korrekturen für fehlende
- NDK
-
NDK_TOOLCHAIN_VERSION
ist jetzt standardmäßig auf Clang eingestellt.- libc++ wurde auf r263688 aktualisiert.
- Wir haben auf einen (fast) sauberen Upstream zurückgesetzt. Dadurch sollten einige Fehler behoben werden. Wir müssen libandroid_support jedoch noch bereinigen, bevor wir es als Standard empfehlen können.
-
make-standalone-toolchain.sh
ist jetzt nur noch ein Wrapper für die Python-Version des Tools. Es gibt einige Verhaltensunterschiede. Weitere Informationen finden Sie in der Commit-Nachricht. - Einige Bibliotheken für nicht unterstützte ABIs wurden entfernt (mips64r2, mips32r6, mips32r2 und x32). Es könnte noch einige Nachzügler geben.
- Probleme mit crtbegin_static.o, die dazu führten, dass atexit beim Linken einer statischen ausführbaren Datei für ARM android-21+ fehlte, wurden behoben: Problem 132
- Die CMake-Toolchain-Datei wurde in build/cmake/android.toolchain.cmake hinzugefügt.
- Bekannte Probleme
-
- Dies ist keine vollständige Liste aller ausstehenden Fehler.
- Eigenständige Toolchains mit libc++ und GCC funktionieren nicht. Das scheint ein Fehler in GCC zu sein. Weitere Informationen finden Sie in der Commit-Nachricht.
- Bionic-Header und ‑Bibliotheken für Marshmallow und N sind trotz der Anwesenheit von android-24 noch nicht verfügbar. Diese Plattformen sind weiterhin die Lollipop-Header und ‑Bibliotheken (keine Regression von r11).
- RenderScript-Tools sind nicht vorhanden (keine Regression aus r11): Problem 7.
Android NDK r12b (Juni 2016)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Ankündigungen
- Der Befehl
ndk-build
verwendet in r13 standardmäßig Clang. Wir werden GCC in einer späteren Version entfernen. - Das
make-standalone-toolchain.sh
-Script wird in Version 13 entfernt. Prüfen Sie, obmake_standalone_toolchain.py
Ihren Anforderungen entspricht. - Probleme auf GitHub melden
- Wir haben das Problem mit
ndk-gdb.py
behoben. (Problem 118) -
Wir haben
NdkCameraMetadataTags.h
aktualisiert, sodass es keinen ungültigen Enum-Wert mehr enthält. - Ein Fehler in ndk-build, der zu falschen Warnungen für statische Bibliotheken mit libc++ geführt hat, wurde behoben. Weitere Informationen zu dieser Änderung finden Sie in den Kommentaren.
- Die OpenSLES-Header wurden für android-24 aktualisiert.
- NDK
- Wir haben die Unterstützung für das armeabi-v7a-hard-ABI entfernt. Weitere Informationen
- Alle Sysroots für Plattformebenen vor GB wurden entfernt. Die Unterstützung für diese wurde in r11 eingestellt, sie wurden jedoch nicht entfernt.
- Die Ausnahmebehandlung bei der Verwendung von c++_shared auf ARM32 funktioniert jetzt größtenteils. Der Unwinder wird jetzt in jedes verknüpfte Objekt und nicht in libc++ selbst eingebunden. Weitere Informationen zur Ausnahmebehandlung finden Sie unter Bekannte Probleme.
- Die Standard-Compiler-Flags wurden reduziert.
(Problem 27)
- Eine vollständige Liste der Änderungen finden Sie hier.
- Es wurde eine Python-Implementierung von eigenständigen Toolchains hinzugefügt:
build/tools/make_standalone_toolchain.py
.- Windows-Nutzer benötigen Cygwin nicht mehr, um diese Funktion zu verwenden.
- In r13 wird die Bash-Variante entfernt. Testen Sie also jetzt die neue.
-fno-limit-debug-info
wurde standardmäßig für Clang-Debug-Builds aktiviert. Diese Änderung sollte die Debugging-Fähigkeit mit LLDB verbessern.--build-id
ist jetzt standardmäßig aktiviert.- Die Build-ID wird jetzt in nativen Absturzberichten angezeigt, damit Sie leicht erkennen können, welche Version Ihres Codes ausgeführt wurde.
NDK_USE_CYGPATH
sollte keine Probleme mehr mit libgcc verursachen. (Android Problem 195486)- Die Optionen
-Wl
,--warn-shared-textrel
und-Wl,--fatal-warnings
sind jetzt standardmäßig aktiviert. Wenn Sie gemeinsame Textumsetzungen haben, kann Ihre App unter Android 6.0 (API‑Level 23) oder höher nicht geladen werden. Textverlagerungen waren für 64‑Bit-Apps nie zulässig. - Vorkompilierte Header sollten besser funktionieren. (Problem 14 und Problem 16)
- Nicht erreichbare ARM-STL-Bibliotheken (nicht Thumb) wurden entfernt.
- Vulkan-Unterstützung für android-24 hinzugefügt.
- Die Choreographer API wurde android-24 hinzugefügt.
libcamera2
-APIs für Geräte mitINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
oder höher hinzugefügt. Weitere Informationen finden Sie unter Kameraeigenschaften.- Clang
- Clang wurde auf 3.8svn (r256229, Build 2812033) aktualisiert.
- Die ausführbaren Dateien
clang.exe
undclang++.exe
im 32-Bit-Windows-Paket sind tatsächlich 64-Bit-Dateien. Die 32-Bit-Datei heißtclang_32.exe
.
- Die ausführbaren Dateien
- GCC
- Synchronisiert mit dem ChromeOS GCC @ google/gcc-4_9 r227810.
- Der Sanitizer-Patch für die Backport-Abdeckung wurde aus ToT (r231296) übernommen.
- Die Bibliothek „libatomic“ wurde so korrigiert, dass sie
ifuncs
nicht verwendet. (Problem 31) - Binutils
- Die Infomeldungen „Erratum 843419 gefunden und behoben“ werden nicht mehr angezeigt.
- Die Option
--long-plt
wurde eingeführt, um einen internen Linker-Fehler zu beheben, der beim Verknüpfen großer arm32-Binärdateien auftritt. - Falsche Laufzeit-Stubs für AArch64 wurden korrigiert. Dadurch wurden Sprungadressen für sehr große DSOs falsch berechnet.
- Die Standardoption
--no-apply-dynamic
wurde eingeführt, um einen Fehler im dynamischen Linker für frühere Android-Versionen zu umgehen. - NDK r11 KI für
dynamic_cast
funktioniert nicht mit Clang. Wir haben Probleme mit x86,stlport_static
und der Optimierung behoben. - GDB
- Auf GDB 7.11 aktualisiert. Weitere Informationen finden Sie auf der Seite GDB News.
- Einige Fehlerkorrekturen für
ndk-gdb.py
. - Bekannte Probleme
- x86 ASAN funktioniert weiterhin nicht. Weitere Informationen finden Sie in der Änderungsliste.
- Das Abwickeln von Ausnahmen mit
c++_shared
funktioniert für ARM unter Android 2.3 (API-Level 9) oder Android 4.0 (API-Level 14) weiterhin nicht. - Bionic-Header und ‑Bibliotheken für Android 6.0 (API-Level 23) und Android 7.0 (API-Level 24) sind trotz des Vorhandenseins von android-24 noch nicht verfügbar. Diese Plattformen sind weiterhin die Header und Bibliotheken von Android 5.0 (API-Level 21) (keine Regression gegenüber r11).
- RenderScript-Tools sind nicht vorhanden (keine Regression seit r11). (Problem 7)
- Dieses Änderungsprotokoll ist nicht als umfassende Liste aller ausstehenden Fehler gedacht.
__thread
sollte dieses Mal wirklich funktionieren.
Android NDK r12 (Juni 2016)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Ankündigungen
- Mit dem Befehl
ndk-build
wird in einem zukünftigen Release standardmäßig Clang verwendet. GCC wird in einer späteren Version entfernt. - Das
make-standalone-toolchain.sh
-Script wird in einer zukünftigen Version entfernt. Wenn Sie dieses Skript verwenden, planen Sie bitte so schnell wie möglich die Migration zumake_standalone_toolchain.py
. - NDK
- Die Unterstützung für das armeabi-v7a-hard-ABI wurde entfernt. Weitere Informationen finden Sie in der Dokumentation.
- Alle Sysroots für Plattformebenen vor Android 2.3 (API-Level 9) wurden entfernt. Die Unterstützung für diese wurde in NDK r11 eingestellt, sie wurden jedoch nicht entfernt.
- Die Ausnahmebehandlung bei der Verwendung von c++_shared auf ARM32 wurde aktualisiert, sodass sie größtenteils funktioniert (siehe Bekannte Probleme). Der Unwinder ist jetzt mit jedem verknüpften Objekt verknüpft und nicht mehr mit libc++.
- Die Standard-Compiler-Flags wurden entfernt (NDK-Problem 27). Details zu dieser Änderung finden Sie unter Änderung 207721.
- Eine Python-Implementierung von eigenständigen Toolchains wurde in
build/tools/make_standalone_toolchain.py
hinzugefügt. Unter Windows ist Cygwin nicht mehr erforderlich, um diese Funktion zu verwenden. Die Bash-Variante wird in einer zukünftigen Version entfernt. Testen Sie daher jetzt die neue Variante. - Für konfigurierte Clang-Debug-Builds ist die Option
-fno-limit-debug-info
standardmäßig aktiviert. Diese Änderung ermöglicht ein besseres Debugging mit LLDB. --build-id
als Standardoption aktiviert. Mit dieser Option wird eine Kennung in nativen Absturzberichten angezeigt, damit Sie leicht erkennen können, welche Version Ihres Codes ausgeführt wurde.- Das Problem mit
NDK_USE_CYGPATH
wurde behoben, sodass es keine Probleme mehr mit libgcc verursacht (Problem 195486). - Die folgenden Optionen sind standardmäßig aktiviert:
-Wl,--warn-shared-textrel
und-Wl,--fatal-warnings
. Wenn Sie gemeinsame Textumsetzungen haben, wird Ihre App unter Android 6.0 (API‑Level 23) und höher nicht geladen. Diese Konfiguration war für 64‑Bit-Apps nie zulässig. - Einige Probleme wurden behoben, damit vorkompilierte Header besser funktionieren (NDK-Problem 14, NDK-Problem 16).
- Nicht erreichbare ARM-STL-Bibliotheken (nicht Thumb) wurden entfernt.
- Vulkan-Unterstützung für android-24 hinzugefügt.
- Die Choreographer API wurde android-24 hinzugefügt.
- Es wurden libcamera2-APIs für Geräte hinzugefügt, die das
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
-Funktionsniveau oder höher unterstützen. Weitere Informationen finden Sie in der Referenz zuCameraCharacteristics
. - Clang
- Clang wurde auf 3.8svn (r256229, Build 2812033) aktualisiert. Die ausführbaren Dateien
clang.exe
undclang++.exe
im 32-Bit-Windows-Paket sind tatsächlich 64-Bit-Dateien. Die 32-Bit-Datei heißtclang_32.exe
. __thread
wurde korrigiert, damit es dieses Mal wirklich funktioniert.- GCC
- Der Compiler wurde mit ChromeOS GCC @ google/gcc-4_9 r227810 synchronisiert.
- Der Sanitizer-Patch für die Backport-Abdeckung wurde aus ToT (r231296) übernommen.
libatomic
wurde so korrigiert, dass keine ifuncs verwendet werden (NDK-Problem 31).- Binutils
- Die Infomeldungen „Erratum 843419 gefunden und behoben“ wurden deaktiviert.
- Die Option
--long-plt
wurde eingeführt, um einen internen Linker-Fehler beim Verknüpfen großer arm32-Binärdateien zu beheben. - Falsche Laufzeit-Stubs für
AArch64
wurden korrigiert. Dieses Problem führte dazu, dass Sprungadressen für sehr große dynamische gemeinsam genutzte Objekte (DSOs) falsch berechnet wurden. - Die Standardoption
--no-apply-dynamic
wurde eingeführt, um einen Fehler im dynamischen Linker für frühere Android-Versionen zu umgehen. - Ein bekanntes Problem mit NDK r11 wurde behoben, bei dem
dynamic_cast
nicht mit Clang, x86, stlport_static und Optimierung funktionierte. - GDB
- Aktualisiert auf GDB-Version 7.11. Weitere Informationen zu dieser Version finden Sie unter GDB News.
- Es wurden einige Fehler im
ndk-gdb.py
-Skript behoben. - Bekannte Probleme
- Der x86-Address Sanitizer (ASAN) funktioniert derzeit nicht. Weitere Informationen finden Sie unter Problem 186276.
- Das Abwickeln von Ausnahmen mit
c++_shared
funktioniert für ARM unter Android 2.3 (API-Level 9) oder Android 4.0 (API-Level 14) nicht. - Bionic-Header und ‑Bibliotheken für Android 6.0 (API-Level 23) und höher sind trotz des Vorhandenseins von android-24 noch nicht verfügbar. Diese Plattformen haben weiterhin die Header und Bibliotheken von Android 5.0 (API-Level 21), was mit NDK r11 übereinstimmt.
- Die RenderScript-Tools sind nicht vorhanden, was mit NDK r11 übereinstimmt. (NDK-Problem 7)
- In der Headerdatei
NdkCameraMetadataTags.h
wurde der EnumerationswertACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
für das Kamerametadaten-Tag versehentlich aufgeführt. Er wird in der nächsten Version entfernt. Verwenden Sie stattdessen den WertACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (März 2016)
- Änderungen
- Es wurden zusätzliche Korrekturen am Skript
ndk-gdb.py
vorgenommen. - Dem Befehl
ndk-gdb
wurde das optionale Paketnamensargument--attach
hinzugefügt. (Problem 13) - Es wurden ungültige Toolchain-Pfade für die 32-Bit-Windows-Plattform korrigiert. (Problem 45)
- Der relative Pfad für den Befehl
ndk-which
wurde korrigiert. (Problem 29) - Die Verwendung von „cygpath“ für den libgcc-Compiler wurde korrigiert. (Android Problem 195486)
Android NDK r11b (März 2016)
- NDK
-
- Wichtige Ankündigungen
- Wir haben unseren Bugtracker zu GitHub verschoben.
- Änderungen
ndk-gdb.py
wurde behoben. In Version 11 hat sich die Leistung vollständig verschlechtert.ndk-gdb
für Mac wurde behoben.- Es wurden weitere Tastenkürzel der obersten Ebene für Befehlszeilentools hinzugefügt:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
: Dieser Befehl war in früheren Releases nicht vorhanden.
- Das Problem mit eigenständigen Toolchains für libc++ wurde behoben. Diese hatten
__cxxabi_config.h
gefehlt. - Die Hilfedokumentation für
--toolchain
inmake-standalone-toolchain.sh
wurde korrigiert.
- Wichtige Ankündigungen
- Clang
-
- Errata
- Entgegen den Angaben in den Versionshinweisen für r11 funktioniert
__thread
nicht. Das liegt daran, dass in der von uns bereitgestellten Version von Clang eine Fehlerkorrektur für die emulierte TLS-Unterstützung fehlt.
Android NDK r11 (März 2016)
- Clang
-
- Wichtige Ankündigungen
- Wir empfehlen dringend, zu Clang zu wechseln.
- Wenn Sie Probleme mit Clang haben, können Sie hier Fehler melden, die speziell Clang im NDK betreffen. Bei allgemeineren Clang-Problemen folgen Sie der Anleitung auf dieser Seite, um Fehler zu melden.
- Clang wurde auf 3.8svn (r243773, Build 2481030) aktualisiert.
- Diese Version ist ein nahezu reiner Upstream-Clang.
- Das herunterladbare 64-Bit-NDK-Paket für Windows enthält eine 32-Bit-Version von Clang.
- Wir empfehlen dringend, zu Clang zu wechseln.
- Ergänzungen
- Clang unterstützt jetzt die emulierte TLS.
- Der Compiler unterstützt jetzt
__thread
, indem er ELF TLS mit pthread-threadspezifischen Daten emuliert. - C++11-
thread_local
funktioniert in einigen Fällen, aber nicht für Daten mit nicht trivialen Destruktoren, da diese Fälle Unterstützung von libc erfordern. Diese Einschränkung gilt nicht für Android 6.0 (API‑Level 23) oder höher. - Die emulierte TLS funktioniert noch nicht mit Aarch64, wenn auf TLS-Variablen über eine gemeinsam genutzte Bibliothek zugegriffen wird.
- Der Compiler unterstützt jetzt
- Clang unterstützt jetzt die emulierte TLS.
- Wichtige Ankündigungen
- GCC
-
- Wichtige Ankündigungen
- GCC im NDK wurde zugunsten von Clang eingestellt.
- Das NDK wird weder auf Version 5.x aktualisiert noch werden nicht kritische Backports akzeptiert.
- Die Wartung für Fehler bei der Kompilierung und interne Compilerfehler in Version 4.9 wird auf Fallbasis behandelt.
- Entfernungen
- GCC 4.8 wurde entfernt. Für alle Ziele wird jetzt GCC 4.9 verwendet.
- Weitere Änderungen
- Synchronized google/gcc-4_9 to r224707. Zuvor wurde sie mit r214835 synchronisiert.
- NDK
-
- Wichtige Ankündigungen
- Die Beispiele sind nicht mehr im NDK-Paket enthalten. Sie sind stattdessen auf GitHub verfügbar.
- Die Dokumentation ist nicht mehr im NDK-Paket enthalten. Stattdessen finden Sie sie auf der Website für Android-Entwickler.
- Ergänzungen
android-23
wurde eine native Tracing API hinzugefügt.- Eine native Multinetwork-API wurde zu
android-23
hinzugefügt. - Ab API-Level 21 wurden libc, m und dl aktiviert, um versionierte Symbole bereitzustellen.
- Vulkan-Header und ‑Bibliothek wurden API-Level N hinzugefügt.
- Entfernungen
- Die Unterstützung für
_WCHAR_IS_8BIT
wurde entfernt. - „sed“ entfernt.
- Der mclinker wurde entfernt.
- Perl wurde entfernt.
- Alle Symbole, die von den Plattformversionen dieser Bibliotheken nicht unterstützt werden, wurden aus allen Versionen von NDK libc, m und dl entfernt.
- Die Unterstützung für mips64r2 wurde teilweise entfernt. Die restlichen werden in Zukunft entfernt.
- Die Unterstützung für
- Weitere Änderungen
- Die ARM-Standalone-Toolchains verwenden jetzt standardmäßig arm7.
- Sie können das alte Verhalten wiederherstellen, indem Sie die Option
-target
alsarmv5te-linux-androideabi
angeben.
- Sie können das alte Verhalten wiederherstellen, indem Sie die Option
- Das Build-System wurde so geändert, dass
-isystem
für Plattform-Includes verwendet wird.- Warnungen, die durch Bionic-Ursachen ausgelöst werden, führen nicht mehr zu Build-Fehlern.
- Ein Segmentierungsfehler wurde behoben, der auftrat, wenn eine Binärdatei über gabi++ Ausnahmen ausgelöst hat. (Problem 179410)
- Der Inline-Namespace von libc++ wurde in
std::__ndk1
geändert, um ODR-Probleme mit der plattformspezifischen libc++ zu vermeiden. - Alle libc++-Bibliotheken werden jetzt mit libc++abi erstellt.
- Die Standardeinstellung für
APP_PLATFORM
wurde auf Gingerbread aktualisiert.- Die Unterstützung für Froyo und ältere Versionen wird in einer zukünftigen Version eingestellt.
- Die ARM-Standalone-Toolchains verwenden jetzt standardmäßig arm7.
- Die gabi++-
_Unwind_Exception
-Struktur wurde für 64 Bit aktualisiert. - Folgende Funktionen wurden zu „cpufeatures“ hinzugefügt:
- SSE4.1 und SSE4.2 erkennen.
- CPU-Funktionen auf x86_64 erkennen.
- libc++abi wurde auf Upstream-Version r231075 aktualisiert.
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
unduchar.h
wurden von ToT Bionic aktualisiert.- Synchronisiertes
sys/cdefs.h
für alle API-Levels. fegetenv and fesetenv
für Arm korrigiert.- Größe/Ausrichtung des Endzeigers von
crtend_*
für mips64 und x86_64 korrigieren.
- Wichtige Ankündigungen
- Binutils
-
- Ergänzungen
- Neue Option hinzugefügt:
--pic-veneer
.
- Neue Option hinzugefügt:
- Entfernungen
- Das 32-Bit-Windows-Paket enthält nicht mehr „ld.gold“. Stattdessen können Sie ld.gold aus dem 64-Bit-Windows-Paket abrufen.
- Änderungen
- Vereinheitlichung der binutils-Quelle zwischen Android und ChromiumOS. Weitere Informationen zu dieser Änderung finden Sie in den Kommentaren.
- Verbesserte Zuverlässigkeit von Gold für aarch64. Verwenden Sie
-fuse-ld=gold
beim Linken, um gold anstelle von bfd zu verwenden. Die Standardeinstellung wird sich wahrscheinlich in der nächsten Version ändern. - Die Linker-Zeit für große Binärdateien für das Gold-ARM-Backend wurde verbessert (bis zu 50% weniger Linker-Zeit für den debugfähigen Chrome-Browser).
- Ergänzungen
- GDB
-
- Entfernungen
- ndk-gdb wurde zugunsten von ndk-gdb.py entfernt.
- Änderungen
- gdb wurde auf Version 7.10 aktualisiert.
- Verbesserte Leistung
- Die Fehlermeldungen wurden verbessert.
- Relative Projektpfade wurden korrigiert.
- Das Beenden des Hintergrundprozesses „gdbserver“ mit Strg+C wurde verhindert.
- Verbesserte Windows-Unterstützung.
- Entfernungen
- YASM
-
- Änderungen
- YASM wurde auf Version 1.3.0 aktualisiert.
- Änderungen
- Bekannte Probleme
-
- x86 ASAN funktioniert derzeit nicht. Weitere Informationen finden Sie in dieser Diskussion.
- Die Kombination aus Clang, x86, stlport_static und Optimierungsstufen, die höher als
-O0
sind, führt zu Testfehlern mitdynamic_cast
. Weitere Informationen finden Sie in den Kommentaren. - Die Ausnahmebehandlung schlägt mit c++_shared auf ARM32 häufig fehl. Die Ursache ist die Inkompatibilität zwischen dem LLVM-Unwinder, den libc++abi für ARM32 verwendet, und libgcc. Dieses Verhalten ist keine Regression gegenüber r10e.
Android NDK r10e (Mai 2015)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Wichtige Änderungen:
-
- Die Problemumgehung für Cortex-A53-Errata 843419 wurde in den
aarch64-linux-android-4.9
-Linker integriert. Weitere Informationen zu dieser Problemumgehung finden Sie unter Workaround for cortex-a53 erratum 843419. - Clang 3.6 wurde hinzugefügt.
NDK_TOOLCHAIN_VERSION=clang
wählt jetzt standardmäßig diese Version von Clang aus. - Clang 3.4 wurde entfernt.
- GCC 4.6 wurde entfernt.
- Unterstützung für Multithreading in
ld.gold
für alle Architekturen implementiert. Sie kann jetzt mit oder ohne Unterstützung für Multithreading verknüpft werden. Standardmäßig erfolgt die Verknüpfung ohne Unterstützung für Multithreading.- Verwenden Sie die Option
--threads
, um mit Multithreading zu kompilieren. - Wenn Sie ohne Multithreading kompilieren möchten, verwenden Sie die Option
--no-threads
.
- Verwenden Sie die Option
- GDB/gdbserver wurde für alle Architekturen auf Version 7.7 aktualisiert.
- Das NDK-Paket für 32-Bit-Darwin wurde entfernt.
- Die Problemumgehung für Cortex-A53-Errata 843419 wurde in den
- Wichtige Fehlerkorrekturen:
-
- Ein Absturz wurde behoben, der auftrat, wenn OpenMP-Schleifen außerhalb des Hauptthreads vorhanden waren.
- Ein interner Compilerfehler (ICE) in GCC 4.9 wurde behoben, der auftrat, wenn der Nutzer
#pragma GCC optimize ("O0")
deklarierte, aber in der Befehlszeile eine andere Optimierungsstufe angab. Diepragma
hat Vorrang. - Ein Fehler wurde behoben, der zu einem Absturz mit der folgenden Fehlermeldung geführt hat:
in add_stores, at var-tracking.c:6000
- Es wurde eine Problemumgehung für ein Clang 3.5-Problem implementiert, bei dem die automatische Vektorisierung von LLVM
llvm.cttz.v2i64()
generiert, eine Anweisung ohne Entsprechung im ARM-Befehlssatz.
- Weitere Fehlerkorrekturen:
-
- Es wurden die folgenden Header- und Bibliothekskorrekturen vorgenommen:
- Das Problem wurde in
media/NdkMediaDrm.h
behoben.PROPERTY_*
sys/ucontext.h
fürmips64
behoben.- Die Clang-Versionsprüfung für
__builtin_isnan
und__builtin_isinf
wurde entfernt. android-21/arch-mips/usr/include/asm/reg.h
undandroid-21/arch-mips64/usr/include/asm/reg.h
wurden hinzugefügt.- Es wurde eine fälschliche Warnung zu Arraygrenzen behoben, die von GCC 4.9 für x86 ausgegeben wurde, und die Warnung zu Arraygrenzen, die von GCC 4.9 für ARM ausgegeben wurde, wurde wieder aktiviert. Die Warnung für ARM war zuvor bedingungslos deaktiviert.
- Clang 3.5 für
mips
undmips64
wurde korrigiert, um einen beschreibbaren.gcc_except_table
-Abschnitt zu erstellen, was dem GCC-Verhalten entspricht. Durch diese Änderung können Sie die folgende Linker-Warnung vermeiden:.../ld: warning: creating a DT_TEXTREL in a shared object
- Ein Fix für
compiler-rt
-Probleme, die zu Abstürzen führten, wenn Clang fürmips64
kompiliert wurde, wurde rückportiert. Weitere Informationen finden Sie unter LLVM-Problem 20098. - Clang 3.5-Abstürze bei Kommentaren, die nicht im ASCII-Zeichensatz enthaltene Zeichen enthalten, wurden behoben. (Problem 81440)
- Der Fehler wurde behoben, sodass
stlport collate::compare
jetzt-1
und1
zurückgibt. Bisher wurden beliebige signierte Zahlen zurückgegeben. ndk-gdb
für 64-Bit-ABIs wurde korrigiert. (Problem 118300)- Der Absturz, der durch das HelloComputeNDK-Beispiel für RenderScript unter Android 4.4 (Android API-Level 19) verursacht wurde, wurde behoben. Weitere Informationen finden Sie auf dieser Seite.
libc++ __wrap_iter
für GCC behoben. Weitere Informationen finden Sie unter LLVM-Problem 22355.- Die Unterstützung von
.asm
für ABIx86_64
wurde korrigiert. - Es wurde eine Umgehungslösung für das
stlport
-Problem in GCC 4.8 implementiert. (Problem 127773) - Das abschließende Trennzeichen
\\
wurde unter Windows aus dem Projektpfad entfernt. (Problem 160584) - Ein
no rule to make target
-Fehler wurde behoben, der beim Kompilieren einer einzelnen.c
-Datei durch Ausführen des Befehlsndk-build.cmd
übergradle
aufgetreten ist. (Problem 66937) - Die Bibliotheken
libatomic.a
undlibgomp.a
wurden hinzugefügt, die in den folgenden Host-Toolchains gefehlt hatten:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Sonstige Änderungen:
-
ld.gold
füraarch64
hinzugefügt. Der Standard-Linker bleibtld.bfd
. Wenn Sield.gold
explizit aktivieren möchten, fügen Sie-fuse-ld=gold
der VariablenLOCAL_LDFLAGS
oderAPP_LDFLAGS
hinzu.- Die MIPS- und MIPS64-Toolchains wurden mit
binutils-2.25
erstellt, was eine verbesserte R6-Unterstützung bietet. -fstandalone-debug
(vollständige Debugging-Informationen) ist jetzt eine Standardoption für Clang.-fstack-protector
wurde durch-fstack-protector-strong
für die ARM-, AArch64-, X86- und X86_64-Toolchains für GCC 4.9, Clang 3.5 und Clang 3.6 ersetzt.- Der Befehlszeilenschalter
--package
wurdendk-gdb
hinzugefügt, damit das Build-System den Paketnamen überschreiben kann. (Problem 56189) -
-mno-ldc1-stc1
für MIPS eingestellt. Diese Option funktioniert möglicherweise nicht mit den neuen Optionen-fpxx
und-mno-odd-spreg
oder mit der FPXX-ABI. - Der
cpu-features
wurden die MIPS-MSA- und R6-Erkennung hinzugefügt.
Android NDK r10d (Dezember 2014)
- Wichtige Änderungen:
-
- GCC 4.8 ist jetzt die Standardeinstellung für alle 32-Bit-ABIs. GCC 4.6 wurde eingestellt und wird im nächsten Release entfernt. Wenn Sie das vorherige Verhalten wiederherstellen möchten, fügen Sie entweder
NDK_TOOLCHAIN_VERSION=4.6
zu ndk-build hinzu oder--toolchain=arm-linux-androideabi-4.6
, wenn Siemake-standalone-toolchain.sh
in der Befehlszeile ausführen. GCC 4.9 bleibt die Standardeinstellung für 64-Bit-ABIs. - Das Hinzufügen von
-mstackrealign
wurde für alle x86[_64]-Toolchains standardmäßig deaktiviert. Die NDK-Toolchain geht von einer 16-Byte-Stapelausrichtung aus. Die standardmäßig verwendeten Tools und Optionen setzen diese Regel durch. Ein Nutzer, der Assembly-Code schreibt, muss darauf achten, dass die Stapelausrichtung beibehalten wird und dass auch andere Compiler diese Regel einhalten. (GCC-Fehler 38496) - Unterstützung für Address Sanitizer in Clang 3.5 für die ARM- und x86-ABIs hinzugefügt. Weitere Informationen zu dieser Änderung finden Sie im Projekt Address Sanitizer.
- Ab API-Level 21 ist die Verwendung von
-fPIE -pie
beim Erstellen erforderlich. In API-Ebenen 16 und höher verwendet ndk-build beim ErstellenPIE
. Diese Änderung hat eine Reihe von Auswirkungen, die in Developer Preview Issue 888 beschrieben werden. Diese Auswirkungen gelten nicht für freigegebene Mediatheken.
- GCC 4.8 ist jetzt die Standardeinstellung für alle 32-Bit-ABIs. GCC 4.6 wurde eingestellt und wird im nächsten Release entfernt. Wenn Sie das vorherige Verhalten wiederherstellen möchten, fügen Sie entweder
- Wichtige Fehlerkorrekturen:
-
- Es wurden weitere Fehler im Zusammenhang mit
A53 Errata #835769 im Linker aarch64-linux-android-4.9 behoben. Dazu übergibt GCC eine neue Option,
--fix-cortex-a53-835769
, wenn-mfix-cortex-a53-835769
(standardmäßig aktiviert) angegeben ist. Weitere Informationen finden Sie in dieser binutils-Meldung und in dieser binutils-Meldung. - Es wurde eine Korrektur für einen libc++-
sscanf/vsscanf
-Hänger dokumentiert, der auf API-Level 21 aufgetreten ist. Die Korrektur selbst wurde in r10c implementiert. (Problem 77988) - Ein AutoFDO-Absturz (
-fauto-profile
), der mit GCC 4.9 auftrat, wenn-Os
angegeben war, wurde behoben. (Problem 77571)
- Es wurden weitere Fehler im Zusammenhang mit
A53 Errata #835769 im Linker aarch64-linux-android-4.9 behoben. Dazu übergibt GCC eine neue Option,
- Weitere Fehlerkorrekturen:
-
- Es wurden die folgenden Header- und Bibliothekskorrekturen vorgenommen:
posix_memalign
wurde API-Level 16 hinzugefügt. Außerdem wurde ein Prototyp instdlib.h
für die API-Levels 16 bis 19 hinzugefügt. (Problem 77861)stdatomic.h
wurde korrigiert, sodass<atomic>
nur für C++11 enthalten ist.- Die folgenden Header wurden für die eigenständige Verwendung geändert:
sys/user.h
undgl2ext.h
,dlext.h
,fts.h
,sgidefs.h
für API-Level 21. sys/user.h
wurde geändert, ummxcsr_mask
inmxcr_mask
umzubenennen und den Datentyp füru_ar0
zu ändern. von - Der Rückgabewerttyp von
sysconf()
wurde vonint
inlong
geändert. - Die Verarbeitung von
thumb
fürLOCAL_ARM_MODE
durch ndk-build wurde korrigiert: In r10d fügt ndk-build standardmäßigLOCAL_LDFLAGS+=-mthumb
hinzu, sofern nicht eine der folgenden Bedingungen zutrifft: - Sie haben
LOCAL_ARM_MODE
aufarm
gesetzt. - Sie erstellen einen Debug-Build (mit Einstellungen wie
APP_OPTIM=debug
undAndroidManifest.xml
, dieandroid:debuggable="true"
enthalten), wobei der ARM-Modus standardmäßig verwendet wird, um die Kompatibilität mit früheren Toolchains beizubehalten. (Problem 74040) LOCAL_SRC_FILES
in ndk-build wurde korrigiert, sodass absolute Windows-Pfade verwendet werden. (Problem 74333)- Bash-spezifischer Code wurde aus ndk-gdb entfernt. (Problem 73338)
- Bash-spezifischer Code wurde aus
make-standalone-toolchain.sh
entfernt. (Problem 74145) - Die Dokumentation wurde überarbeitet und enthält jetzt Informationen zu einem Fix für transitive
System.loadLibrary()
-Abhängigkeiten. (Problem 41790) - Es wurde ein Problem behoben, das das Extrahieren von 64-Bit-Paketen unter Ubuntu 14.04 und OS X 10.10 (Yosemite) verhinderte. (Problem 78148)
- Ein Problem mit
LOCAL_PCH
wurde behoben, um die Clang-Unterstützung zu verbessern. (Problem 77575) - Die Warnung „requires executable stack“ von ld.gold wurde klarer formuliert. (Problem 79115)
unsigned long
bis struct user_regs_struct*.
Android NDK r10c (Oktober 2014)
- Wichtige Änderungen:
-
- Die Downloadstruktur wurde folgendermaßen geändert:
- Jedes Paket enthält jetzt sowohl die 32‑ als auch die 64‑Bit-Header, ‑Bibliotheken und ‑Tools für die jeweilige Plattform.
- STL-Bibliotheken mit Debugging-Informationen müssen nicht mehr separat heruntergeladen werden.
- Alles, was bisher als
Android-L
bezeichnet wurde, wurde in die offizielle Release-Bezeichnungandroid-21
geändert. - GCC 4.9 wurde aktualisiert, indem es auf den
google
-Branch des GCC-Repositorys umgestellt wurde. Die wichtigsten Unterschiede zur Upstream-Version von GCC 4.9 sind: - Mit der Option
-O2
wird jetzt die Vektorisierung aktiviert, ohne dass Schleifen abgetrennt werden, aber mit aggressiverem Unrolling. - Verbesserungen bei FDO und LIPO
- Clang 3.5-Unterstützung für alle Hosts hinzugefügt:
NDK_TOOLCHAIN_VERSION=clang
wählt jetzt Clang 3.5 aus. Hinweise: - Bei ARM und x86 wird standardmäßig der integrierte Assembler verwendet. Wenn dadurch Probleme auftreten, verwenden Sie
-fno-integrated-as
als Behelfslösung. - Clang 3.5 gibt mehr Warnungen für nicht verwendete Flags aus, z. B. für die Option
-finline-functions
, die von GCC unterstützt wird. - Es ist jetzt möglich, den ART-Debugging-Modus auf einem Android 5.0-Gerät zu aktivieren, wenn ART als virtuelle Maschine verwendet wird. Dazu muss die Option
art-on
angegeben werden. Weitere Informationen finden Sie unterprebuilt/common/gdb/common.setup
im Verzeichnis mit dem NDK. - Die Unterstützung für Clang 3.3 wurde entfernt.
- GCC 4.6 ist veraltet und wird möglicherweise in zukünftigen Releases entfernt.
- mclinker wurde auf Version 2.8 aktualisiert und unterstützt jetzt das Falten von identischem Code („Identical Code Folding“, ICF). Geben Sie ICF mit der Option
--icf
an. - Erweiterte
arm_neon.h
-Unterstützung für x86 und x86_64, die etwa 93% der NEON-Intrinsics abdeckt. Weitere Informationen zur NEON-Unterstützung:- Rufen Sie den NDK Programmer's Guide (
docs/Programmers_Guide/html/
) auf und lesen Sie den Abschnitt „Architectures and CPUs“ > „Neon“. - Sehen Sie sich das aktualisierte
hello-neon
-Beispiel insamples/
an. - Weitere Informationen finden Sie im Leitfaden von Intel zur Portierung von ARM NEON zu Intel SSE.
- Rufen Sie den NDK Programmer's Guide (
- Dokumentierte Unterstützung für
_FORTIFY_SOURCE
inheaders/libs/android-21
, die in r10 eingeführt wurde (alsandroid-21
nochAndroid-L
hieß), aber keine Dokumentation hatte.
Weitere Informationen finden Sie unten unter Wichtige Fehlerkorrekturen.
Bei der Migration von Projekten, in denen GCC verwendet wird, können Sie
-Wno-invalid-command-line-argument
und-Wno-unused-command-line-argument
verwenden, um die nicht verwendeten Flags zu ignorieren, bis Sie langfristig entscheiden können, was damit geschehen soll. - Wichtige Fehlerkorrekturen:
-
- Ein interner Compilerfehler mit GCC4.9/aarch64 wurde behoben, der die folgende Fehlermeldung verursacht hat (Problem 77564):
- Falsche Code-Generierung von GCC4.9/arm behoben. (Problem 77567)
- Ein interner Compilerfehler mit GCC4.9/mips im Zusammenhang mit Inline-Assembly wurde behoben. (Problem 77568)
- Ein falscher Code wurde korrigiert, der von GCC4.9/arm für
x = (cond) ? y : x
generiert wurde. (Problem 77569) - GCC4.9/aarch64 und Clang3.5/aarch64 wurden standardmäßig so korrigiert, dass sie das
Cortex-A53-Erratum (835769) umgehen. Deaktivieren Sie den Workaround, indem Sie
-mno-fix-cortex-a53-835769
angeben.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Weitere Fehlerkorrekturen:
-
- Wir haben die folgenden Header- und Bibliothekskorrekturen an
android-21
vorgenommen:- Weitere TV-Tastencodes hinzugefügt:
android/keycodes.h
android/sensor.h
wurden weitere Konstanten und sechs neue Sensorfunktionen hinzugefügt:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
undASensor_isWakeUpSensor
.stdatomic.h
wurde korrigiert, um die Kompatibilität mit GCC 4.6 zu verbessern und Unterstützung für den<atomic>
-Header zu bieten.sys/ucontext.h
undsys/user.h
wurden allen API-Ebenen hinzugefügt. Dersignal.h
-Header enthält jetzt<sys/ucontext.h>
. Sie können alle vorhandenen Definitionen vonstruct ucontext
entfernen.posix_memalign
wurde den API-Levels 17, 18 und 19 hinzugefügt.- Die folgenden Funktionen wurden allen Architekturen hinzugefügt:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - Der
native-media/AndroidManifest.xml
-Beispielanwendung wurden die erforderlichen Berechtigungen hinzugefügt. (Problem 106640) clock_nanosleep
undclock_settime
wurden zu API-Level 21 hinzugefügt. (Problem 77372)- Die folgenden Symbole wurden aus allen Architekturen entfernt:
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
unddlmalloc
. - Die folgenden Funktionen wurden aus den 64-Bit-Architekturen entfernt:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Die folgende Funktion wurde aus den 32‑Bit-Architekturen entfernt:
__signalfd4
. - Der Typ des dritten Arguments wurde in den folgenden Funktionen von
size_t
zuint
geändert:strtoll_l
,strtoull_l
,wcstoll_l
undwcstoull_l
. - Die folgenden Funktionen wurden für die 64-Bit-Architektur wiederhergestellt:
arc4random
,arc4random_buf
undarc4random_uniform
. cxa_*
und die Operatorennew
unddelete
wurden wieder inlibstdc++.so
verschoben. Durch diese Änderung wird das Verhalten von r9d wiederhergestellt. Frühere Versionen von r10 enthielten Platzhalterdateien.
- Weitere TV-Tastencodes hinzugefügt:
- Die MXU-Unterstützung in GCC 4.8 und 4.9 für mips wurde wiederhergestellt. Diese Unterstützung war in r10 und r10b nicht vorhanden, da diese Versionen von GCC mit binutils-2.24 kompiliert wurden, was MXU nicht unterstützt. Das ist jetzt der Fall.
- Der Fehler
--toolchain=
inmake-standalone-toolchain.sh
wurde behoben. Jetzt wird die Verwendung eines Suffixes, das eine Version von Clang angibt, richtig unterstützt. - Die libc++/armeabi-Funktionen
strtod()
wurden korrigiert. - Die NDK-Dokumentation in
docs/
wurde korrigiert.
- Wir haben die folgenden Header- und Bibliothekskorrekturen an
- Sonstige Änderungen:
-
- Die
cpu-features
wurde verbessert, um die ARMv8-Unterstützung für die folgenden Befehlssätze zu erkennen: AES, CRC32, SHA2, SHA1 und 64-Bit-PMULL/PMULL2. (Problem 106360) - ndk-build wurde so geändert, dass
*-gcc-ar
verwendet wird. Diese Funktion ist in GCC 4.8, GCC 4.9 und Clang verfügbar. Clang gibt sie anstelle von*-ar
an. Diese Einstellung bietet eine verbesserte LTO-Unterstützung. - Die Header
include-fixed/linux/a.out.h
undinclude-fixed/linux/compiler.h
wurden aus dem GCC-Compiler entfernt. (Problem 73728) - Ein Problem mit
-flto
unter GCC 4.8 auf Mac OS X wurde behoben. Die Fehlermeldung lautete: - Tippfehler in
build-binary.mk.
behoben (Problem 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Die
- Wichtige bekannte Probleme:
-
- Die Angabe von „-Os“ (
-fauto-profile
) in GCC4.9 kann zu Abstürzen führen. (Problem 77571)
- Die Angabe von „-Os“ (
Android NDK r10b (September 2014)
- Wichtige Hinweise:
-
- Aufgrund der Größenbeschränkung von 512 MB für herunterladbare Pakete sind die folgenden 32-Bit-Elemente nicht in den 32-Bit-NDK-Downloadpaketen enthalten. Stattdessen sind sie in den 64-Bit-Versionen enthalten:
- Android-L-Header
- GCC 4.9
- Derzeit wird Renderscript im NDK nur für 32-Bit-Renderscript mit Android 4.4 (API-Level 19) unterstützt. HelloComputeNDK (das einzige Renderscript-Beispiel) kann nicht mit einer anderen Kombination aus Renderscript (32- oder 64-Bit) und Android-Version erstellt werden.
- Zum Kompilieren von native-codec müssen Sie ein 64-Bit-NDK-Paket verwenden, in dem sich alle Android-L-Header befinden.
- Wichtige Fehlerkorrekturen:
- Weitere Fehlerkorrekturen:
-
stdio.h
wurde aus deninclude-fixed/
-Verzeichnissen aller GCC-Versionen entfernt. (Problem 73728)- Doppelte Headerdateien wurden aus den Windows-Paketen in den
platforms/android-L/arch-*/usr/include/linux/netfilter*/
-Verzeichnissen entfernt. (Problem 73704) - Ein Problem wurde behoben, das verhindert hat, dass Clang HelloComputeNDK erstellt.
- „atexit“ wurde korrigiert. (Problem 66595)
- Es wurden verschiedene Fehler in der Dokumentation zu
docs/
undsources/third_party/googletest/README.NDK
behoben. (Problem 74069) - Folgende Korrekturen wurden an den Android L-Headern vorgenommen:
- Die folgenden Funktionen wurden
ctype.h
undwchar.h
hinzugefügt: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()
(Problem 73719) und 42*_l()
-Funktionen. cmsg_nxthdr
wurde in__cmsg_nxthdr
umbenannt.__libc_malloc_dispatch
wurde entfernt.- Das
ptrace()
-Prototyp wurde inlong ptrace(int, ...);
geändert. sha1.h
wurde entfernt.android_dlextinfo
wurde inandroid/dlext.h
verlängert.- Annotierte
__NDK_FPABI__
für Funktionen, die Werte vom Typ „float“ oder „double“ instdlib.h
,time.h
,wchar.h
undcomplex.h
empfangen oder zurückgeben.
- Sonstige Änderungen:
-
mipsel-linux-android-4.9
undmips64el-linux-android-4.9
wurden aktualisiert, ein neues Multilib-Verzeichnislayout wurde implementiert und gdb-7.7 wird unterstützt.- Verbesserte
cpu-features
zur Erkennung von mehr arm64-Funktionen. (Änderungsliste 100339)
Android NDK r10 (Juli 2014)
- Wichtige Änderungen:
-
- Es wurden drei neue ABIs hinzugefügt, alle 64-Bit: arm64-v8a, x86_64, mips64. Hinweise:
- GCC 4.9 ist der Standardcompiler für 64-Bit-ABIs. Clang hat derzeit die Version 3.4.
NDK_TOOLCHAIN_VERSION=clang
may not work for arm64-v8a and mips64. - Android L ist die erste Ebene mit 64-Bit-Unterstützung. Dieses API-Level ist nur vorübergehend und nur für die L-Vorschau verfügbar. Bei der Veröffentlichung von Android L wird sie durch eine tatsächliche API-Level-Nummer ersetzt.
- Diese Version enthält jetzt die Einstellungen
all32
undall64
fürAPP_ABI
.APP_ABI=all32
entsprichtAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
entsprichtAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
zum Auswählen aller ABIs.
- Die neue GNU libstdc++ in Android-L enthält alle
<tr1/cmath>
Bevor Sie eine eigene mathematische Funktion definieren, sollten Sie in_GLIBCXX_USE_C99_MATH_TR1
nachsehen, ob eine Funktion mit diesem Namen bereits vorhanden ist, um Linker-Fehler vom Typ „multiple definition“ zu vermeiden. - Die cpu-features-Bibliothek wurde für den ARMv8-Kernel aktualisiert. Die vorhandene cpu-features-Bibliothek erkennt möglicherweise nicht, ob NEON auf der ARMv8-Plattform vorhanden ist. Kompilieren Sie Ihren Code mit der neuen Version neu.
- Es wurde ein neues
platforms/android-L/
-API-Verzeichnis hinzugefügt. Er enthält: - Aktualisierte Bionic-Header, die sich seit Android-API-Level 3 (Cupcake) bis 19 (KitKat) nicht geändert hatten. Diese neue Version für Ebene L muss mit AOSP synchronisiert werden.
- Neue Media APIs und ein Beispiel für einen nativen Codec.
- Ein aktualisierter
Android.h
-Header für SLES/OpenSLES, der die Unterstützung für das Audioformat mit einfacher Genauigkeit und Gleitkommazahlen in AudioPlayer ermöglicht. - GLES 3.1 und AEP-Erweiterungen für
libGLESv3.so.
- GLES2- und GLES3-Header wurden auf die neuesten offiziellen Khronos-Versionen aktualisiert.
- GCC 4.9-Compiler für die 32‑/64‑Bit-ABIs hinzugefügt. GCC 4.9 ist, wie bereits erwähnt, der Standardcompiler (und der einzige Compiler) für 64-Bit-ABIs. Für 32-Bit-ABIs müssen Sie GCC 4.9 explizit aktivieren, da GCC 4.6 weiterhin die Standardeinstellung ist.
- Aktivieren Sie für ndk-build die 32-Bit-Erstellung mit GCC 4.9, indem Sie
NDK_TOOLCHAIN_VERSION=4.9
zuApplication.mk
hinzufügen oder als Umgebungsvariable über die Befehlszeile exportieren. - Verwenden Sie für eine eigenständige Toolchain die Option
--toolchain=
immake-standalone-toolchain.sh
-Script. Beispiel:--toolchain=arm-linux-androideabi-4.9.
- GDB wurde in GCC 4.8/4.9 und x86* auf Version 7.6 aktualisiert. Da GDB in GCC 4.6 (Standardeinstellung für ARM und MIPS) immer noch die Version GDB-7.3.x hat, müssen Sie
NDK_TOOLCHAIN_VERSION=4.8
oder4.9
festlegen, damit ndk-gdb GDB 7.6 auswählt. - Die Build-Option
-mssse3
wurde hinzugefügt, um SSSE3-Unterstützung zu bieten. Sie ist jetzt die Standardeinstellung für ABI x86 (Upgrade von SSE3). Das von Google veröffentlichte Image enthält keine SSSE3-Anweisungen. - GCC 4.8 auf 4.8.3 aktualisiert.
- Verbesserte Unterstützung von ARM libc++ EH durch Umstellung von gabi++ auf libc++abi. Weitere Informationen finden Sie im Abschnitt „C++-Unterstützung“ der Dokumentation. Hinweise:
- Alle Tests mit Ausnahme des Gebietsschemas werden jetzt für Clang 3.4 und GCC 4.8 bestanden. Weitere Informationen finden Sie im Abschnitt „C++-Unterstützung“ der Dokumentation.
- Die libc++-Bibliotheken für X86 und MIPS libc++ verwenden weiterhin gabi++.
- In GCC 4.7 und höher kann jetzt <atomic> verwendet werden.
- Sie müssen
-fno-strict-aliasing
hinzufügen, wenn Sie<list>
verwenden, da__list_imp::_end
_ gegen die TBAA-Regeln verstößt. (Problem 61571) - Ab GCC 4.6 wird libc++ durch LIBCXX_FORCE_REBUILD:=true nicht mehr neu erstellt. Für die Neuerstellung ist ein anderer Compiler erforderlich. Clang 3.3 wurde nicht getestet.
- mclinker ist jetzt Version 2.7 und unterstützt aarch64-Linux.
- Unterstützung für vorkompilierte Header für Header, die durch
LOCAL_PCH
angegeben werden, wurde hinzugefügt. (Problem 25412)
- Wichtige Fehlerkorrekturen:
-
- Die libc++-Bibliothek wurde korrigiert, sodass sie jetzt
std::feof
usw. kompiliert (Problem 66668). - Ein atomarer Bibliotheksaufruf von Clang 3.3/3.4 wurde korrigiert, der in einigen libc++-Tests für ABI armeabi zu Abstürzen geführt hat.
- Clang 3.4-Abstürze beim Lesen vorkompilierter Header wurden behoben. (Problem 66657)
- Der Clang 3.3/3.4-Assert
-O3
wurde behoben für: - Der folgende Clang 3.3/3.4-Absturz wurde behoben:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(Problem 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
. (Problem 66950) - Die libc++-Bibliothek wurde korrigiert, sodass sie jetzt
- Weitere Fehlerkorrekturen:
-
- Fixierte Header:
- Der 32-Bit-Wert
ssize_t
wurde inint
anstelle vonlong int
korrigiert. - Die Funktionen
WCHAR_MIN
undWCHAR_MAX
wurden so korrigiert, dass sie je nach Architektur, auf der sie ausgeführt werden, die entsprechenden Vorzeichen verwenden: - X86/MIPS: signiert.
- ARM: Nicht signiert.
- Wenn Sie erzwingen möchten, dass X86/MIPS standardmäßig unsigniert ist, verwenden Sie
-D__WCHAR_UNSIGNED__
. - Wenn Sie erzwingen möchten, dass
wchar_t
16 Bit hat, verwenden Sie-fshort-wchar
. - Nicht vorhandene Symbole aus 32-Bit-
libc.so
entfernt undpread64
,pwrite64
undftruncate64
für Android-API-Level 12 und höher hinzugefügt. (Problem 69319) Weitere Informationen finden Sie in der Commit-Nachricht, die der AOSP-Änderungsliste 94137 beiliegt. - Eine GCC-Warnung zur Neudefinition von
putchar
wurde behoben. Die Warnmeldung lautet: - Die folgenden Probleme mit
make-standalone-toolchain.sh --stl=libc++
wurden behoben: - Kopien
cxxabi.h
. (Problem 68001) - Wird in anderen Verzeichnissen als dem NDK-Installationsverzeichnis ausgeführt. (Probleme 67690 und 68647)
- In GCC/Windows werden Argumente nur dann in Anführungszeichen gesetzt, wenn dies für das Starten von Prozessen in externen Programmen erforderlich ist. Durch diese Änderung verringert sich die Wahrscheinlichkeit, dass das Längenlimit von 32.000 Zeichen überschritten wird.
- Ein Problem wurde behoben, das die Anpassung der Umgebungsvariable
APP_PLATFORM
unmöglich machte. - Die Implementierung von
IsSystemLibrary()
in crazy_linker wurde korrigiert, sodassstrrchr()
anstelle vonstrchr()
verwendet wird, um den tatsächlichen Basename des Bibliothekspfads zu ermitteln. - Das native-audio-Modul kann jetzt auch im Debug-Modus erstellt werden.
- Das Problem, dass gdb keine extremen Gleitkommazahlen ausgeben konnte, wurde behoben. (Problem 69203)
- Das Problem, dass Clang 3.4 nicht mit
-Wl,-shared
kompiliert werden konnte (im Gegensatz zu-shared
, bei dem keine Kompilierungsprobleme auftraten), wurde behoben. Das Problem bestand darin, dass Clang-pie
für Android-Ziele hinzugefügt hat, wenn weder-shared
noch-static
vorhanden waren. Dieses Verhalten war falsch und führte dazu, dass der Linker sich darüber beschwerte, dass-shared
und-pie
nicht gleichzeitig vorhanden sein konnten.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Änderungsliste 91185). - Sonstige Änderungen:
-
arm_neon.h
wurde der x86-Toolchain hinzugefügt, sodass jetzt etwa 47% von Neon emuliert werden. Derzeit werden keine 64‑Bit-Typen unterstützt. Weitere Informationen finden Sie im Abschnitt zur Unterstützung von ARM Neon-Intrinsics in der x86-Dokumentation.- Die portierte ARM/GOT_PREL-Optimierung (in GCC 4.6, erstellt aus dem GCC-Google-Branch) für ARM GCC 4.8/4.9. Diese Optimierung reduziert manchmal die Anzahl der Anweisungen beim Zugriff auf globale Variablen. Ein Beispiel finden Sie im build.sh-Skript in
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - ARM-Version für STL gabi++, stlport und libc++ hinzugefügt. Sie haben jetzt sowohl den IT- als auch den Thumb-Modus.
- Das Skript „make-standalone-toolchain.sh“ kann jetzt mit
--toolchain=x86_64-linux-android-4.9
aufgerufen werden, was--toolchain=x86_64-4.9
entspricht.
Android NDK r9d (März 2014)
- Wichtige Änderungen:
-
- Unterstützung für den Clang 3.4-Compiler hinzugefügt. Mit der Option
NDK_TOOLCHAIN_VERSION=clang
wird jetzt Clang 3.4 ausgewählt. GCC 4.6 ist weiterhin der Standardcompiler. APP_ABI=armeabi-v7a-hard
wurde hinzugefügt, mit der zusätzlichen Multilib-Option-mfloat-abi=hard
. Diese Optionen sind für die Verwendung mit ARM GCC 4.6/4.8 und Clang 3.3/3.4 vorgesehen (die den Assembler, Linker und die Bibliotheken von 4.8 verwenden). Beachten Sie bei der Verwendung dieser Optionen die folgenden Änderungen:- Fügen Sie beim Ausführen des Skripts
ndk-build
die folgenden Optionen für das Ziel „armeabi-v7a“ hinzu: Die erstellte Bibliothek wird nachTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
kopiert. Damit „make“ wie erwartet funktioniert, dürfen Sie nicht sowohlarmeabi-v7a
als aucharmeabi-v7a-hard
als Make-Ziele angeben (d.h. in der Zeile APP_ABI=). Andernfalls wird eine der beiden ignoriert.APP_ABI=all
entspricht weiterhinarmeabi armeabi-v7a x86 mips
. - Das Script
make-standalone-toolchain.sh
kopiert zusätzliche Bibliotheken in die Verzeichnisse unter/hard
. Fügen Sie die oben genanntenCFLAGS
undLFLAGS
in Ihr Makefile ein, damit GCC oder Clang mit Bibliotheken in/hard
verknüpft werden können. - Der yasm-Assembler sowie die Flags
LOCAL_ASMFLAGS
undEXPORT_ASMFLAGS
für x86-Ziele wurden hinzugefügt. Das Skriptndk-build
verwendetprebuilts/*/bin/yasm*
, umLOCAL_SRC_FILES
mit der Erweiterung.asm
zu erstellen. - MClinker wurde auf Version 2.6.0 aktualisiert. Damit wird
-gc-sections
unterstützt. - Experimentelle libc++-Unterstützung hinzugefügt (Upstream-Version r201101). So verwenden Sie die neue Funktion:
- Fügen Sie
APP_STL := c++_static
oderAPP_STL := c++_shared
inApplication.mk
hinzu. Sie können die App überLIBCXX_FORCE_REBUILD := true
aus dem Quellcode neu erstellen. - Führen Sie
make-standalone-toolchain.sh --stl=libc++
aus, um eine eigenständige Toolchain mit libc++-Headern und -Bibliotheken zu erstellen.
CPLUSPLUS-SUPPORT.html
. (Problem 36496) - Fügen Sie
- Unterstützung für den Clang 3.4-Compiler hinzugefügt. Mit der Option
- Wichtige Fehlerkorrekturen:
-
- Ein nicht abgefangener Throw von einem unerwarteten Ausnahmehandler für GCC 4.6/4.8 ARM EABI wurde behoben. (GCC-Problem 59392)
- GCC 4.8 wurde korrigiert, sodass jetzt eine partielle Spezialisierung einer Vorlage mit einem abhängigen, nicht typbezogenen Vorlagenargument korrekt aufgelöst wird. (GCC-Problem 59052)
- Es wurden weitere Module zu den vorgefertigten Python-Modulen hinzugefügt (Problem 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
und_curses_panel
- Mac OS X:
- Der x86- und MIPS-gdbserver
event_getmsg_helper
wurde korrigiert. - Es wurden zahlreiche Probleme in der RenderScript NDK-Toolchain behoben, darunter Probleme mit der Kompatibilität auf älteren Geräten und mit der C++-Reflektion.
- Weitere Fehlerkorrekturen:
-
- Korrekturen für Header:
- Es wurde ein fehlendes
#include <sys/types.h>
inandroid/asset_manager.h
für Android API-Level 13 und höher behoben. (Problem 64988) - Es wurde ein fehlendes
#include
inandroid/rect_manager.h
für Android-API-Level 14 und höher behoben. JNICALL
wurde zuJNI_OnLoad
undJNI_OnUnload
injni.h
hinzugefügt.JNICALL
wird als__NDK_FPABI__
definiert. Weitere Informationen finden Sie untersys/cdefs.h
.- Die folgenden Header wurden aktualisiert, sodass sie ohne manuelle Einbindung ihrer Abhängigkeiten eingebunden werden können (Problem 64679):
sys/cachectl.h
für alle Architekturen hinzugefügt. MIPS-Entwickler können jetzt diesen Header einfügen, anstatt#ifdef __mips__
zu schreiben.platforms/android-18/include/android/input.h
wurde behoben, indem__NDK_FPABI__
zu Funktionen hinzugefügt wurde, die Float- oder Double-Werte annehmen oder zurückgeben.- Der MIPS-Wert
struct stat
wurde korrigiert. Er war für Android-API-Level 12 und höher fälschlicherweise auf das 64-Bit-Pendant festgelegt. Diese falsche Einstellung war eine Regression, die in Release r9c eingeführt wurde. __PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, und__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
für Android-API-Level 9 und niedriger definiert.scalbln
,scalblnf
undscalblnl
wurden für x86-libm.so
für APIs 18 und höher hinzugefügt.- Ein Tippfehler in
sources/android/support/include/iconv.h
wurde behoben. (Problem 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Es wurde ein fehlendes
- Der gabi++-Aufruf
std::unexpected()
wurde korrigiert, sodassstd::terminate()
aufgerufen wird und ein benutzerdefinierterstd::terminate()
-Handler ausgeführt werden kann. - gabi++ wurde korrigiert, um
std::nullptr
zu erfassen. - Feste Beispiele „Teapot“ und „MoreTeapots“:
- Ein Problem mit Tegra 2- und Tegra 3-Chips wurde behoben, indem die spiegelnden Variablen auf mittlere Präzision umgestellt wurden. Werte für die Spiegelungsstärke können jetzt kleiner als 1,0 sein.
- Die Beispiele wurden so geändert, dass durch Drücken der Lautstärketaste der Immersive-Modus wiederhergestellt und
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
ungültig gemacht wird. Die Bildschirmdrehung löstonSystemUiVisibilityChange
nicht aus und stellt daher den Immersive-Modus nicht wieder her.
- Das
ndk-build
-Skript wurde korrigiert, um-rpath-link=$SYSROOT/usr/lib
und-rpath-link=$TARGET_OUT
hinzuzufügen, damitld.bfd
zum Verknüpfen von ausführbaren Dateien verwendet werden kann. (Problem 64266) -Bsymbolic
wurde aus allen STL-Builds entfernt.- Der Fehler
ndk-gdb-py.cmd
wurde behoben, indemSHELL
als Umgebungsvariable festgelegt wurde, anstatt sie anpython.exe
zu übergeben, wodurch die Einstellung ignoriert wird. (Problem 63054) - Das
make-standalone-toolchain.sh
-Script wurde so korrigiert, dass mit der Option--stl=stlport
die gabi++-Header kopiert werden, anstatt sie zu verlinken. Diecmd.exe
- und MinGW-Shells können von Cygwin erstellte Symlinks nicht interpretieren.
- Korrekturen für Header:
- Sonstige Änderungen:
-
- Ausführungsberechtigungen für alle
*cmd
-Scripts angewendet, die zuvor nur für die Verwendung in dercmd.exe
-Shell vorgesehen waren, falls Entwicklerndk-build.cmd
in Cygwin anstelle des empfohlenenndk-build
-Scripts verwenden möchten. - Die Geschwindigkeit des
make-standalone-toolchain.sh
-Scripts wurde verbessert, indem Dateien verschoben statt kopiert werden, wenn das angegebene Zielverzeichnis nicht vorhanden ist.
- Ausführungsberechtigungen für alle
Android NDK r9c (Dezember 2013)
In dieser Version werden nur Fehler behoben.
- Wichtige Fehlerkorrekturen:
-
- Ein Problem mit GCC 4.8 ARM wurde behoben, bei dem der Stapelzeiger zu früh wiederhergestellt wurde. Dieses Problem hat verhindert, dass über den Frame-Pointer zuverlässig auf eine Variable im Stackframe zugegriffen werden konnte. (GCC-Problem 58854)
- Ein Problem mit GCC 4.8 libstdc++ wurde behoben, bei dem ein Fehler in std::nth_element die Generierung von Code verursachte, der einen zufälligen Segmentierungsfehler erzeugte. (Problem 62910)
- Der interne Compilerfehler (ICE) in GCC 4.8 in cc1/cc1plus mit
-fuse-ld=mcld
wurde behoben, sodass der folgende Fehler nicht mehr auftritt:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Die Unterstützung für
-mhard-float
für__builtin
-Mathematikfunktionen wurde korrigiert. Aktuelle Informationen zu Korrekturen für-mhard-float
mit STL finden Sie unter Problem 61784.
- Weitere Fehlerkorrekturen:
-
- Korrekturen für Header:
- Der Prototyp von
poll
wurde inpoll.h
zupoll(struct pollfd *, nfds_t, int);
geändert. utimensat
wurde für Android-API-Levels 12 und 19 zulibc.so
hinzugefügt. Diese Bibliotheken sind jetzt für alle Android-API-Levels 12 bis 19 enthalten.futimens
wurde inlibc.so
für Android-API-Level 19 eingeführt.- Die fehlenden
clock_settime()
undclock_nanosleep()
wurden fürtime.h
für Android-API-Level 8 und höher hinzugefügt. CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
undCLOCK_BOOTTIME_ALARM
intime.h.
hinzugefügt- Veraltete
CLOCK_REALTIME_HR
undCLOCK_MONOTONIC_HR.
entfernt
- Der Prototyp von
- In den Beispielen „Teapot“, „MoreTeapots“ und
source/android/ndk_helper
:- Sie wurden so geändert, dass sie jetzt ein Hard-Float-ABI für armeabi-v7a verwenden.
- Sie wurden aktualisiert, um den Immersive-Modus auf Android-API-Level 19 und höher zu verwenden.
- Ein Problem mit
Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
wurde behoben, das zu Abstürzen auf x86-Geräten geführt hat.
ndk-build
-Fehler, die in Cygwin auftreten, wenn auf das NDK-Paket über einen Symlink verwiesen wird, wurden behoben.- Es wurde ein Problem behoben, durch das
ndk-build.cmd
-Fehler in Windows-cmd.exe
auftraten, wennLOCAL_SRC_FILES
absolute Pfade enthielt. (Problem 69992) - Das
ndk-stack
-Script wurde so korrigiert, dass es auch dann fortgesetzt wird, wenn ein Frame nicht geparst werden kann, weil keine Routine, kein Dateiname oder keine Zeilennummer gefunden werden kann. In allen diesen Fällen wird??
ausgegeben. - Der
ndk-stack
-Stack für windows-x64_64-Ziele wurde korrigiert, sodass er nicht mehr fälschlicherweise eine Framezeile mit einer Zeile imstack:
-Abschnitt abgleicht, diepc
,eip
oderip
nicht enthält. Beispiel:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Der Fehler bei gabi++ wurde behoben, sodass:
- malloc() wird nicht verwendet, um C++-Thread-lokale Objekte zuzuweisen.
- Verhindert Deadlocks in gabi++ in Fällen, in denen libc.debug.malloc in Userdebug-/Eng-Android-Plattform-Builds ungleich null ist.
- Korrekturen für Header:
- Sonstige Änderungen:
-
LOCAL_EXPORT_LDFLAGS
wurde hinzugefügt.- Die Einstellung
NDK_PROJECT_PATH=null
wurde für die Verwendung in einem integrierten Build-System eingeführt, in dem Optionen explizit anndk-build
übergeben werden. Mit dieser Einstellung versuchtndk-build
nicht, nachNDK_PROJECT_PATH.
zu suchen. Außerdem wird verhindert, dass Variablen Standardeinstellungen aus NDK_PROJECT_PATH ableiten. Daher müssen die folgenden Variablen jetzt explizit angegeben werden (mit ihren Standardwerten, falls vorhanden):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(optional, Standardwert ist 0) und andereAPP_*
-Variablen, die inApplication.mk
enthalten sind. APP_ABI
kann jetzt in einer durch Kommas getrennten Liste aufgeführt werden. Beispiel:APP_ABI := "armeabi,armeabi-v7a"
- Es ist jetzt möglich, die gesamte STL mit Debugging-Informationen in einem optionalen, separaten Paket namens
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
neu zu erstellen. Dazu muss die Option-g
verwendet werden. Diese Option hilft demndk-stack
-Script, einen besseren Stack-Dump für die STL zu erstellen. Diese Änderung sollte sich nicht auf den Code/die Größe der endgültigen, bereinigten Datei auswirken. - Erweiterte
hello-jni
-Stichproben zum Melden vonAPP_ABI
bei der Kompilierung. - Das Tool
ar
wurde im deterministischen Modus (Option-D
) verwendet, um statische Bibliotheken zu erstellen. (Problem 60705)
Android NDK r9b (Oktober 2013)
- Wichtige Änderungen:
-
- Aktualisierte
include/android/*h
undmath.h
für alle Android-API-Levels bis 18, einschließlich der Levels 13, 15, 16 und 17. Informationen zu hinzugefügten APIs finden Sie in den Commit-Nachrichten für Änderungen 68012 und 68014. (Probleme 47150, 58528 und 38423) - Unterstützung für Android-API-Level 19 wurde hinzugefügt, einschließlich Renderscript-Bindung.
- Unterstützung für
-mhard-float
im vorhandenen armeabi-v7a-ABI hinzugefügt. Weitere Informationen und aktuelle Einschränkungen für Clang finden Sie untertests/device/hard-float/jni/Android.mk
. - Von GNU Compiler Collection (GCC) 4.8 zu 4.8.2 migriert und Unterstützung für Diagnosefarben hinzugefügt. Um Diagnosefarben zu aktivieren, legen Sie
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
oder exportieren SieGCC_COLORS
wie unten dargestellt: Weitere Informationen finden Sie unter GCC Language Independent Options.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- Es wurden zwei neue Beispiele hinzugefügt, um OpenGL ES 3.0-Funktionen zu demonstrieren: „Teapot“ und „MoreTeapots“. Diese Beispiele werden auf Geräten mit Android 4.1 (API-Level 16) und höher ausgeführt.
- Die Unterstützung für GCC 4.7 und Clang 3.2 wurde eingestellt und wird im nächsten Release entfernt.
- Aktualisierte
- Wichtige Fehlerkorrekturen:
-
- Ein Problem mit ARM GCC 4.6
thumb2
wurde behoben, bei dem keine 16‑Bit-Tabellen mit relativen Sprüngen generiert wurden. (GCC-Problem) - Der interne Compilerfehler (ICE) von GCC 4.8 auf
g++.dg/cpp0x/lambda/lambda-defarg3.C
wurde behoben. (Änderung 62770, GCC-Problem) - Es wurde ein Problem behoben, durch das 32-Bit-
*-gdb.exe
-Ausführungsdateien unter Windows nicht gestartet werden konnten. (Problem 58975) - Ein ICE-Problem in GCC 4.8 beim Erstellen der Bullet-Bibliothek wurde behoben. Die Fehlermeldung lautet:
(Problem 58916, GCC-Problem)internal compiler error: verify_flow_info failed
- Der GDB-/ARM-Build wurde so geändert, dass
ARM.exidx
-Daten für das Unwinding im Prologcode übersprungen werden. Außerdem wurde ein Befehl (set arm exidx-unwinding
) zum Steuern des exidx-basierten Stack-Unwinding hinzugefügt. (Problem 55826) - Ein Problem mit dem Clang 3.3-MIPS-Compiler wurde behoben, bei dem die HI- und LO-Register fälschlicherweise wiederverwendet wurden.
- Ein Problem mit MIPS 4.7 ICE in
dbx_reg_number
wurde behoben. Die Fehlermeldung lautet: (GCC-Patch)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Ein Problem mit ARM GCC 4.6
- Weitere Fehlerkorrekturen:
-
- Header-Korrekturen
- Die ARM-Versionen von
WCHAR_MIN
undWCHAR_MAX
sind jetzt gemäß Spezifikation nicht signiert (die X86-/MIPS-Versionen sind signiert). Definieren Sie_WCHAR_IS_ALWAYS_SIGNED
, um das alte Verhalten wiederherzustellen. (Problem 57749) include/netinet/tcp.h
wurde korrigiert, um die Status-EnumTCP_INFO
zu enthalten. (Problem 38881)- Das Makro
cdefs_elh.h
_C_LABEL_STRING
wurde korrigiert, damit bei Verwendung des c++11-Modus keine Warnungen in der GCC 4.8-Toolchain mehr generiert werden. (Problem 58135, Problem 58652) - Die nicht vorhandenen Funktionen
imaxabs
undimaxdiv
wurden aus dem Headerinttypes.h
entfernt. - Ein Problem mit
pthread_exit()
-Rückgabewerten undpthread_self()
wurde behoben. (Problem 60686) - Die fehlende Funktion
mkdtemp()
wurde hinzugefügt. Sie ist bereits im Headerbionic
stdlib.h
vorhanden.
- Die ARM-Versionen von
- Das Problem beim Erstellen von
samples/gles3jni
mit Clang auf Android-API-Ebene 11 wurde behoben. - Der MCLinker wurde korrigiert, sodass mehrere Vorkommen der folgenden Optionen möglich sind:
-gc-sections
und--eh-frame-hdr
. - MCLinker wurde korrigiert, um die Option
--no-warn-mismatch
zu akzeptieren. - Die Option
cpu-features
wurde so geändert, dass nicht davon ausgegangen wird, dass alle VFPv4-Geräte IDIV unterstützen. Mit dieser Option wird IDIV jetzt nur noch Geräten auf der Whitelist, einschließlich Nexus 4, hinzugefügt. (Problem 57637) - Ein Problem wurde behoben, bei dem
android_native_app_glue.c
fälschlicherweise Fehler bei Ereignis-Predispatch-Vorgängen protokolliert hat. - Alle Vorgänge für
gabi++
terminate und unexpected_handler sind jetzt threadsicher. - Es wurden mehrere Probleme mit der Clang-Option
-integrated-as
behoben, damit sie die Tests fürssax-instructions
undfenv
bestehen kann. - Der GCC-Compiler 4.6/4.7/4.8 wurde korrigiert, sodass die Linker-Option
--eh-frame-hdr
auch für statische ausführbare Dateien übergeben wird. Weitere Informationen finden Sie unter GCC-Patch. - Ein zusätzliches Apostroph in
CPU-ARCH-ABIS.html
wurde entfernt. Weitere Informationen finden Sie unterNDK-DEPENDS.html
. (Problem 60142) - Es wurden zusätzliche Anführungszeichen in der ndk-build-Ausgabe unter Windows behoben. (Problem 60649)
- Clang 3.3 wurde korrigiert, um die integrierten atomaren Operationen von ARM wie
__atomic_fetch_add
,__atomic_fetch_sub
und__atomic_fetch_or
zu kompilieren. - Der interne Compilerfehler (ICE) von Clang 3.3 bei Verwendung von benutzerdefiniertem
vfprintf
wurde behoben. (Clang-Problem)
- Header-Korrekturen
- Sonstige Änderungen:
-
- OpenMP für alle GCC-Builds aktiviert. Fügen Sie die folgenden Flags zu Ihren Buildeinstellungen hinzu, um dieses Feature zu verwenden:
Codebeispiele finden Sie unterLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
. - Die Größe von
ld.mcld
wurde deutlich reduziert (1,5 MB im Vergleich zuld.bfd
mit 3,5 MB undld.gold
mit 7,5 MB), was zu einer Geschwindigkeitssteigerung von etwa 20 % führte. LOCAL_CONLYFLAGS
undAPP_CONLYFLAGS
wurden hinzugefügt, um Optionen anzugeben, die nur für C, nicht aber für C++ gelten. Die vorhandenenLOCAL_CFLAGS
undAPP_CFLAGS
werden auch für die C++-Kompilierung verwendet (um zu vermeiden, dass die meisten Optionen zweimal angegeben werden müssen). Daher können Optionen wie-std=gnu99
in g++-Builds mit einer Warnung und in clang++-Builds mit einem Fehler fehlschlagen.- Es wurden
gabi++
-Array-Hilfsfunktionen hinzugefügt. - GCC-Builds wurden so geändert, dass alle
libgcc.a
-Dateien mit-funwind-tables
erstellt werden, damit der Stack über zuvor blockierte Punkte wie__aeabi_idiv0
hinaus abgewickelt werden kann. - Unterstützung für Ingenic MXU in MIPS GCC4.6/4.7/4.8 mit der neuen Option
-mmxu
hinzugefügt. - Erweiterte MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
zur Steuerung von ldxc1/sdxc1 - „Crazy Linker“ hinzugefügt. Weitere Informationen finden Sie unter
sources/android/crazy_linker/README.TXT
. - Die Funktion
bitmap-plasma
zeichnet jetzt auf dem gesamten Bildschirm statt in einem Bereich von 200 × 200 Pixeln. - Die Größe der Toolchains für Linux und Darwin wurde um 25% reduziert, indem Symlinks zu identischen Dateien erstellt wurden.
- OpenMP für alle GCC-Builds aktiviert. Fügen Sie die folgenden Flags zu Ihren Buildeinstellungen hinzu, um dieses Feature zu verwenden:
Android NDK r9 (Juli 2013)
- Wichtige Änderungen:
-
- Unterstützung für Android 4.3 (API-Level 18) hinzugefügt. Weitere Informationen finden Sie unter
STABLE-APIS.html
und in den neuen Codebeispielen insamples/gles3jni/README
. - Es wurden Header und Bibliotheken für OpenGL ES 3.0 hinzugefügt, das von Android 4.3 (API-Level 18) und höher unterstützt wird.
- Der NDK wurde um den GCC 4.8-Compiler (GNU Compiler Collection) erweitert. Da GCC 4.6 weiterhin die Standardeinstellung ist, müssen Sie diese Option explizit aktivieren:
- Exportieren Sie für
ndk-build
-BuildsNDK_TOOLCHAIN_VERSION=4.8
oder fügen Sie sie inApplication.mk
hinzu. - Verwenden Sie für eigenständige Builds die Option
--toolchain=
inmake-standalone-toolchain.sh
, z. B.:
--toolchain=arm-linux-androideabi-4.8
Hinweis:Die Option
-Wunused-local-typedefs
wird durch-Wall
aktiviert. Fügen Sie__attribute__((unused))
hinzu, wenn Sie Compile-Time-Asserts wiesources/cxx-stl/stlport/stlport/stl/config/features.h
(Zeile 311) verwenden. Weitere Informationen finden Sie unter Änderung 55460.Hinweis:In GCC 4.7 und höher generieren ARM-Compiler standardmäßig Code für nicht ausgerichteten Zugriff für ARMv6- und höhere Build-Ziele. Möglicherweise müssen Sie die Build-Option
-mno-unaligned-access
hinzufügen, wenn Sie für Kernel erstellen, die diese Funktion nicht unterstützen. - Exportieren Sie für
- Unterstützung für Clang 3.3 hinzugefügt. Für die
NDK_TOOLCHAIN_VERSION=clang
-Build-Option wird jetzt standardmäßig Clang 3.3 verwendet.Hinweis:Sowohl GCC 4.4.3 als auch Clang 3.1 sind veraltet und werden in der nächsten NDK-Version entfernt.
- Der GNU Project Debugger (GDB) wurde aktualisiert, um Python 2.7.5 zu unterstützen.
- MCLinker wurde hinzugefügt, um Windows-Hosts zu unterstützen. Da
ld.gold
standardmäßig verwendet wird, sofern verfügbar, müssen Sie-fuse-ld=mcld
inLOCAL_LDFLAGS
oderAPP_LDFLAGS
hinzufügen, um MCLinker zu aktivieren. - Das Tool
ndk-depends
wurde hinzugefügt, mit dem ELF-Bibliotheksabhängigkeiten ausgegeben werden. Weitere Informationen finden Sie unterNDK-DEPENDS.html
. (Problem 53486)
- Unterstützung für Android 4.3 (API-Level 18) hinzugefügt. Weitere Informationen finden Sie unter
- Wichtige Fehlerkorrekturen:
-
- Ein potenzielles Problem bei der Ereignisverarbeitung in
android_native_app_glue
wurde behoben. (Problem 41755) - Der ARM/GCC-4.7-Build wurde korrigiert, um eine ausreichende Ausrichtung für die NEON-Lade- und Speicheranweisungen VST und VLD zu generieren. (GCC-Problem 57271)
- Ein interner Compilerfehler (ICE) in GCC 4.4.3/4.6/4.7 wurde behoben, der bei einem konstanten negativen Indexwert für ein Stringliteral auftrat. (Problem 54623)
- Der GCC 4.7-Segmentierungsfehler bei der Initialisierung von Konstanten mit einer Objektadresse wurde behoben. (Problem 56508)
- Der GCC 4.6-ARM-Segmentierungsfehler für
-O
-Werte bei Verwendung von Boost 1.52.0 wurde behoben. (Problem 42891) - Die Funktionen
libc.so
undlibc.a
wurden korrigiert, um die Funktionwait4()
zu unterstützen. (Problem 19854) - Die x86-Dateien „libc.so“ und „libc.a“ wurden aktualisiert, um die Funktion
clone()
zu enthalten. - Es wurde ein Fehler in
LOCAL_SHORT_COMMANDS
behoben, bei dem die Dateilinker.list
leer war oder nicht verwendet wurde. - Der GCC-MIPS-Build unter Mac OS wurde so korrigiert, dass CFI-Direktiven verwendet werden. Ohne diese Direktiven schlägt
ld.mcld --eh-frame-hdr
häufig fehl. - Der interne Compilerfehler von Clang 3.2 für X86/MIPS in
llvm/lib/VMCore/Value.cpp
wurde behoben. (Änderung 59021) - Der Absturz des GCC 4.7 64-Bit-Windows-Assemblers wurde behoben. (Fehler:
out of memory allocating 4294967280 bytes
). - Das
ndk-gdb
-Skript wurde aktualisiert, sodass die Aktionen--start
oder--launch
jetzt auf den GNU Debug Server warten. Dadurch können Breakpoints, die früh im Ausführungspfad festgelegt wurden (z. B. Breakpoints im JNI-Code), zuverlässiger erreicht werden. (Problem 41278)Hinweis:Für diese Funktion ist jdb erforderlich und es wird eine Warnung zu ausstehenden Haltepunkten ausgegeben. Geben Sie die Option
--nowait
an, um das vorherige Verhalten wiederherzustellen. - Ein GDB-Absturz wurde behoben, der auftrat, wenn die Bibliotheksliste leer war.
- Es wurde ein GDB-Absturz behoben, der auftrat, wenn ein
stepi
-Befehl nach einerbx pc
- oderblx pc
-Thumb-Anweisung verwendet wurde. (Problem 56962, Problem 36149) - MIPS-Fehler
gdbserver
behoben: Es wird jetzt nachDT_MIPS_RLD_MAP
statt nachDT_DEBUG
gesucht. (Problem 56586) - Es wurde eine zirkuläre Abhängigkeit im ndk-build-Skript behoben. Beispiel: Wenn A->B und B->B, wurde B aus dem Build entfernt. (Problem 56690)
- Ein potenzielles Problem bei der Ereignisverarbeitung in
- Weitere Fehlerkorrekturen:
-
- Das
ndk-build
-Skript wurde korrigiert, sodass Sie eine Version von Clang als Befehlszeilenoption angeben können (z.B.NDK_TOOLCHAIN_VERSION=clang3.2
). Bisher konnte die Version nur als Umgebungsvariable angegeben werden. - Die Größe von gabi++ wurde für MIPS-Build-Ziele auf 24 festgelegt, wenn der Clang-Compiler verwendet wird.
_Unwind_Exception
(Änderung 54141) - Das
ndk-build
-Script wurde korrigiert, um sicherzustellen, dass erstellte Bibliotheken tatsächlich aus Projekten entfernt werden, die vorgefertigte statische Bibliotheken enthalten, wenn der Befehlndk-build clean
verwendet wird. (Änderung 54461, Änderung 54480) - Die Option
NDK_ANALYZE=1
wurde so geändert, dass sie weniger ausführlich ist. - Der Fehler wurde behoben, sodass
gnu-libstdc++/Android.mk
jetzt einenbackward/
-Pfad für Builds enthält, die Abwärtskompatibilität verwenden. (Problem 53404) - Ein Problem wurde behoben, bei dem
stlport new
manchmal zufällige Werte zurückgegeben hat. ndk-gdb
wurde so korrigiert, dass es der Reihenfolge vonCPU_ABIS
entspricht, nichtAPP_ABIS
. (Problem 54033)- Ein Problem wurde behoben, bei dem beim NDK-64-Bit-Build unter MacOSX der falsche Pfad für den Compiler ausgewählt wurde. (Problem 53769)
- Die Build-Skripts wurden korrigiert, um 64-Bit-Versionen von Windows Vista zu erkennen. (Problem 54485)
- Der x86-Fehler
ntonl/swap32
wurde behoben:invalid 'asm': operand number out of range
. (Problem 54465, Änderung 57242) - Der Fehler
ld.gold
zum Zusammenführen von Stringliteralen wurde behoben. - Das Problem mit
ld.gold
wurde behoben, sodass jetzt auch große Symbole richtig ausgerichtet werden. ld.gold
wurde aktualisiert, um die Option--sort-section=name
zu aktivieren.- In GCC 4.4.3/4.6/4.7 wird die Option
-export-dynamic
für statisch verknüpfte Programme nicht mehr angezeigt. In GCC wird für statisch verknüpfte Programme kein.interp
-Abschnitt mehr hinzugefügt. - Der GCC 4.4.3-Kompilierungsfehler
stlport
bezüglich inkonsistentertypedef
von_Unwind_Control_Block
wurde behoben. (Problem 54426) - Die
awk
-Scripts wurden so korrigiert, dass sieAndroidManifest.xml
-Dateien verarbeiten können, die unter Windows erstellt wurden und möglicherweise nachgestellte\r
-Zeichen enthalten, die Build-Fehler verursachen. (Problem 42548) - Es wurde ein Fehler behoben, der dazu führte, dass
make-standalone-toolchain.sh
das Verzeichnisprebuilts/
durchsuchte, um zu ermitteln, ob der Host 32-Bit oder 64-Bit ist. - Die Clang 3.2-Option
-integrated-as
wurde korrigiert. - Die Handlerdaten für das kompakte Clang 3.2-ARM-EHABI-Modell
pr1
undpr2
wurden korrigiert. - Die Clang-Option
-mllvm -arm-enable-ehabi
wurde hinzugefügt, um den folgenden Clang-Fehler zu beheben:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Ein Build-Fehler wurde behoben, der auftrat, wenn im Anwendungsmanifest kein
uses-sdk
-Element vorhanden war. (Problem 57015)
- Das
- Sonstige Änderungen:
-
- Headerkorrekturen
- Geänderte Header, um
__set_errno
zu einer Inlinefunktion zu machen, da__set_errno
inerrno.h
eingestellt ist undlibc.so
sie nicht mehr exportiert. elf.h
wurde geändert, umstdint.h
aufzunehmen. (Problem 55443)- Der Header
sys/un.h
wird jetzt unabhängig von anderen Headern eingefügt. (Problem 53646) - Alle APIs der
MotionEvent_getHistorical
-Familie wurden so angepasst, dass sieconst AInputEvent* motion_event
berücksichtigen. (Problem 55873) - Die Anzahl der
malloc_usable_size
wurde aufconst void*
festgelegt. (Problem 55725) - Die Datei „stdint.h“ wurde so angepasst, dass sie besser mit C99 kompatibel ist. (Änderung 46821)
wchar.h
wurde so geändert, dassWCHAR_MAX
undWCHAR_MIN
nicht neu definiert werden.- Die
<inttypes.h>
-Deklaration für die zeigerbezogenen MakrosPRI
undSCN
wurde korrigiert. (Problem 57218) - Der Header
sys/cdefs.h
wurde so geändert, dass__WCHAR_TYPE__
für API-Levels unter 9 32-Bit ist. Das bedeutet, dasswchat_t
für alle API-Levels 32-Bit ist. Wenn Sie das vorherige Verhalten wiederherstellen möchten, definieren Sie die boolesche Variable_WCHAR_IS_8BIT
. (Problem 57267)
- Geänderte Header, um
- In NDK
docs/
wurde die Formatierung verbessert und es wurden verschiedene Dokumentationsfehler behoben. - Unterstützung für eine Thin-Archive-Technik beim Erstellen statischer Bibliotheken hinzugefügt. (Problem 40303)
- Das Skript
make-standalone-toolchain.sh
wurde aktualisiert und unterstützt jetzt nebengnustl
auch die Bibliothekstlport
, wenn Sie die Option--stl=stlport
angeben. Weitere Informationen finden Sie unterSTANDALONE-TOOLCHAIN.html
. - Das
make-standalone-toolchain.sh
-Script wurde aktualisiert, sodass mit der Option--llvm-version=
zusätzlich zuclang
undclang++
auch die Scripts$TOOLCHAIN_PREFIX-clang
und$TOOLCHAIN_PREFIX-clang++
erstellt werden, um zu vermeiden, dass versehentlich die clang- und clang++-Definitionen des Hosts verwendet werden. - Es wurden zwei Flags hinzugefügt, um zwei Optimierungen im Upstream-Clang wieder zu aktivieren, die im NDK deaktiviert sind, um eine bessere Kompatibilität mit von GCC kompiliertem Code zu erzielen:
- Das Flag
-fcxx-missing-return-semantics
wurde hinzugefügt, um die Semantik für fehlende Rückgaben in Clang 3.2 und höher wieder zu aktivieren. Normalerweise sollten alle Pfade mit einer return-Anweisung für eine Funktion, die einen Wert zurückgibt, enden. Ist dies nicht der Fall, fügt clang eine undefinierte Anweisung (oder einen Trap im Debugmodus) in den Pfad ohne return-Anweisung ein. Wenn Sie sicher sind, dass Ihr Code korrekt ist, können Sie mit diesem Flag dem Optimierer erlauben, das undefinierte Verhalten zu nutzen. Wenn Sie sich nicht sicher sind, verwenden Sie dieses Flag nicht. Der Anrufer erhält möglicherweise weiterhin einen zufälligen falschen Wert, der Optimierer nutzt ihn jedoch nicht und erschwert so nicht das Debuggen Ihres Codes. - Das Flag
-fglobal-ctor-const-promotion
wurde hinzugefügt, um das Hochstufen globaler Variablen mit statischem Konstruktor zu Konstanten wieder zu aktivieren. Mit diesem Flag versucht der globale Variablenoptimierungsdurchlauf von LLVM, die globalen Variablen mit statischen Konstruktoren auszuwerten und zu globalen Konstanten zu befördern. Diese Optimierung ist zwar korrekt, kann aber zu Inkompatibilitäten mit Code führen, der mit GCC kompiliert wurde. Beispielsweise kann Codeconst_cast
ausführen, um die Konstante in eine veränderliche Variable umzuwandeln und sie zu ändern. In GCC ist die Variable im Lese-/Schreibmodus und der Code wird versehentlich ausgeführt. In Clang befindet sich die const-Variable im schreibgeschützten Speicher, was dazu führen kann, dass Ihre Anwendung abstürzt.
- Das Flag
-mldc1-sdc1
wurde den MIPS-GCC- und Clang-Compilern hinzugefügt. Standardmäßig richten Compiler 8‑Byte-Objekte richtig aus und geben die Anweisungenldc1
undsdc1
aus, um sie zu verschieben. Wenn Ihre App einen benutzerdefinierten Zuweisungsmechanismus verwendet, der nicht immer mit der 8-Byte-Grenze eines neuen Objekts übereinstimmt, wie es beim Standardzuweisungsmechanismus der Fall ist, kann es zu einem Absturz der App kommen, weilldc1
- undsdc1
-Vorgänge auf nicht ausgerichteten Speicher ausgeführt werden. Verwenden Sie in diesem Fall das Flag-mno-ldc1-sdc1
, um das Problem zu umgehen.- Der Schweregrad des Ereignisses wurde von „Warnung“ auf „Information“ herabgestuft, wenn
APP_PLATFORM_LEVEL
größer alsAPP_MIN_PLATFORM_LEVEL
ist. DerAPP_PLATFORM_LEVEL
kann injni/Application.mk
niedriger alsAPP_PLATFORM
sein, da das NDK nicht für alle Ebenen Header hat. In diesem Fall wird die tatsächliche Ebene nach unten verschoben. DerAPP_MIN_PLATFORM_LEVEL
wird durch denandroid:minSdkVersion
im Manifest Ihrer Anwendung angegeben. (Problem 39752) - Die Methoden
android_getCpuIdArm()
undandroid_setCpuArm()
wurdencpu-features.c
hinzugefügt. Diese Ergänzung ermöglicht einen einfacheren Abruf der ARM CPUID-Informationen. (Problem 53689) ndk-build
wurde so geändert, dassas/ld
von GCC 4.7 für die Clang-Kompilierung verwendet wird.Hinweis:In GCC 4.7 wurden
monotonic_clock
undis_monotonic
insteady_clock
bzw.is_steady
umbenannt.- Dem
ndk-build
-Skript wurden die folgenden neuen Warnungen hinzugefügt:- Es wurden Warnungen hinzugefügt, wenn
LOCAL_LDLIBS/LDFLAGS
in Modulen für statische Bibliotheken verwendet werden. - Es wurde eine Warnung hinzugefügt, wenn für eine Konfiguration kein Modul erstellt werden kann.
- Es wurde eine Warnung für die Verwendung von Nicht-Systembibliotheken in
LOCAL_LDLIBS/LDFLAGS
einer gemeinsam genutzten Bibliothek oder ausführbaren Modulen hinzugefügt.
- Es wurden Warnungen hinzugefügt, wenn
- Die Build-Skripts wurden aktualisiert. Wenn
APP_MODULES
nicht definiert ist und nur statische Bibliotheken inAndroid.mk
aufgeführt sind, werden alle Bibliotheken vom Skript erzwungen. (Problem 53502) ndk-build
wurde aktualisiert, um absolute Pfade inLOCAL_SRC_FILES
zu unterstützen.- Die ausführbaren Dateien
*-gdbtui
wurden entfernt, da sie Duplikate der ausführbaren Dateien*-gdb
mit aktivierter Option-tui
sind. - Die Build-Skripts wurden aktualisiert, um Sie zu warnen, wenn das EDG-Compiler-Frontend (Edison Design Group)
_STLP_HAS_INCLUDE_NEXT
wieder aktiviert. (Problem 53646) - Die Umgebungsvariable
NDK_LIBS_OUT
wurde hinzugefügt, damit der Pfad fürlibraries/gdbserver
vom Standardpfad$PROJECT/libs
überschrieben werden kann. Weitere Informationen finden Sie unterOVERVIEW.html
. - Die Standardeinstellungen für das ndk-build-Script wurden geändert, um Code mit Formatstring-Schutz zu kompilieren
-Wformat -Werror=format-security
. Sie könnenLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
festlegen, um sie zu deaktivieren. Weitere Informationen finden Sie unterANDROID-MK.html
. - Unterstützung für die formatierte Ausgabe von STL in
ndk-gdb-py
hinzugefügt. Weitere Informationen finden Sie unterNDK-GDB.html
. - Es wurden Tests basierend auf den googletest-Frameworks hinzugefügt.
- Dem Toolchain-Build-Script wurde eine Benachrichtigung hinzugefügt, die Sie warnt, wenn die aktuelle Shell nicht
bash
ist.
- Headerkorrekturen
Android NDK r8e (März 2013)
- Wichtige Änderungen:
-
- Es wurde ein 64‑Bit-Host-Toolchain-Set hinzugefügt (Paketnamensuffix
*-x86_64.*
). Weitere Informationen finden Sie unterCHANGES.HTML
undNDK-BUILD.html
. - Clang 3.2-Compiler hinzugefügt. GCC 4.6 ist weiterhin die Standardversion. Informationen zur Verwendung des Clang-Compilers finden Sie unter
CHANGES.HTML
. - Es wurde ein statischer Code-Analyzer für Linux-/MacOSX-Hosts hinzugefügt. Informationen zur Verwendung des Analysetools finden Sie unter
CHANGES.HTML
. - MCLinker für Linux-/MacOSX-Hosts wurde als experimentelle Funktion hinzugefügt. Der
ld.gold
-Linker ist standardmäßig aktiviert, sofern verfügbar. Sie müssen ihn also explizit aktivieren. Weitere Informationen finden Sie unterCHANGES.HTML
. - „ndk-build“ wurde aktualisiert, um für Modulabhängigkeiten eine topologische Sortierung zu verwenden. Das bedeutet, dass die Reihenfolge der in
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
undLOCAL_SHARED_LIBRARIES
angegebenen Bibliotheken automatisch sortiert wird. Weitere Informationen finden Sie unterCHANGES.HTML
. (Problem 39378)
- Es wurde ein 64‑Bit-Host-Toolchain-Set hinzugefügt (Paketnamensuffix
- Wichtige Fehlerkorrekturen:
-
- Das Build-Skript wurde korrigiert, sodass alle Toolchains in
-O2
erstellt werden. Toolchains in früheren Releases wurden fälschlicherweise ohne Optimierung erstellt. - Das Build-Skript wurde korrigiert, sodass Clang/llvm für MacOSX nicht mehr bedingungslos in 64-Bit erstellt wird.
- Interner Compilerfehler in GCC 4.6/4.7 behoben:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Problem 52732) - Es wurde ein Build-Problem behoben, bei dem GCC/ARM 4.6/4.7 den Code mit 64-Bit-Atom-Built-in-Funktionen nicht verknüpfen konnte. (Problem 41297)
- Es wurden Fehler behoben, die durch eine falsche Verwendung von DIV im Linker von GCC 4.7 verursacht wurden. (Sourceware-Problem)
- Der interne Compilerfehler
build_data_member_initialization, at cp/semantics.c:5790
in GCC 4.7 wurde behoben. - Der interne Compilerfehler
redirect_eh_edge_1, at tree-eh.c:2214
in GCC 4.7 wurde behoben. (Problem 52909) - Ein GCC 4.7-Segfault wurde behoben. (GCC-Problem)
- Die
<chrono>
-Taktauflösung wurde korrigiert undsteady_clock
wurde aktiviert. (Problem 39680) - Die Toolchain wurde korrigiert, um
_GLIBCXX_HAS_GTHREADS
für GCC 4.7 libstdc++ zu aktivieren. (Problem 41770, Problem 41859) - Das Problem, dass der X86-MXX/SSE-Code aufgrund fehlender
posix_memalign
nicht verknüpft werden konnte, wurde behoben. (Änderung 51872) - Der GCC4.7/X86-Segmentierungsfehler in
i386.c
, Funktiondistance_non_agu_define_in_bb()
, wurde behoben. (Änderung 50383) - GCC4.7/X86 wurde korrigiert, um das frühere
cmov
-Verhalten wiederherzustellen. (GCC-Problem) - Die Verarbeitung des NULL-Rückgabewerts von
setlocale()
in libstdc++/GCC4.7 wurde korrigiert. (Problem 46718) - Es wurde ein Fehler behoben, bei dem zur Laufzeit von
ld.gold
eine undefinierte Referenz zu__exidx_start
und__exidx_start_end
vorlag. (Änderung 52134) - Ein interner Compilerfehler von Clang 3.1 bei Verwendung der Eigen-Bibliothek wurde behoben. (Problem 41246)
- Ein interner Compilerfehler in Clang 3.1 wurde behoben, der
<chrono>
im C++11-Modus betraf. (Problem 39600) - Ein interner Compilerfehler von Clang 3.1 beim Generieren von Objektcode für einen Methodenaufruf an eine einheitlich initialisierte
rvalue
wurde behoben. (Problem 41387) - Das Problem mit der Neuausrichtung des Clang 3.1/X86-Stacks wurde behoben. (Änderung 52154)
- Das Problem mit dem GNU Debugger (GDB) SIGILL beim Debuggen auf Android 4.1.2 wurde behoben. (Problem 40941)
- Ein Problem wurde behoben, durch das GDB keine
source:line
-Breakpoints festlegen konnte, wenn Symbole lange, indirekte Dateipfade enthielten. (Problem 42448) - GDB
read_program_header
für MIPS PIE-Ausführungsdateien wurde korrigiert. (Änderung 49592) - Der Segmentierungsfehler
STLport
inuncaught_exception()
wurde behoben. (Änderung 50236) - Der Busfehler
STLport
in der Ausnahmebehandlung wurde behoben. Er wurde durch den nicht ausgerichteten Zugriff aufDW_EH_PE_udata2
,DW_EH_PE_udata4
undDW_EH_PE_udata8
verursacht. - Das Problem der Endlosschleife in Gabi++ mit dem Operator
nothrow new[]
wurde behoben. (Problem 52833) - Der falsche Offset für den Zeiger des Ausnahme-Handlers in Gabi++ wurde korrigiert. (Änderung 53446)
- Das redundante „Gabi++“ wurde aus dem Ausnahmeobjekt entfernt. (Änderung 53447)
- Das Build-Skript wurde korrigiert, sodass alle Toolchains in
- Weitere Fehlerkorrekturen:
-
- Feste NDK-Header:
- Redundante Definitionen von
size_t
,ssize_t
undptrdiff_t
wurden entfernt. - Der
fenv.h
-Header für MIPS und ARM wurde korrigiert. stddef.h
wurde korrigiert, damitoffsetof
nicht neu definiert wird, da es bereits in der Toolchain vorhanden ist.elf.h
enthält jetztElf32_auxv_t
undElf64_auxv_t
. (Problem 38441)- Die
#ifdef
-C++-Definitionen in der Header-DateiOpenSLES_AndroidConfiguration.h
wurden korrigiert. (Problem 53163)
- Redundante Definitionen von
STLport
wird jetzt nach einem Fehler aufgrund von unzureichendem Arbeitsspeicher abgebrochen, anstatt ohne Fehlermeldung beendet zu werden.- System- und Gabi++-Header wurden korrigiert, damit die Kompilierung mit API-Level 8 und niedriger möglich ist.
- Das Problem mit
cpufeatures
wurde behoben, sodass/proc/self/auxv
nicht geparst wird. (Problem 43055) ld.gold
wurde so korrigiert, dass es nicht von der Host-libstdc++ und auf Windows-Plattformen nicht von derlibgcc_sjlj_1.dll
-Bibliothek abhängig ist.- Clang 3.1 wurde korrigiert. Es gibt eine inkonsistente Registerliste in
.vsave
aus und führt zu einem Fehler im Assembler. (Änderung 49930) - Clang 3.1 wurde korrigiert, damit libgabi++ kompiliert und die
test-stlport
-Tests für MIPS-Build-Ziele bestanden werden können. (Änderung 51961) - Clang 3.1 wurde korrigiert, sodass Ausnahmen standardmäßig nur für C++ und nicht für C aktiviert werden.
- Es wurden mehrere Probleme in Clang 3.1 behoben, damit die meisten GNU-Ausnahmetests bestanden werden.
- Die Fehlerbehebung für die Skripts
clang
undclang++
im eigenständigen NDK-Compiler ermöglicht die Erkennung von-cc1
und die Nichtangabe von-target
, wenn-cc1
gefunden wird. - Die Beobachtung von
ndk-build
wurde aufNDK_APP_OUT
inApplication.mk
festgelegt. - Die X86-Funktionen
libc.so
undlib.a
wurden korrigiert. Sie enthielten nicht die Funktionensigsetjmp
undsiglongjmp
, die bereits insetjmp.h
deklariert waren. (Problem 19851) - GCC 4.4.3/4.6/4.7-libstdc++ wurde gepatcht, um mit Clang in C++ 11 zu funktionieren. (Clang-Problem)
- Der Cygwin-Pfad im an
HOST_AWK
übergebenen Argument wurde korrigiert. - Die Warnung zum
ndk-build
-Script unter Windows wurde behoben, wenn das Script über das JNI-Verzeichnis des Projekts ausgeführt wird. (Problem 40192) - Ein Problem wurde behoben, bei dem das
ndk-build
-Skript nicht erstellt wurde, wenn die Makefile-Datei nach derLOCAL_PATH
-Definition Leerzeichen am Ende enthielt. (Problem 42841)
- Feste NDK-Header:
- Sonstige Änderungen:
-
- Unterstützung für Threads in der GCC/MIPS-Toolchain aktiviert.
- Die aktualisierten GCC-Helfer für die Ausnahmebehandlung
__cxa_begin_cleanup
und__cxa_type_match
haben die Sichtbarkeit default anstelle der vorherigen Sichtbarkeit hidden in GNU libstdc++. Weitere Informationen finden Sie unterCHANGES.HTML
. - Die Build-Skripts wurden aktualisiert, sodass die statischen Bibliotheken von Gabi++ und STLport jetzt mit verborgener Sichtbarkeit erstellt werden, mit Ausnahme von Helfern für die Ausnahmebehandlung.
- Der Build wurde aktualisiert, sodass
STLport
für ARM im Thumb-Modus erstellt wird. - Unterstützung für
std::set_new_handler
in Gabi++ hinzugefügt. (Problem 52805) - Der
FUTEX
-Systemaufruf wurde in GNU libstdc++ aktiviert. ndk-build
wurde aktualisiert, sodass die vorkompilierte statische Bibliothek nicht mehr in dasobj/local/<abi>/
-Verzeichnis eines Projekts kopiert wird. (Problem 40302)__ARM_ARCH_5*__
wurde aus dem ARM-Scripttoolchains/*/setup.mk
entfernt. (Problem 21132)- Zusätzliche GNU libstdc++-Bibliotheken in Thumb für ARM erstellt.
- Aktivierte MIPS-Gleitkomma-
madd/msub/nmadd/nmsub/recip/rsqrt
Befehle mit 32-Bit-FPU. - Der Graphite-Loop-Optimierer wurde in GCC 4.6 und 4.7 aktiviert, um mehr Optimierungen zu ermöglichen:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
, und-ftree-loop-linear
. (Informationen) polly
für Clang 3.1 auf 32-Bit-Hosts unter Linux und Mac OS X aktiviert, um den Speicherzugriff zu analysieren und zu optimieren. (Informationen)- Aktiviert
-flto
in GCC 4.7, 4.6, Clang 3.2 und Clang 3.1 unter Linux (Clang LTO über LLVMgold.so). MIPS-Compilerziele werden nicht unterstützt, dald.gold
nicht verfügbar ist. --plugin
und--plugin-opt
fürld.gold
in GCC 4.6/4.7 aktiviert.--text-reorder
fürld.gold
in GCC 4.7 aktiviert.- GNU libstdc++ mit
_GLIBCXX_USE_C99_MATH
konfiguriert, wodurch dasisinf
-Skript im Bionic-Header undefiniert wird. Weitere Informationen finden Sie unterCHANGES.html
. APP_LDFLAGS
wurde den Build-Skripts hinzugefügt. Weitere Informationen finden Sie unterANDROID-MK.html
.- Die Build-Scripts wurden aktualisiert, damit
NDK_LOG=0
dieNDK_LOG
deaktivieren kann. - Die Build-Skripts wurden aktualisiert, damit
NDK_HOST_32BIT=0
die 32-Bit-Toolchain der Host-Entwicklungsumgebung deaktivieren kann. - Die Standard-GCC/X86-Flags
-march=
und-mtune=
wurden vonpentiumpro
undgeneric
ini686
undatom
geändert. - Erweiterte Toolchain-Build-Skripts:
- Es wurde ein Race Condition in
build-gcc.sh
für den Build-Typmingw
behoben, der eine erhebliche Menge an paralleler Build-Verarbeitung verhinderte. build-gabi++.sh
undbuild-stlport.sh
wurden aktualisiert und können jetzt über das NDK-Paket ausgeführt werden. (Problem 52835)- Das Problem mit
run-tests.sh
wurde in der Sammlung vonMSys
-Dienstprogrammen behoben. - Verbesserte 64-Bit-Host-Toolchain und Unterstützung für Canadian Cross-Builds.
- Das
build-mingw64-toolchain.sh
-Script wurde auf eine neuere Version aktualisiert. - Es wurde eine Option zum Erstellen von
libgnustl_static.a
undstlport_static.a
ohne verborgene Sichtbarkeit hinzugefügt.
- Es wurde ein Race Condition in
Android NDK r8d (Dezember 2012)
- Wichtige Änderungen:
-
- Der NDK wurde um den GCC 4.7-Compiler (GNU Compiler Collection) erweitert. Der GCC 4.6-Compiler ist weiterhin der Standardcompiler. Sie müssen die neue Version also explizit aktivieren. Gehen Sie dazu so vor:
- Exportieren Sie für
ndk-build
die VariableNDK_TOOLCHAIN_VERSION=4.7
oder fügen Sie sieApplication.mk
hinzu. - Fügen Sie für eigenständige Builds die Option
--toolchain=
zumake-standalone-toolchain.sh
hinzu, z. B.:--toolchain=arm-linux-androideabi-4.7
Hinweis:Diese Funktion ist experimentell. Bitte probieren Sie es aus und melden Sie etwaige Probleme.
- Exportieren Sie für
- Unterstützung für
stlport
-Ausnahmen über gabi++ hinzugefügt. Hinweis: Das neue gabi++ hängt vondlopen
und dem zugehörigen Code ab. Das bedeutet:- Sie können mit der Option
-static
keine statische ausführbare Datei mehr erstellen oderlibstlport_static.a
mitAPP_STL := stlport_static
einbinden. Sie können die Option-static
weiterhin mit einer eigenständigen Toolchain verwenden. Das Kompilieren einer dynamischen ausführbaren Datei mitinclude $(BUILD_EXECUTABLE)
funktioniert weiterhin, da der Compiler die Option-ldl
automatisch hinzufügt. - Wenn Ihr Projekt mit
-nostdlib
und {-Wl,--no-undefined} verknüpft wird, müssen Sie die Option-ldl
manuell einfügen.
CPLUSPLUS-SUPPORT.html
.Hinweis:Diese Funktion befindet sich in der Entwicklungsphase und funktioniert besser mit den GCC-Compilern 4.6/4.7 als mit GCC 4.4.3 oder Clang 3.1. Bitte probieren Sie es aus und melden Sie etwaige Probleme.
- Sie können mit der Option
- Für x86 wurde die Option
-mstack-protector-guard=
hinzugefügt, mit der Sie zwischen einem globalen Standardpfad, der mit der alten Android-C-Bibliothek (Bionic) kompatibel ist, und einem neuen tls-Pfad (%gs:20) für-fstack-protector
,-fstack-protector-all
und-fstack-protector-strong
mit den Compilern GCC 4.6 und höher wählen können.Hinweis:Durch die Einstellung
-mstack-protector-guard
werden keine-fstack-protector*
-Optionen aktiviert. - Die Funktion
android_setCpu()
wurdesources/android/cpufeatures/cpu-features.c
hinzugefügt, um sie zu verwenden, wenn die automatische Erkennung über/proc
unter Android 4.1 und höher nicht möglich ist. (Chromium-Problem 164154)
- Der NDK wurde um den GCC 4.7-Compiler (GNU Compiler Collection) erweitert. Der GCC 4.6-Compiler ist weiterhin der Standardcompiler. Sie müssen die neue Version also explizit aktivieren. Gehen Sie dazu so vor:
- Wichtige Fehlerkorrekturen:
-
- Es wurde ein Problem behoben, bei dem Objektdateien bei Verwendung des Skripts
ndk-build
unnötig neu erstellt wurden. (Problem 39810) - Ein Linker-Fehler mit dem NDK 8c-Release für Mac OS X 10.6.x wurde behoben, der den folgenden Fehler verursacht hat:
Dieses Problem wurde durch die Erstellung unter Mac OS X 10.7 verursacht. Dadurch wurden Binärdateien erstellt, die nicht mit Mac OS 10.6.x und dem NDK kompatibel waren.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Die Optionen
-x c++
wurden aus dem eigenständigen Clang++-Build-Skript entfernt. (Problem 39089) - Es wurden Probleme mit der Option
NDK_TOOLCHAIN_VERSION=clang3.1
in Cygwin behoben. (Problem 39585) - Das
make-standalone-toolchain.sh
-Script wurde korrigiert, sodass eine eigenständige Toolchain mit den Umgebungen Cygwin oder MinGW generiert werden kann. Die resultierende Toolchain kann in Cygwin-, MingGW- oder CMD.exe-Umgebungen verwendet werden. (Problem 39915, Problem 39585) - Die fehlende Option
SL_IID_ANDROIDBUFFERQUEUESOURCE
wurde in Android 14-Builds für ARM und X86 hinzugefügt. (Problem 40625) - Die Erkennung von x86-CPUs für die Funktion
ANDROID_CPU_X86_FEATURE_MOVBE
wurde korrigiert. (Problem 39317) - Ein Problem wurde behoben, das verhinderte, dass die Standard Template Library (STL) C++-Quellen ohne die Dateiendung
.cpp
verwendet. - Der interne Compilerfehler GCC 4.6 für ARM at reload1.c:1061 wurde behoben. (Problem 20862)
- Der interne GCC 4.4.3-ARM-Compilerfehler at emit-rtl.c:1954 wurde behoben. (Problem 22336)
- Der interne GCC 4.4.3-ARM-Compilerfehler at postreload.c:396 wurde behoben. (Problem 22345)
- Das Problem, dass Lambda-Funktionen in GCC 4.6/4.7 übersprungen wurden, wurde behoben. (Problem 35933)
- Es wurde ein Problem behoben, bei dem Objektdateien bei Verwendung des Skripts
- Weitere Fehlerkorrekturen:
-
- Korrekturen an NDK-Headerdateien:
__WINT_TYPE__
undwint_t
haben jetzt denselben Typ.- Tippfehler in
android/bitmap.h
wurde korrigiert. (Problem 15134) - Tippfehler in
errno.h
wurde korrigiert. - Es wurde eine Prüfung auf das Vorhandensein von
__STDC_VERSION__
insys/cdefs.h
hinzugefügt. (Problem 14627) - Die Überschriften in
byteswap.h
unddirent.h
wurden neu organisiert. limits.h
wurde korrigiert, umpage.h
einzuschließen, dasPAGE_SIZE
-Einstellungen bietet. (Problem 39983)- Der Rückgabetyp von
glGetAttribLocation()
undglGetUniformLocation()
wurde vonint
inGLint
geändert. - Die Konstante
__BYTE_ORDER
für x86-Builds wurde korrigiert. (Problem 39824)
- Das
ndk-build
-Skript wurde korrigiert, sodass-Os
für ARM-Builds nicht mit-O2
überschrieben wird. - Die Build-Skripts wurden korrigiert, sodass die Einstellungen für
HOST_AWK
,HOST_SED
undHOST_MAKE
überschrieben werden können. - Es wurde ein Problem für
ld.gold
infsck_msdos
-Builds behoben, bei denen Objekte verknüpft werden, die mit dem Intel C/C++-Compiler (ICC) erstellt wurden. - Die Unterstützung für ARM EHABI in Clang wurde korrigiert, um den Spezifikationen zu entsprechen.
- Der GNU Debugger (GDB) wurde so angepasst, dass die Zeit, die für das Durchlaufen der Link-Map des Ziels während
solib
-Ereignissen benötigt wird, verkürzt wird. (Problem 38402) - Ein Fehler wurde behoben, bei dem die Datei
libgcc.a
beim Verknüpfen von freigegebenen Bibliotheken fehlte.
- Korrekturen an NDK-Headerdateien:
- Sonstige Änderungen:
-
- Rückportierte integrierte atomare 64-Bit-Funktionen für ARM zu GCC 4.6.
- Dokumentation zur Latenz bei Audioausgabe sowie weitere Dokumentation und Fehlerkorrekturen hinzugefügt.
- Debug-Builds mit Clang wurden korrigiert, sodass für Pfade ohne return-Anweisung jetzt ein
SIGILL
-Signal für Funktionen, die nicht „void“ sind, ausgegeben wird. make-standalone-toolchain.sh
wurde aktualisiert, um das Suffix-clang3.1
zu akzeptieren, was dem Hinzufügen von--llvm-version=3.1
zur GCC 4.6-Toolchain entspricht.- Die URL für GCC- und Clang-Fehlerberichte wurde aktualisiert zu: https://source.android.com/source/report-bug s.html
llvm-objdump
unterstützt jetzt ARM ELF.- Die Warnung treating c input as c++ für Clang-Builds wird unterdrückt.
- Der Build wurde aktualisiert, sodass nur die 32-Bit-Version von
libiberty.a
erstellt und inlib32/
platziert wird.
Android NDK r8c (November 2012)
- Wichtige Änderungen:
-
- Der NDK wurde um den Clang 3.1-Compiler erweitert. Die GNU Compiler Collection (GCC) 4.6 ist weiterhin die Standardeinstellung. Sie müssen die Clang-Compileroption also explizit aktivieren. Das geht so:
- Exportieren Sie für
ndk-build
NDK_TOOLCHAIN_VERSION=clang3.1
oder fügen Sie diese Umgebungsvariable inApplication.mk
hinzu. - Fügen Sie für eigenständige Builds
--llvm-version=3.1
zumake-standalone-toolchain.sh
hinzu und ersetzen SieCC
undCXX
in Ihrem Makefile durch<tool-path>/bin/clang
und<tool-path>/bin/clang++
. Weitere Informationen finden Sie unterSTANDALONE-TOOLCHAIN.html
.
Hinweis:Diese Funktion ist experimentell. Bitte probieren Sie es aus und melden Sie etwaige Probleme.
- Exportieren Sie für
- Der Gold-Linker
ld.gold
wurde für die Windows-Toolchain hinzugefügt. Gold Linker ist auch die Standardeinstellung für ARM und X86 auf allen Hosts. Sie können sie überschreiben, um denld.bfd
-Linker zu verwenden, indem SieLOCAL_LDFLAGS += -fuse-ld=bfd
zuAndroid.mk
hinzufügen oder-fuse-ld=bfd
an die g++/clang++-Befehlszeile übergeben, die die Verknüpfung ausführt. - In den Skripts
ndk-build[.cmd]
undndk-gdb
wurden Prüfungen auf Leerzeichen im NDK-Pfad hinzugefügt, um schwer zu diagnostizierende Build-Fehler zu vermeiden. - Die folgenden Änderungen wurden an der Verarbeitung der API-Ebene vorgenommen:
- Die Build-Logik wurde so geändert, dass Projekte, in denen
android-10
überandroid-13
inAPP_PLATFORM
,project.properties
oderdefault.properties
angegeben wird, mitandroid-9
anstelle vonandroid-14
verknüpft werden. - Der Build wurde aktualisiert, sodass ausführbare Dateien, die android-16 (Jelly Bean) oder höher verwenden, mit der Option
-fPIE
für positionsunabhängige ausführbare Dateien (Position Independent Executables, PIE) kompiliert werden. Mit einer neuenAPP_PIE
-Option können Sie dieses Verhalten steuern. Weitere Informationen finden Sie unterAPPLICATION-MK.html
.Hinweis:Alle API-Ebenen über 14 werden weiterhin mit
platforms/android-14
verknüpft und es wurden keine neuenplatforms/android-N
hinzugefügt. ndk-build
wurde so geändert, dass Warnungen ausgegeben werden, wenn der angepasste API-Level größer alsandroid:minSdkVersion
imAndroidManifest.xml
des Projekts ist.
- Die Build-Logik wurde so geändert, dass Projekte, in denen
- Die
cpu-features
-Hilfsbibliothek wurde aktualisiert und enthält jetzt weitere ARM-spezifische Funktionen. Weitere Informationen finden Sie untersources/android/cpufeatures/cpu-features.h
. - Die Länge von „long double“ auf der X86-Plattform wurde auf 8 Byte geändert. Dieser Datentyp hat jetzt die gleiche Größe wie ein Double, wird aber weiterhin als separater Typ behandelt.
- Aktualisierter Build für
APP_ABI=armeabi-v7a
:- Dieser Build-Typ wurde so geändert, dass der Parameter
-march=armv7-a
an den Linker übergeben wird. Durch diese Änderung wird sichergestellt, dass v7-spezifische Bibliotheken undcrt*.o
korrekt verknüpft sind. -mfpu=vfpv3-d16
wurdendk-build
anstelle der in früheren Versionen verwendeten Option-mfpu=vfp
hinzugefügt.
- Dieser Build-Typ wurde so geändert, dass der Parameter
- Der NDK wurde um den Clang 3.1-Compiler erweitert. Die GNU Compiler Collection (GCC) 4.6 ist weiterhin die Standardeinstellung. Sie müssen die Clang-Compileroption also explizit aktivieren. Das geht so:
- Wichtige Fehlerkorrekturen:
-
- Es wurde ein Problem behoben, bei dem die Ausführung von
make-standalone-toolchain.sh
mit Root-Berechtigungen dazu führte, dass einige Nutzer nicht auf die eigenständige Toolchain zugreifen konnten. (Problem 35279)- Für alle Dateien und ausführbaren Dateien im NDK-Releasepaket sind Lese- und Ausführungsberechtigungen für alle festgelegt.
- Die Inhaberschaft/Gruppe von
libstdc++.a
wird jetzt beim Kopieren beibehalten.
- Redundante
\r
wurde aus dem vordefinierten Windows-Buildecho.exe
entfernt. Die redundante\r
hat dazu geführt, dassgdb.setup
im GNU Debugger (GDB) fehlgeschlagen ist, weil sie fälschlicherweise Teil des Pfads wurde. (Problem 36054) - Parallele Builds für Windows, die manchmal aufgrund von Zeitproblemen in der
host-mkdir
-Implementierung fehlgeschlagen sind, wurden behoben. (Problem 25875) - In GCC 4.4.3 GNU
libstdc++
werdentypeinfo
-Namen standardmäßig nicht zusammengeführt. Weitere Informationen finden Sie untertoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Problem 22165) - Ein Problem im
null
-Kontext in GCC 4.6cp/mangle.c::write_unscoped_name
wurde behoben. GCC konnte abstürzen, wenn der Kontextnull
war und inTREE_CODE
dereferenziert wurde. - GCC 4.4.3 stürzt nicht mehr bei ARM NEON-spezifischen Typdefinitionen für Gleitkommazahlen ab. (Problem 34613)
- Die interne
_IteWrapper::operator*()
-Implementierung vonSTLport
wurde korrigiert. Zuvor wurde ein alter Stapelspeicherort mit dem dereferenzierten Wert zurückgegeben, was zu Laufzeitabstürzen führte. (Problem 38630) - ARM-spezifische Fehlerkorrekturen:
- In ARM GCC 4.4.3/4.6
g++
wird nicht mehr gewarnt, dass die Namensveränderung von <va_list> in GCC 4.4 geändert wurde. Die Problemumgehung mit dem Schalter-Wno-psabi
, um diese Warnung zu vermeiden, ist nicht mehr erforderlich. - Ein Problem wurde behoben, bei dem in einem Projekt mit dem Suffix
.arm
oder.neon
inLOCAL_SRC_FILES
auchAPP_STL
verwendet wurde. MitAPP_STL
sucht dasndk-build
-Skript inLOCAL_SRC_FILES
nach C++-Dateien, bevor STL-header/lib
-Pfade zur Kompilierung hinzugefügt werden.ndk-build
wurde geändert, um die Suffixe.arm
und.neon
vor der Suche herauszufiltern. Andernfalls werden Elemente inLOCAL_SRC_FILES
wiemyfile.cpp.arm.neon
nicht als C++-Code kompiliert. binutils-2.21/ld.bfd
wurde so korrigiert, dass Objekte aus älteren binutils ohnetag_FP_arch
verknüpft werden können. Dadurch wurden assertion fail-Fehlermeldungen in GNU Binutils vermieden. (Problem 35209)- Die Warnung Unknown EABI object attribute 44 wurde entfernt, wenn
binutils-2.19/ld
ein vorgefertigtes Objekt mit einer neuerenbinutils-2.21
verknüpft. - Ein Problem bei der GNU-Kompilierung von
stdc++
mit-mthumb
und-march=armv7-a
wurde behoben. Dazu wurdemake-standalone-toolchain.sh
so geändert, dassheaders/libs
im Unterverzeichnisarmv7-a/thumb
eingefügt wird. (Problem 35616) - Der Fehler unresolvable R_ARM_THM_CALL relocation wurde behoben. (Problem 35342)
- Ein interner Compilerfehler bei
reload1.c:3633
wurde behoben. Er wurde dadurch verursacht, dass das ARM-Backend den falschen Operandentyp erwartet hat, als das Vorzeichen vonchar
erweitert wurde. (GCC-Problem 50099) - Ein interner Compilerfehler bei negativer Verschiebung wurde behoben. (GCC-Problem)
- In ARM GCC 4.4.3/4.6
-fstack-protector
für X86 wurde korrigiert. Dies ist auch der Standardwert für dasndk-build
-X86-ABI-Ziel.- MIPS-spezifische Korrekturen:
- Die
STLport
-Endianness wurde korrigiert, indem_STLP_LITTLE_ENDIAN
beim Kompilieren von MIPSlibstlport_*
auf 1 gesetzt wurde. - Ein Problem mit GCC
__builtin_unreachable
beim Kompilieren von LLVM wurde behoben. (GCC-Problem 54369) - Backportierter Fix für den
cc1
-Kompilierungsprozess, der 100% der CPU-Leistung beansprucht. (GCC-Problem 50380)
- Die
- GNU Debugger-spezifische Korrekturen:
- Die Python-Unterstützung in gdb-7.x wurde beim Erstellen deaktiviert, da die Konfigurationsfunktion von gdb-7.x sonst möglicherweise die auf dem Host verfügbare Python-Version auswählt und
gdb
mit einer fest verdrahteten Abhängigkeit von einer bestimmten Python-Version erstellt. (Problem 36120) - Der Fehler
ndk-gdb
wurde behoben, wennAPP_ABI
all
enthält und mit keiner der bekannten Architekturen übereinstimmt. (Problem 35392) - Die Unterstützung für Windows-Pfadnamen wurde korrigiert, indem das Zeichen
:
beibehalten wird, wenn es so aussieht, als könnte es Teil eines Windows-Pfads sein, der mit einem Laufwerkbuchstaben beginnt. (GDB-Problem 12843) - Das Hinzufügen von Hardware-Haltepunkten für ARM in
gdbserver
wurde korrigiert. (GDB-Problem) - Es wurde ein Fix hinzugefügt, damit nur der aktuelle
solibs
gelesen wird, wenn der Linker konsistent ist. Durch diese Änderung wird die Verarbeitung vonsolib
-Ereignissen beschleunigt. (Problem 37677) - Es wurde ein Fix hinzugefügt, um wiederholte Versuche zu ermöglichen,
solib
-Breakpoints zu finden. GDB wiederholtenable_break()
jetzt bei jedem Aufruf vonsvr4_current_sos()
, bis der Vorgang erfolgreich ist. (Änderung 43563) - Ein Problem wurde behoben, bei dem
gdb
nicht an Haltepunkten angehalten wurde, die indlopen-ed
-Bibliotheken platziert wurden. (Problem 34856) - Ein Problem wurde behoben, bei dem
SIGILL
im dynamischen Linker beim Aufrufen vondlopen()
auf Systemen auftrat, auf denen/system/bin/linker
von Symbolen befreit wurde undrtld_db_dlactivity()
alsThumb
implementiert wurde, daLSB
vonsym_addr
nicht beibehalten wurde. (Problem 37147)
- Die Python-Unterstützung in gdb-7.x wurde beim Erstellen deaktiviert, da die Konfigurationsfunktion von gdb-7.x sonst möglicherweise die auf dem Host verfügbare Python-Version auswählt und
- Es wurde ein Problem behoben, bei dem die Ausführung von
- Weitere Fehlerkorrekturen:
-
- Feste NDK-Header:
- Der
arch-mips/include/asm/*
-Code, der fälschlicherweise aus dem ursprünglichen Kernel entfernt wurde, wurde wiederhergestellt. (Änderung 43335) - Das Strukturmember
__unused
wurde inlinux/sysctl.h
undlinux/icmp.h
durch__linux_unused
ersetzt, um Konflikte mit#define __unused
insys/cdefs.h
zu vermeiden. - Das Problem mit
fenv.h
für eingeschlossene C-Funktionen mit__BEGIN_DECLS
und__END_DECLS
wurde behoben. - Nicht implementierte Funktionen in
malloc.h
entfernt. - Die
stdint.h
-Definition vonuint64_t
für ANSI-Compiler wurde korrigiert. (Problem 1952) - Die Präprozessormakros in
<arch>/include/machine/*
wurden korrigiert. link.h
für MIPS wurde durch eine neue Version ersetzt, die alle Plattformen unterstützt.- „
linux-unistd.h
“ wurde entfernt - Verschieben Sie die GLibc-spezifischen Makros
LONG_LONG_MIN
,LONG_LONG_MAX
undULONG_LONG_MAX
von<pthread.h>
nach<limits.h>
.
- Der
- Ein Pufferüberlauf in
ndk-stack-parser
wurde behoben. - Das Problem, dass bei fehlender Definition von
_STLP_USE_EXCEPTIONS
alle Deklarationen und Verwendungen von__Named_exception
ausgelassen wurden, wurde behoben. Die Einstellungen für__Named_exception
werden nur kompiliert und verwendet, wennSTLport
Ausnahmen verwenden darf. - Das Erstellen von reinen Linux-NDK-Paketen ohne Windows-Code funktioniert jetzt. Verwenden Sie die folgenden Einstellungen, um diese Art von Build auszuführen:
./build/tools/make-release.sh --force --systems=linux-x86
- Das Problem, dass
libc.so
atexit()
und__do_handler
exportiert hat, wurde behoben. Diese Symbole werden für ARM-Builds von der Systemversion der C-Bibliothek exportiert, um Legacy-Bibliotheken zu unterstützen. NDK-generierte Dateien sollten niemals direkt darauf verweisen. Stattdessen sollte jede gemeinsam genutzte Bibliothek oder ausführbare Datei ihre eigene Version dieser Symbole einbetten, die voncrtbegin_*.o
bereitgestellt wird.Wenn Ihr Projekt mit den
-nostdlib -Wl,--no-undefined
-Optionen verknüpft ist, müssen Sie Ihren eigenen__dso_handle
angeben, dacrtbegin_so.o
in diesem Fall nicht verknüpft ist. Der Inhalt von__dso_handle
spielt keine Rolle, wie im folgenden Beispielcode zu sehen ist:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Der Decoder für feste Symbole für ARM, der in
objdump
fürplt
-Einträge verwendet wird, wurde korrigiert, um eine lesbarere Formfunction@plt
zu generieren. - Die folgenden in GCC 4.6 eingeführten Symbole
libgcc.a
wurden aus derlibc.so
-Bibliothek der X86-Plattform entfernt:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
und__aeabi_unwind_cpp_pr2
. - Nicht verwendete
.ctors
,.dtors
und.eh_frame
in MIPScrt*_so.S
wurden entfernt. ndk-gdb
wurde aktualisiert, sodass nur die letzte Zeile der Ausgabe fürndk-build
DUMP_XXXX
berücksichtigt wird. Diese Änderung sorgt dafür, dass bei der Ausgabe vonApplication.mk
oderAndroid.mk
mit der$(info ...)
-Syntax nichts in das Ergebnis vonDUMP_XXXX
eingefügt wird. (Weitere Informationen)
- Feste NDK-Header:
- Sonstige Änderungen:
-
- Die Header
arch-x86
undarch-mips
wurden ausplatforms/android-[3,4,5,8]
entfernt. Diese Header waren unvollständig, da sowohl X86- als auch MIPS-ABIs nur ab API 9 oder höher unterstützt werden. - Vereinfachter C++-Include-Pfad in eigenständigen Paketen, wie unten dargestellt.
(Problem 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- In
ndk-build
werden standardmäßig mehr C++-Dateiendungen erkannt:.cc .cp .cxx .cpp .CPP .c++ .C
. Sie könnenLOCAL_CPP_EXTENSION
weiterhin verwenden, um diese Erweiterungseinstellungen zu überschreiben. - Ein Problem in
samples/san-angeles
wurde behoben, das beim erneuten Starten zu einem schwarzen Bildschirm oder einem eingefrorenen Frame führte. - Verworfene APIs in NDK-Beispielen ersetzt.
(Problem 20017)
hello-gl2
von Android 5 zu Android 7native-activity
von Android 9 zu Android 10native-audio
von Android 9 zu Android 10native-plasma
von Android 9 zu Android 10
- Es wurde ein neues Branding für Android-Ausführungsdateien mit einem einfacheren Schema im Abschnitt
.note.android.ident
(definiert incrtbegin_static/dynamic.o
) hinzugefügt, damit Debugging-Tools entsprechend reagieren können. Die Strukturmember und Werte werden so definiert: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 */ }
Die bisherigen Branding-Optionen im Abschnitt
.note.ABI-tag
wurden eingestellt. - Ein neues Skript
run-tests-all.sh
wurde hinzugefügt, dasrun-tests.sh
undstandalone/run.sh
mit verschiedenen Bedingungen aufruft. Das Skriptrun-tests.sh
wird ohne die Option--abi
ausgeführt und so erweitert, dass die meisten Tests für alle unterstützten ABIs kompiliert und auf allen angeschlossenen Geräten ausgeführt werden.
- Die Header
Android NDK r8b (Juli 2012)
Die wichtigsten Funktionen dieses Releases sind eine neue GNU Compiler Collection (GCC) 4.6-Toolchain und GNU Debugger (GDB) 7.3.x, mit dem die Debugging-Unterstützung für das System-Image von Android 4.1 (API-Level 16) hinzugefügt wird.
- Wichtige Fehlerkorrekturen:
-
LOCAL_SHORT_COMMANDS
-Probleme in Mac OS- und Windows-Cygwin-Umgebungen für statische Bibliotheken wurden behoben. Die Listendatei wird schneller generiert und nicht neu generiert, um wiederholte Projekt-Neuerstellungen zu vermeiden.- Es wurden mehrere Probleme in
ndk-gdb
behoben:- Das Tool wurde aktualisiert, um die Flags
-e
,-d
und-s
konsistenter an adb zu übergeben. - Das Tool wurde aktualisiert, sodass es Gerätenamen mit Leerzeichen akzeptiert.
- Aktualisiertes Tool zum Abrufen von
/system/bin/link
-Informationen, sodassgdb
auf dem Host einen Haltepunkt in__dl_rtld_db_dlactivity
festlegen und Linker-Aktivitäten (z.B. erneutes Scannen vonsolib
-Symbolen, wenndlopen()
aufgerufen wird) erkennen kann.
- Das Tool wurde aktualisiert, um die Flags
- Ein Problem mit
ndk-build clean
unter Windows wurde behoben, bei dem./libs/*/lib*.so
nicht entfernt wurde. - Der Fehler wurde behoben, sodass
ndk-build.cmd
einen Wert ungleich null fürERRORLEVEL
zurückgibt, wennmake
fehlschlägt. - Das Problem mit
libc.so
wurde behoben, sodass die Symbole__exidx_start
und__exidx_end
nicht mehr fälschlicherweise exportiert werden. - Das Problem
SEGV
wurde behoben, wenn der Stack für ARM und MIPS über__libc_init
hinaus abgewickelt wurde.
- Wichtige Änderungen:
-
- GCC 4.6-Toolchain (
binutils
2.21 mitgold
und GDB 7.3.x) wurde hinzugefügt, um parallel zur ursprünglichen GCC 4.4.3-Toolchain (binutils
2.19 und GDB 6.6) verwendet werden zu können.- GCC 4.6 ist jetzt die Standard-Toolchain. Sie können
NDK_TOOLCHAIN_VERSION=4.4.3
inApplication.mk
festlegen, um das Original auszuwählen. - Die Unterstützung für den
gold
-Linker ist nur für ARM- und x86-Architekturen auf Linux- und Mac OS-Hosts verfügbar. Diese Unterstützung ist standardmäßig deaktiviert. Fügen SieLOCAL_LDLIBS += -fuse-ld=gold
inAndroid.mk
ein, um die Funktion zu aktivieren. - Für Programme, die mit
-fPIE
kompiliert wurden, ist für das Debugging die neueGDB
erforderlich, einschließlich Binärdateien in Android 4.1-System-Images (API-Level 16). - Das Tool
binutils
2.21ld
enthält zurückportierte Korrekturen aus Version 2.22:- Das Problem mit
ld --gc-sections
wurde behoben. Dabei wurden fälschlicherweise Zombie-Verweise auf externe Bibliotheken beibehalten. Weitere Informationen - Der ARM-Befehl
strip
wurde korrigiert, damit die ursprünglichenp_align
undp_flags
im AbschnittGNU_RELRO
beibehalten werden, sofern sie gültig sind. Ohne diesen Fix konnten Programme, die mit-fPIE
erstellt wurden, nicht debuggt werden. (Weitere Informationen)
- Das Problem mit
- Die
sincos()
-Optimierung wurde deaktiviert, um die Kompatibilität mit älteren Plattformen zu gewährleisten.
- GCC 4.6 ist jetzt die Standard-Toolchain. Sie können
- Die Build-Optionen wurden aktualisiert, um standardmäßig das NX-Bit (Never eXecute) und die
relro
/bind_now
-Schutzmaßnahmen zu aktivieren:- Dem Assembler wurde
--noexecstack
und dem Linker-z noexecstack
hinzugefügt, um NX-Schutz vor Pufferüberlaufangriffen zu bieten, indem das NX-Bit auf dem Stack und Heap aktiviert wird. - Dem Linker wurden
-z relro
und-z now
hinzugefügt, um interne Datenabschnitte nach dem Verknüpfen zu härten und so Sicherheitslücken zu vermeiden, die durch Speicherbeschädigung verursacht werden. (Weitere Informationen: 1,2) - Diese Funktionen können mit den folgenden Optionen deaktiviert werden:
- Deaktivieren Sie den NX-Schutz, indem Sie die Option
--execstack
für den Assembler und-z execstack
für den Linker festlegen. - Deaktivieren Sie die Härtung interner Daten, indem Sie die Optionen
-z norelro
und-z lazy
für den Linker festlegen. - Deaktivieren Sie diese Schutzmaßnahmen im NDK
jni/Android.mk
, indem Sie die folgenden Optionen festlegen:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Weitere Informationen finden Sie unter
docs/ANDROID-MK.html
. - Deaktivieren Sie den NX-Schutz, indem Sie die Option
- Dem Assembler wurde
- Branding für Android-Ausführungsdateien mit dem Abschnitt
.note.ABI-tag
(incrtbegin_static/dynamic.o
) hinzugefügt, damit Debugging-Tools entsprechend reagieren können. Das Strukturmember und die Werte sind so definiert: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 */ }
- GCC 4.6-Toolchain (
- Weitere Fehlerkorrekturen:
-
- Ein Problem wurde behoben, bei dem die
mips-linux-gnu
-Verschiebung abgeschnitten wurde, um inR_MIPS_TLS_LDM
zu passen. (Weitere Informationen) - Das Problem, dass das
ld
-Tool bei Verwendung von--gc-sections
abstürzte, wurde behoben. (Weitere Informationen) - Ein Problem mit der Zählung von MIPS
GOT_PAGE
wurde behoben. (Weitere Informationen) - Der Link zum Warnsymbol für das Folgen von
mips_elf_count_got_symbols
wurde korrigiert. - Der Link zum Warnsymbol für das Folgen von
mips_elf_allocate_lazy_stub
wurde korrigiert. - MIPS
.dynamic
in das Datensegment verschoben, damit es beschreibbar ist. - Die hartcodierten Werte für Symbole wurden durch die korrekten Segmentgrößen für MIPS ersetzt.
- Die Option
-mno-shared
wurde aus den Standardeinstellungen in der MIPS-Toolchain entfernt. Der Standardwert für die Android-Toolchain ist-fPIC
(oder-fpic
, falls unterstützt). Wenn Sie-mshared
,-fpic
,-fPIC
,-fpie
oder-fPIE
nicht explizit angeben, fügt der MIPS-Compiler-mno-shared
hinzu, wodurch PIC deaktiviert wird. Der Compiler fügt in diesem Fall nicht mehr-mno-shared
hinzu. - Die falschen Paketnamen in den Beispielen
hello-jni
undtwo-libs
wurden korrigiert, damit dastests
-Projekt darunter kompiliert werden kann.
- Ein Problem wurde behoben, bei dem die
- Sonstige Änderungen:
-
- Geänderte Speicherorte von Binärdateien:
gdbserver
wurde vontoolchain/<arch-os-ver>/prebuilt/gdbserver
nachprebuilt/android-<arch>/gdbserver/gdbserver
verschoben.- Das Präfix der x86-Toolchain wurde von
i686-android-linux-
ini686-linux-android-
umbenannt. sources/cxx-stl/gnu-libstdc++/include
undlib
wurden bei der Kompilierung mit GCC 4.6 nachsources/cxx-stl/gnu-libstdc++/4.6
oder bei der Kompilierung mit GCC 4.4.3 nachsources/cxx-stl/gnu-libstdc++/4.4.3
verschoben.libbfd.a
undlibintl.a
wurden vonlib/
nachlib32/
verschoben.
- Verschiedene Skripts in der NDK-Toolchain zum Neuerstellen und Testen wurden hinzugefügt und verbessert:
build-mingw64-toolchain.sh
wurde hinzugefügt, um eine neue Linux-basierte Toolchain zu generieren, die Win32- und Win64-Ausführungsdateien generiert.- Die Geschwindigkeit von
download-toolchain-sources.sh
wurde verbessert, indem der Befehlclone
verwendet undcheckout
nur für die Verzeichnisse verwendet wird, die zum Erstellen der Binärdateien der NDK-Toolchain erforderlich sind. - Die Skripts
build-host-gcc.sh
undbuild-host-gdb.sh
wurden hinzugefügt. tests/check-release.sh
wurde hinzugefügt, um den Inhalt eines bestimmten NDK-Installationsverzeichnisses oder eines vorhandenen NDK-Pakets zu prüfen.- Die
tests/standalone/run.sh
eigenständigen Tests wurden neu geschrieben .
- Der
if_dl.h
-Header wurde von allen Plattformen und Architekturen entfernt. Die ElementeAF_LINK
undsockaddr_dl
, die hier beschrieben werden, sind spezifisch für BSD (d.h., sie sind in Linux nicht vorhanden).
- Geänderte Speicherorte von Binärdateien:
Android NDK r8 (Mai 2012)
Diese Version des NDK umfasst Unterstützung für MIPS ABI und einige zusätzliche Korrekturen.
- Neue Funktionen:
-
- Unterstützung für das MIPS-ABI hinzugefügt. Damit können Sie Maschinencode generieren, der auf kompatiblen MIPS-basierten Android-Geräten ausgeführt wird. Zu den wichtigsten Funktionen für MIPS gehören MIPS-spezifische Toolchains, Systemheader, Bibliotheken und Debugging-Unterstützung. Weitere Informationen zur MIPS-Unterstützung finden Sie unter
docs/CPU-MIPS.html
im NDK-Paket.Standardmäßig wird Code für ARM-basierte Geräte generiert. Sie können Ihrer
APP_ABI
-Definition in IhrerApplication.mk
-Dateimips
hinzufügen, um für MIPS-Plattformen zu erstellen. Die folgende Zeile weistndk-build
beispielsweise an, Ihren Code für drei verschiedene ABIs zu erstellen:APP_ABI := armeabi armeabi-v7a mips
Sofern Sie nicht auf architekturspezifische Assembly-Quellen wie ARM-Assembly-Code angewiesen sind, sollten Sie Ihre
Android.mk
-Dateien nicht ändern müssen, um MIPS-Maschinencode zu erstellen. - Sie können eine eigenständige MIPS-Toolchain erstellen, indem Sie beim Aufrufen von
make-standalone-toolchain.sh
die Option--arch=mips
verwenden. Weitere Informationen finden Sie unterdocs/STANDALONE-TOOLCHAIN.html
.
Hinweis:Damit Ihre Anwendungen Nutzern nur dann zur Verfügung stehen, wenn ihre Geräte sie ausführen können, filtert Google Play Anwendungen anhand der in Ihrer Anwendung enthaltenen Informationen zum Befehlssatz. Sie müssen nichts weiter tun, um die Filterung zu aktivieren. Außerdem prüft das Android-System Ihre Anwendung bei der Installation und lässt die Installation nur fortsetzen, wenn die Anwendung eine Bibliothek bereitstellt, die für die CPU-Architektur des Geräts kompiliert wurde.
- Unterstützung für das MIPS-ABI hinzugefügt. Damit können Sie Maschinencode generieren, der auf kompatiblen MIPS-basierten Android-Geräten ausgeführt wird. Zu den wichtigsten Funktionen für MIPS gehören MIPS-spezifische Toolchains, Systemheader, Bibliotheken und Debugging-Unterstützung. Weitere Informationen zur MIPS-Unterstützung finden Sie unter
- Wichtige Fehlerkorrekturen:
-
- Ein Tippfehler in der GAbi++-Implementierung wurde behoben. Dabei wurde das Ergebnis von
dynamic_cast<D>(b)
des Basisklassenobjektsb
für die abgeleitete KlasseD
fälschlicherweise in die entgegengesetzte Richtung der Basisklasse angepasst. (Problem 28721) - Ein Problem wurde behoben, bei dem
make-standalone-toolchain.sh
nicht inlibsupc++.*
kopiert werden konnte.
- Ein Tippfehler in der GAbi++-Implementierung wurde behoben. Dabei wurde das Ergebnis von
- Weitere Fehlerkorrekturen:
-
ndk-build.cmd
wurde korrigiert, damitndk-build.cmd
auch dann richtig funktioniert, wenn der Nutzer die UmgebungsvariableSHELL
neu definiert hat. Diese kann sich ändern, wenn verschiedene Entwicklungstools in Windows-Umgebungen installiert werden.
Android NDK r7c (April 2012)
Diese Version des NDK enthält eine wichtige Korrektur für Geräte mit Tegra2-Prozessor sowie einige zusätzliche Korrekturen und Verbesserungen:
- Wichtige Fehlerkorrekturen:
-
- Die GNU STL-Binärdateien für armeabi-v7a wurden korrigiert, damit sie nicht auf Geräten ohne NEON abstürzen. Die mit NDK r7b bereitgestellten Dateien waren nicht richtig konfiguriert, was zu Abstürzen auf Geräten mit Tegra2 und anderen Geräten führte, wenn versucht wurde, bestimmte Gleitkommafunktionen zu verwenden (z.B.
cosf
,sinf
,expf
).
- Die GNU STL-Binärdateien für armeabi-v7a wurden korrigiert, damit sie nicht auf Geräten ohne NEON abstürzen. Die mit NDK r7b bereitgestellten Dateien waren nicht richtig konfiguriert, was zu Abstürzen auf Geräten mit Tegra2 und anderen Geräten führte, wenn versucht wurde, bestimmte Gleitkommafunktionen zu verwenden (z.B.
- Wichtige Änderungen:
-
- Unterstützung für benutzerdefinierte Ausgabeverzeichnisse über die Umgebungsvariable
NDK_OUT
hinzugefügt. Wenn diese Variable definiert ist, werden alle zwischenzeitlich generierten Dateien darin gespeichert, anstatt in$PROJECT_PATH/obj
. Die Variable wird auch vonndk-gdb
erkannt. - Es wurde Unterstützung für das Erstellen von Modulen mit Hunderten oder sogar Tausenden von Quelldateien hinzugefügt, indem
LOCAL_SHORT_COMMANDS
in IhrerAndroid.mk
auftrue
festgelegt wird.Durch diese Änderung wird das NDK-Build-System gezwungen, die meisten Linker- oder Archivierungsoptionen in Listendateien zu speichern, um die Beschränkungen der Befehlszeilenlänge zu umgehen. Weitere Informationen finden Sie unter
docs/ANDROID-MK.html
.
- Unterstützung für benutzerdefinierte Ausgabeverzeichnisse über die Umgebungsvariable
- Weitere Fehlerkorrekturen:
-
- Die
android_getCpuCount()
-Implementierung in dercpufeatures
-Hilfsbibliothek wurde korrigiert. Auf bestimmten Geräten, auf denen Kerne dynamisch vom System aktiviert werden, wurde bei der vorherigen Implementierung beim ersten Aufruf der Funktion die Gesamtzahl der aktiven Kerne anstelle der Gesamtzahl der physisch verfügbaren Kerne gemeldet.
- Die
Android NDK r7b (Februar 2012)
Diese Version des NDK enthält Korrekturen für native Windows-Builds, Cygwin und viele andere Verbesserungen:
- Wichtige Fehlerkorrekturen:
-
sys/atomics.h
wurde aktualisiert, um Probleme mit der Richtigkeit auf einigen ARM-basierten Geräten mit mehreren Kernen zu vermeiden. Erstellen Sie Ihre unveränderten Quellen mit dieser Version des NDK neu. Das Problem sollte dann nicht mehr auftreten. Weitere Informationen finden Sie unterdocs/ANDROID-ATOMICS.html
.- Zurückgesetzt auf
binutils
2.19, um Debugging-Probleme zu beheben, die in NDK r7 aufgetreten sind (dort wurde aufbinutils
2.20.1 umgestellt). ndk-build
wurde unter 32-Bit-Linux behoben. Aufgrund eines Verpackungsfehlers wurde in NDK r7 eine 64-Bit-Version der ausführbaren Dateiawk
unterprebuilt/linux-x86/bin
abgelegt.- Der native Windows-Build (
ndk-build.cmd
) wurde korrigiert. Andere Build-Modi waren nicht betroffen. Die Korrekturen umfassen Folgendes:- Es wurde ein Fehler mit einer Endlosschleife / einem Stack-Overflow behoben, der beim Aufrufen von
ndk-build.cmd
aus einem Verzeichnis auftrat, das nicht das Stammverzeichnis des Projektpfads war (z.B. in einem beliebigen Unterverzeichnis). - Ein Problem wurde behoben, durch das automatisch generierte Abhängigkeitsdateien ignoriert wurden. Das bedeutete, dass beim Aktualisieren eines Headers keine Neukompilierung von Quellen ausgelöst wurde, die ihn enthielten.
- Ein Problem wurde behoben, bei dem Sonderzeichen in Dateien oder Pfaden, die keine Leerzeichen oder Anführungszeichen waren, nicht richtig verarbeitet wurden.
- Es wurde ein Fehler mit einer Endlosschleife / einem Stack-Overflow behoben, der beim Aufrufen von
- Das Problem mit der Standalone-Toolchain wurde behoben, sodass beim Verwenden von
-lstdc++
(d.h. beim Verknüpfen mit der GNUlibstdc++
C++-Laufzeit) korrekte Binärdateien generiert werden. Verwenden Sie-lgnustl_shared
, wenn Sie die Verknüpfung mit der Version der gemeinsam genutzten Bibliothek herstellen möchten, oder-lstdc++
für die statische Version.Weitere Informationen zu dieser Korrektur finden Sie unter
docs/STANDALONE-TOOLCHAIN.html
. - Das Problem mit
gnustl_shared
in Cygwin wurde behoben. Der Linker hat gemeldet, dass erlibsupc++.a
nicht finden konnte, obwohl sich die Datei am richtigen Speicherort befand. - Der Cygwin C++-Link wurde korrigiert, wenn keine bestimmte C++-Laufzeit über
APP_STL
verwendet wird.
- Sonstige Änderungen:
-
- Wenn Ihre Anwendung die GNU-
libstdc++
-Laufzeit verwendet, werden Ausnahmen und RTTI vom Compiler nicht mehr erzwungen. Diese Änderung führt zu kleinerem Code.Wenn Sie diese Funktionen benötigen, müssen Sie einen der folgenden Schritte ausführen:
- Aktivieren Sie Ausnahmen und/oder RTTI explizit in Ihren Modulen oder
Application.mk
. (empfohlen) - Definieren Sie
APP_GNUSTL_FORCE_CPP_FEATURES
auf'exceptions'
,'rtti'
oder beides in IhremApplication.mk
. Weitere Informationen finden Sie unterdocs/APPLICATION-MK.html
.
- Aktivieren Sie Ausnahmen und/oder RTTI explizit in Ihren Modulen oder
ndk-gdb
funktioniert jetzt richtig, wenn in Ihrer Anwendung private Dienste in unabhängigen Prozessen ausgeführt werden. Es wird der Hauptanwendungsprozess und nicht der erste Prozess, der vonps
aufgeführt wird (in der Regel ein Dienstprozess), debuggt.- Ein seltener Fehler wurde behoben, bei dem NDK r7 den
LOCAL_ARM_MODE
-Wert nicht berücksichtigte und bestimmte (aber nicht alle) Quellcode-Dateien immer in 32-Bit-Anweisungen kompilierte. STLport
: Aktualisieren Sie die Quellen, damit sie der Android-Plattformversion entsprechen. Dieses Update behebt einige kleinere Fehler:- Instanziierung eines unvollständigen Typs korrigiert
- Ein kleiner Tippfehler bei „==“ im Vergleich zu „=“ wurde behoben.
memmove
anstelle vonmemcpy
instring::assign
verwendet- Die Verarbeitung von
IsNANorINF
,IsINF
,IsNegNAN
usw. wurde verbessert.
Ausführliche Informationen finden Sie im Commit-Log.
STLport
: 5 unnötige statische Initialisierer aus der Bibliothek entfernt.- Die GNU libstdc++-Bibliotheken für armeabi-v7a wurden fälschlicherweise für armeabi kompiliert. Diese Änderung hatte keine Auswirkungen auf die Richtigkeit, aber die Verwendung des richtigen ABI sollte eine etwas bessere Leistung ermöglichen.
- Die
cpu-features
-Hilfsbibliothek wurde aktualisiert, um drei optionale x86-CPU-Funktionen (SSSE3
,MOVBE
undPOPCNT
) zu melden. Weitere Informationen finden Sie unterdocs/CPU-FEATURES.html
. - In
docs/NDK-BUILD.html
wurdeNDK_APP_APPLICATION_MK
durchNDK_APPLICATION_MK
ersetzt, um eine benutzerdefinierteApplication.mk
-Datei auszuwählen. - Cygwin: Mit
ndk-build
wird beim Aufrufen nicht mehr eine leere Datei „NUL“ im aktuellen Verzeichnis erstellt. - Cygwin: Die automatische Erkennung von Abhängigkeiten wurde verbessert. In der vorherigen Version hat es in den folgenden Fällen nicht richtig funktioniert:
- Wenn das Cygwin-Laufwerkpräfix nicht
/cygdrive
war. - Bei der Verwendung von Laufwerk-losen Bereitstellungen, z. B. wenn Cygwin
/home
in\\server\subdir
anstelle vonC:\Some\Dir
übersetzt.
- Wenn das Cygwin-Laufwerkpräfix nicht
- Cygwin:
ndk-build
versucht nicht, die nativen Windows-Tools unter$NDK/prebuilt/windows/bin
mit bestimmten Versionen von Cygwin und/oder GNU Make zu verwenden.
- Wenn Ihre Anwendung die GNU-
Android NDK r7 (November 2011)
Dieser NDK-Release enthält neue Funktionen zur Unterstützung der Android 4.0-Plattform sowie viele andere Ergänzungen und Verbesserungen:
- Neue Funktionen
-
- Offizielle NDK-APIs für Android 4.0 (API-Level 14) hinzugefügt, wodurch der Plattform die folgenden nativen Funktionen hinzugefügt werden:
- Es wurde eine native Multimedia-API basierend auf dem OpenMAX AL 1.0.1-Standard der Khronos Group hinzugefügt. Mit den neuen Headern
<OMXAL/OpenMAXAL.h>
und<OMXAL/OpenMAXAL_Android.h>
können Anwendungen, die auf API-Level 14 ausgerichtet sind, Multimedia-Ausgaben direkt aus nativem Code über eine neue Android-spezifische Pufferwarteschlangenschnittstelle ausführen. Weitere Informationen finden Sie unterdocs/openmaxal/index.html
und http://www.khronos.org/openmax/. - Die native Audio-API wurde auf Grundlage des OpenSL ES 1.0.1-Standards der Khronos Group aktualisiert. Mit API-Level 14 können Sie jetzt komprimierte Audioformate (z.B. MP3, AAC, Vorbis) in PCM decodieren. Weitere Informationen finden Sie unter
docs/opensles/index.html
und http://www.khronos.org/opensles/.
- Es wurde eine native Multimedia-API basierend auf dem OpenMAX AL 1.0.1-Standard der Khronos Group hinzugefügt. Mit den neuen Headern
- CCache-Unterstützung hinzugefügt. Um große Rebuilds zu beschleunigen, definieren Sie die Umgebungsvariable
NDK_CCACHE
aufccache
(oder den Pfad zu Ihremccache
-Binärprogramm). Wenn CCache deklariert ist, verwendet das NDK-Buildsystem es automatisch beim Kompilieren von Quelldateien. Beispiel:export NDK_CCACHE=ccache
Hinweis:CCache ist nicht im NDK-Release enthalten. Sie müssen es also vor der Verwendung installieren. Weitere Informationen zu CCache finden Sie unter http://ccache.samba.org.
- Es wurde Unterstützung für das Festlegen von
APP_ABI
aufall
hinzugefügt, um anzugeben, dass Sie Ihre NDK-Module für alle ABIs erstellen möchten, die von der angegebenen NDK-Version unterstützt werden. Das bedeutet, dass eine der beiden folgenden Zeilen in IhremApplication.mk
mit dieser Version gleichwertig ist:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Das funktioniert auch, wenn Sie
APP_ABI
beim Aufrufen vonndk-build
über die Befehlszeile definieren. So können Sie schnell prüfen, ob Ihr Projekt für alle unterstützten ABIs erstellt wird, ohne dieApplication.mk file
des Projekts zu ändern. Beispiel:ndk-build APP_ABI=all
- In
Android.mk
wurde die VariableLOCAL_CPP_FEATURES
hinzugefügt, mit der Sie deklarieren können, welche C++-Funktionen (RTTI oder Exceptions) Ihr Modul verwendet. So wird sichergestellt, dass die endgültige Verknüpfung korrekt funktioniert, wenn Sie vorgefertigte Module haben, die von diesen Funktionen abhängen. Weitere Informationen finden Sie unterdocs/ANDROID-MK.html
unddocs/CPLUSPLUS-SUPPORT.html
. - Verkürzte Pfade zu Quell- und Objektdateien, die in Build-Befehlen verwendet werden. Wenn Sie
$NDK/ndk-build
über Ihren Projektpfad aufrufen, sind die Pfade zu den Quell-, Objekt- und Binärdateien, die an die Build-Befehle übergeben werden, jetzt deutlich kürzer, da sie relativ zum aktuellen Verzeichnis übergeben werden. Dies ist nützlich, wenn Sie Projekte mit vielen Quelldateien erstellen, um die durch Ihr Hostbetriebssystem unterstützte maximale Befehlszeilenlänge nicht zu überschreiten. Das Verhalten bleibt unverändert, wenn Siendk-build
über ein Unterverzeichnis Ihres Projektbaums aufrufen oder wenn SieNDK_PROJECT_PATH
so definieren, dass es auf ein bestimmtes Verzeichnis verweist.
- Offizielle NDK-APIs für Android 4.0 (API-Level 14) hinzugefügt, wodurch der Plattform die folgenden nativen Funktionen hinzugefügt werden:
- Experimentelle Funktionen
-
Sie können Ihre NDK-Quelldateien jetzt unter Windows ohne Cygwin erstellen, indem Sie das
ndk-build.cmd
-Script über die Befehlszeile aus Ihrem Projektpfad aufrufen. Das Skript verwendet genau dieselben Argumente wie das ursprünglichendk-build
-Skript. Das Windows NDK-Paket enthält eigene vorkompilierte Binärdateien für GNU Make, Awk und andere Tools, die für den Build erforderlich sind. Sie sollten nichts weiter installieren müssen, um ein funktionierendes Build-System zu erhalten.Wichtig:
ndk-gdb
funktioniert nicht unter Windows. Sie benötigen also weiterhin Cygwin zum Debuggen.Diese Funktion befindet sich noch in der Testphase. Sie können sie gerne ausprobieren und Probleme in der öffentlichen Fehlerdatenbank oder im öffentlichen Forum melden. Alle mit dem NDK ausgelieferten Beispiele und Unit-Tests werden mit dieser Funktion erfolgreich kompiliert.
- Wichtige Fehlerkorrekturen
-
- Importierte gemeinsam genutzte Bibliotheken werden jetzt standardmäßig am Zielinstallationsort (
libs/<abi>
) installiert, wennAPP_MODULES
nicht in IhrerApplication.mk
definiert ist. Wenn beispielsweise ein Modul der obersten Ebenefoo
ein Modulbar
importiert, werden sowohllibfoo.so
als auchlibbar.so
in den Installationsort kopiert. Bisher wurde nurlibfoo.so
kopiert, sofern Siebar
nicht auch in IhremAPP_MODULES
angegeben haben. Wenn SieAPP_MODULES
explizit definieren, ändert sich das Verhalten nicht. ndk-gdb
funktioniert jetzt korrekt für Aktivitäten mit mehreren Kategorien in ihren MAIN-Intent-Filtern.- Importe statischer Bibliotheken sind jetzt korrekt transitiv. Wenn beispielsweise ein Modul der obersten Ebene
foo
die statische Bibliothekbar
importiert, die die statische Bibliothekzoo
importiert, wirdlibfoo.so
jetzt mitlibbar.a
undlibzoo.a
verknüpft.
- Importierte gemeinsam genutzte Bibliotheken werden jetzt standardmäßig am Zielinstallationsort (
- Sonstige Änderungen
-
docs/NATIVE-ACTIVITY.HTML
: Tippfehler korrigiert. Das Mindest-API-Level für native Aktivitäten sollte 9 und nicht 8 sein.docs/STABLE-APIS.html
: Es wurde eine fehlende Dokumentation hinzugefügt, in der EGL ab API-Level 9 als unterstützte stabile API aufgeführt wird.download-toolchain-sources.sh
: Die Toolchain-Quellen werden jetzt von android.googlesource.com heruntergeladen. Das ist der neue Speicherort für die AOSP-Server.- Es wurde eine neue C++-Support-Laufzeit mit dem Namen
gabi++
hinzugefügt. Weitere Informationen dazu finden Sie in der aktualisiertendocs/CPLUSPLUS-SUPPORT.html
. - Es wurde eine neue C++-Unterstützungslaufzeit mit dem Namen
gnustl_shared
hinzugefügt, die der Version der gemeinsam genutzten Bibliothek von GNU libstdc++ v3 (GPLv3-Lizenz) entspricht. Weitere Informationen unterdocs/CPLUSPLUS-SUPPORT.html
- Unterstützung für RTTI in den STLport C++-Laufzeiten hinzugefügt (keine Unterstützung für Ausnahmen).
- Unterstützung für mehrere Dateiendungen in
LOCAL_CPP_EXTENSION
hinzugefügt. Wenn Sie beispielsweise sowohlfoo.cpp
als auchbar.cxx
als C++-Quellen kompilieren möchten, deklarieren Sie Folgendes:LOCAL_CPP_EXTENSION := .cpp .cxx
- Viele unerwünschte exportierte Symbole aus den vom NDK bereitgestellten Link-Time-Systembibliotheken entfernt. So wird sichergestellt, dass Code, der mit der eigenständigen Toolchain generiert wird, nicht versehentlich von einem nicht stabilen ABI-Symbol abhängt (z. B. von einem libgcc.a-Symbol, das sich jedes Mal ändert, wenn die zum Erstellen der Plattform verwendete Toolchain geändert wird).
- Die EGL- und OpenGLES-Khronos-Header wurden aktualisiert, um mehr Erweiterungen zu unterstützen. Beachten Sie, dass sich dadurch die NDK-ABIs für die entsprechenden Bibliotheken nicht ändern, da jede Erweiterung zur Laufzeit von der Clientanwendung getestet werden muss.
Die verfügbaren Erweiterungen hängen von Ihrem Gerät und den GPU-Treibern ab, nicht von der Plattformversion, auf der das Gerät ausgeführt wird. Durch die Header-Änderungen werden lediglich neue Konstanten und Typen hinzugefügt, um die Verwendung der Erweiterungen zu vereinfachen, wenn sie mit
eglGetProcAddress()
oderglGetProcAddress()
getestet wurden. In der folgenden Liste werden die neu unterstützten Erweiterungen beschrieben:- 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 (August 2011)
Diese Version des NDK enthält im Vergleich zu r6 keine neuen Funktionen. Mit dem Release r6b werden die folgenden Probleme im Release r6 behoben:
- Wichtige Fehlerkorrekturen
-
- Der Build wurde korrigiert, wenn
APP_ABI="armeabi x86"
für Builds mit mehreren Architekturen verwendet wird. - Der Speicherort der vorgefertigten STLport-Binärdateien im NDK-Releasepaket wurde korrigiert. Aufgrund eines Fehlers im Verpackungsskript wurden sie an der falschen Stelle platziert.
- Die Verwendung von
atexit()
in gemeinsam genutzten Bibliotheken mit der x86standalone-Toolchain wurde korrigiert. - Problem mit
make-standalone-toolchain.sh --arch=x86
behoben. Bisher konnten die richtigen GNU libstdc++-Binärdateien nicht an den richtigen Speicherort kopiert werden. - Die Linker-Warnungen der Standalone-Toolchain zu fehlenden Definitionen und Größen für das Symbol
__dso_handle
wurden behoben (nur ARM). - Die Reihenfolge, in der
$(SYSROOT)/usr/include
für x86-Builds einbezogen wird, wurde korrigiert. Weitere Informationen finden Sie im Programmfehler. - Die Definitionen von
ptrdiff_t
undsize_t
in x86-spezifischen Systemen wurden korrigiert, wenn sie mit der eigenständigen x86-Toolchain verwendet werden.
- Der Build wurde korrigiert, wenn
Android NDK r6 (Juli 2011)
Diese Version des NDK unterstützt das x86-ABI und enthält weitere kleinere Änderungen.
Detaillierte Informationen zu den Änderungen in diesem Release finden Sie im CHANGES.HTML
-Dokument, das im NDK-Paket enthalten ist.
- Allgemeine Hinweise:
-
- Unterstützung für das x86-ABI hinzugefügt, mit dem Sie Maschinencode generieren können, der auf kompatiblen x86-basierten Android-Geräten ausgeführt wird. Zu den wichtigsten Funktionen für x86 gehören x86-spezifische Toolchains, Systemheader, Bibliotheken und Debugging-Support. Alle Details zur x86-Unterstützung finden Sie in der Datei
docs/CPU-X86.html
im NDK-Paket.Standardmäßig wird Code für ARM-basierte Geräte generiert. Sie können jedoch x86 zu Ihrer
APP_ABI
-Definition in IhrerApplication.mk
-Datei hinzufügen, um für x86-Plattformen zu erstellen. Die folgende Zeile weistndk-build
beispielsweise an, Ihren Code für drei verschiedene ABIs zu erstellen:APP_ABI := armeabi armeabi-v7a x86
Sofern Sie nicht auf ARM-basierte Assembly-Quellen angewiesen sind, müssen Sie Ihre
Android.mk
-Dateien nicht ändern, um x86-Maschinencode zu erstellen. - Sie können eine eigenständige x86-Toolchain erstellen, indem Sie beim Aufrufen von
make-standalone-toolchain.sh
die Option--toolchain=x86-4.4.3
verwenden. Weitere Informationen finden Sie unterdocs/STANDALONE-TOOLCHAIN.html
. - Mit dem neuen Tool
ndk-stack
können Sie Stacktraces inlogcat
übersetzen, die von nativem Code generiert werden. Das Tool übersetzt Anweisungsadressen in ein lesbares Format, das Informationen wie die Funktion, die Quelldatei und die Zeilennummer für jeden Stapelframe enthält. Weitere Informationen und ein Anwendungsbeispiel finden Sie unterdocs/NDK-STACK.html
.
- Unterstützung für das x86-ABI hinzugefügt, mit dem Sie Maschinencode generieren können, der auf kompatiblen x86-basierten Android-Geräten ausgeführt wird. Zu den wichtigsten Funktionen für x86 gehören x86-spezifische Toolchains, Systemheader, Bibliotheken und Debugging-Support. Alle Details zur x86-Unterstützung finden Sie in der Datei
- Sonstige Änderungen:
arm-eabi-4.4.0
, das seit NDK r5 nicht mehr unterstützt wurde, wurde aus der NDK-Distribution entfernt.
Android NDK r5c (Juni 2011)
Diese Version des NDK enthält im Vergleich zu r5b keine neuen Funktionen. Mit dem Release r5c werden die folgenden Probleme im Release r5b behoben:
- Wichtige Fehlerkorrekturen:
-
ndk-build
: Ein seltener Fehler wurde behoben, der beim parallelen Erstellen von debugfähigen Projekten auftrat.- Ein Tippfehler wurde behoben, der die korrekte Funktion von
LOCAL_WHOLE_STATIC_LIBRARIES
mit der neuen Toolchain verhindert hat. Außerdem wurde die Dokumentation für diesen Befehl indocs/ANDROID-MK.html
ergänzt. - Ein Fehler wurde behoben, durch den Code, der mit
gnustl_static
verknüpft war, auf Plattformversionen vor API-Level 8 (Android 2.2) abgestürzt ist. ndk-gdb
: Ein Fehler wurde behoben, der beim Debuggen von Geräten mit Android 3.0 oder höher zu einem Segmentierungsfehler führte.<android/input.h>
: Zwei Funktionen, die in API-Level 9 (Android 2.3) eingeführt wurden, waren falsch und wurden korrigiert. Dadurch wird zwar die Quell-API unterbrochen, die binäre Schnittstelle zum System bleibt jedoch unverändert. Bei den falschen Funktionen fehlte einhistory_index
-Parameter. Die richtigen Definitionen sind unten zu sehen: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);
- Die ARM-Binärdatei der C-Bibliothek für API-Level 9 (Android 2.3) wurde aktualisiert, um zur Linkzeit neue Funktionen, die in diesem API-Level hinzugefügt wurden (z. B.
pthread_rwlock_init
), korrekt verfügbar zu machen.
- Kleinere Verbesserungen und Fehlerkorrekturen:
-
- Objektdateien werden jetzt immer in der Reihenfolge verknüpft, in der sie in
LOCAL_SRC_FILES
aufgeführt sind. Das war bisher nicht der Fall, da die Dateien stattdessen nach Quell-Extensions gruppiert wurden. - Wenn
import-module
fehlschlägt, wird jetzt die Liste der durchsuchten Verzeichnisse ausgegeben. So lässt sich prüfen, ob die vom Build-System verwendeteNDK_MODULE_PATH
-Definition korrekt ist. - Wenn
import-module
erfolgreich ist, wird das Verzeichnis, in dem das Modul gefunden wurde, im Log ausgegeben (sichtbar mitNDK_LOG=1
). - Die Build-Geschwindigkeit von debugfähigen Anwendungen wurde erhöht, wenn das Projekt eine sehr große Anzahl von Include-Verzeichnissen enthält.
ndk-gdb
: Bessere Erkennung vonadb shell
-Fehlern und verbesserte Fehlermeldungen.<pthread.h>
: Die Definition vonPTHREAD_RWLOCK_INITIALIZER
für API-Level 9 (Android 2.3) und höher wurde korrigiert.- Ein Problem wurde behoben, bei dem ein Modul sich selbst importieren konnte, was zu einer Endlosschleife in GNU Make führte.
- Ein Fehler wurde behoben, der dazu führte, dass der Build fehlschlug, wenn
LOCAL_ARM_NEON
auf „true“ gesetzt war (Tippfehler inbuild/core/build-binary.mk
). - Es wurde ein Fehler behoben, der die Kompilierung von
.s
-Assemblydateien verhinderte (.S
-Dateien waren in Ordnung).
- Objektdateien werden jetzt immer in der Reihenfolge verknüpft, in der sie in
Android NDK r5b (Januar 2011)
Diese Version des NDK enthält im Vergleich zu r5 keine neuen Funktionen. In der Version r5b werden die folgenden Probleme der Version r5 behoben:
- Für die r5-Binärdateien war glibc 2.11 erforderlich, die r5b-Binärdateien werden jedoch mit einer speziellen Toolchain generiert, die auf glibc 2.7 oder höher ausgerichtet ist. Die Binärdateien der Linux-Toolchain werden jetzt unter Ubuntu 8.04 oder höher ausgeführt.
- Behebt einen Compilerfehler in der Toolchain „arm-linux-androideabi-4.4.3“. Die vorherige Binärdatei hat beim Umgang mit signierten Zeichen ungültige Thumb-Befehlsfolgen generiert.
- Es wird die fehlende Dokumentation für den Wert „gnustl_static“ für APP_STL hinzugefügt, mit dem Sie eine statische Bibliotheksversion von GNU libstdc++ verknüpfen können. das
- Die folgenden
ndk-build
-Probleme wurden behoben:- Ein Fehler wurde behoben, der inkonsistente Abhängigkeitsdateien erstellte, wenn unter Windows ein Kompilierungsfehler auftrat. Dadurch konnte nach der Behebung des Fehlers im Quellcode kein ordnungsgemäßer Build erstellt werden.
- Ein Cygwin-spezifischer Fehler, bei dem die Verwendung sehr kurzer Pfade für die Android NDK-Installation oder den Projektpfad zur Generierung ungültiger Abhängigkeitsdateien führte. Das hat inkrementelle Builds unmöglich gemacht.
- Ein Tippfehler, der verhinderte, dass die cpufeatures-Bibliothek mit der neuen NDK-Toolchain richtig funktionierte.
- Builds in Cygwin sind schneller, da Aufrufe von
cygpath -m
durch GNU Make für jede Quell- oder Objektdatei vermieden werden. Dies hatte bei sehr großen Quellbäumen Probleme verursacht. Falls das nicht richtig funktioniert, definieren SieNDK_USE_CYGPATH=1
in Ihrer Umgebung, umcygpath -m
wieder zu verwenden. - Bei der Cygwin-Installation wird der Nutzer jetzt über ungültige Installationspfade mit Leerzeichen informiert. Bisher wurde bei einem ungültigen Pfad ein Fehler ausgegeben, in dem eine falsche Version von GNU Make bemängelt wurde, obwohl die richtige Version installiert war.
- Es wurde ein Tippfehler behoben, der verhinderte, dass die Umgebungsvariable
NDK_MODULE_PATH
richtig funktionierte, wenn sie mehrere durch einen Doppelpunkt getrennte Verzeichnisse enthielt. - Das
prebuilt-common.sh
-Skript enthält Korrekturen, um den Compiler auf 64-Bit-Maschinencode zu prüfen, anstatt sich auf das Host-Tag zu verlassen. Dadurch kann die 32-Bit-Toolchain auf Snow Leopard ordnungsgemäß neu erstellt werden. Die Skripts zum Neuerstellen der Toolchain unterstützen jetzt auch die Verwendung einer 32‑Bit-Host-Toolchain. - Eine fehlende Deklaration für
INET_ADDRSTRLEN
wurde zu<netinet/in.h>
hinzugefügt. - Fehlende Deklarationen für
IN6_IS_ADDR_MC_NODELOCAL
undIN6_IS_ADDR_MC_GLOBAL
wurden<netinet/in6.h>
hinzugefügt. - „asm“ wurde in
<asm/byteorder.h>
durch „__asm__“ ersetzt, um die Kompilierung mit-std=c99
zu ermöglichen.
Android NDK r5 (Dezember 2010)
Diese Version des NDK enthält viele neue APIs, die größtenteils eingeführt wurden, um die Entwicklung von Spielen und ähnlichen Anwendungen zu unterstützen, die nativen Code in großem Umfang verwenden. Mit den APIs haben Entwickler direkten nativen Zugriff auf Ereignisse, Audio, Grafiken und Fensterverwaltung, Assets und Speicher. Entwickler können den Android-Anwendungslebenszyklus auch mit der neuen Klasse NativeActivity
in nativem Code implementieren. Ausführliche Informationen zu den Änderungen in diesem Release finden Sie im Dokument CHANGES.HTML
, das im heruntergeladenen NDK-Paket enthalten ist.
- Allgemeine Hinweise:
-
- Unterstützung für native Aktivitäten hinzugefügt, sodass Sie den Lebenszyklus von Android-Anwendungen in nativem Code implementieren können.
- Es wird native Unterstützung für Folgendes hinzugefügt:
- Eingabesubsystem (z. B. Tastatur und Touchscreen)
- Zugriff auf Sensordaten (Beschleunigungsmesser, Kompass, Gyroskop usw.)
- Event-Loop-APIs, um auf Dinge wie Eingabe- und Sensorereignisse zu warten.
- Fenster- und Oberflächen-Subsystem
- Audio-APIs, die auf dem OpenSL ES-Standard basieren und die Wiedergabe und Aufnahme sowie die Steuerung von Audioeffekten der Plattform unterstützen
- Zugriff auf Assets, die in einer
.apk
-Datei verpackt sind.
- Enthält eine neue Toolchain (basierend auf GCC 4.4.3), die besseren Code generiert und jetzt auch als eigenständiger Cross-Compiler verwendet werden kann, für Nutzer, die ihre Software mit
./configure && make
erstellen möchten. Weitere Informationen finden Sie unter docs/STANDALONE-TOOLCHAIN.html. Die Binärdateien für GCC 4.4.0 sind weiterhin verfügbar, die Binärdateien für 4.2.1 wurden jedoch entfernt. - Unterstützung für vorgefertigte statische und freigegebene Bibliotheken (docs/PREBUILTS.html) sowie für Modulexporte und -importe, um das Teilen und Wiederverwenden von Drittanbietermodulen zu vereinfachen (docs/IMPORT-MODULE.html).
- Bietet eine Standard-C++-STL-Implementierung (basierend auf STLport) als Hilfsmodul. Sie kann entweder als statische oder als gemeinsam genutzte Bibliothek verwendet werden. Details und Anwendungsbeispiele finden Sie unter „sources/android/stlport/README“. Vorkompilierte Binärdateien für STLport (statisch oder gemeinsam genutzt) und GNU libstdc++ (nur statisch) sind ebenfalls verfügbar, wenn Sie diese Bibliotheken anstelle der standardmäßigen C++-STL-Implementierung verwenden möchten. C++-Ausnahmen und RTTI werden in der Standard-STL-Implementierung nicht unterstützt. Weitere Informationen finden Sie unter docs/CPLUSPLUS-SUPPORT.HTML.
- Enthält Verbesserungen an der
cpufeatures
-Hilfsbibliothek, die die Berichterstellung des CPU-Typs verbessert. Auf einigen Geräten wurde zuvor ARMv7-CPU gemeldet, obwohl das Gerät tatsächlich eine ARMv6-CPU hatte. Wir empfehlen Entwicklern, die diese Bibliothek verwenden, ihre Anwendungen neu zu erstellen und dann bei Google Play hochzuladen, um von den Verbesserungen zu profitieren. - Fügt eine EGL-Bibliothek hinzu, mit der Sie OpenGL ES-Texturen und -Dienste erstellen und verwalten können.
- Es wurden neue Beispielanwendungen,
native-plasma
undnative-activity
, hinzugefügt, um zu zeigen, wie eine native Aktivität geschrieben wird. - Enthält viele Fehlerkorrekturen und andere kleine Verbesserungen. Eine detailliertere Liste der Änderungen finden Sie unter docs/CHANGES.html.
Android NDK r4b (Juni 2010)
- Hinweise zu NDK r4b:
-
Beinhaltet Korrekturen für mehrere Probleme in den NDK-Build- und Debugging-Skripts. Wenn Sie NDK r4 verwenden, empfehlen wir, den NDK r4b-Build herunterzuladen. Ausführliche Informationen zu den Änderungen in diesem Release finden Sie in der Datei CHANGES.TXT, die im heruntergeladenen NDK-Paket enthalten ist.
- Allgemeine Hinweise:
-
- Das neue
ndk-build
-Buildsystem bietet einen vereinfachten Build-Prozess. - Unterstützung für das einfache native Debugging von generiertem Maschinencode auf Produktionsgeräten über den neuen Befehl
ndk-gdb
. - Fügt eine neue Android-spezifische ABI für ARM-basierte CPU-Architekturen hinzu:
armeabi-v7a
. Das neue ABI erweitert das vorhandenearmeabi
-ABI um die folgenden CPU-Befehlssatzerweiterungen:- Thumb-2-Befehle
- VFP-Hardware-FPU-Befehle (VFPv3-D16)
- Optionale Unterstützung für ARM Advanced SIMD (NEON) GCC-Intrinsics und VFPv3-D32. Wird von Geräten wie dem Verizon Droid von Motorola, dem Google Nexus One und anderen unterstützt.
- Fügt eine neue statische Bibliothek
cpufeatures
(mit Quellen) hinzu, mit der Ihre App die CPU-Funktionen des Hostgeräts zur Laufzeit erkennen kann. Anwendungen können insbesondere die Unterstützung von ARMv7-A sowie VFPv3-D32 und NEON prüfen und dann bei Bedarf separate Codepfade bereitstellen. - Fügt eine Beispielanwendung (
hello-neon
) hinzu, die veranschaulicht, wie diecpufeatures
-Bibliothek verwendet wird, um CPU-Funktionen zu prüfen und dann einen optimierten Codepfad mit NEON-Intrinsics bereitzustellen, sofern die CPU dies unterstützt. - Ermöglicht das Generieren von Maschinencode für einen oder beide von NDK unterstützten Befehlssätze. Sie können beispielsweise gleichzeitig für ARMv5- und ARMv7-A-Architekturen entwickeln und alles im endgültigen
.apk
Ihrer Anwendung speichern. - Damit Ihre Anwendungen nur für Nutzer verfügbar sind, deren Geräte sie ausführen können, filtert Google Play Anwendungen jetzt anhand der in Ihrer Anwendung enthaltenen Informationen zum Befehlssatz. Sie müssen nichts weiter tun, um die Filterung zu aktivieren. Außerdem prüft das Android-System Ihre Anwendung bei der Installation und lässt die Installation nur fortsetzen, wenn die Anwendung eine Bibliothek bereitstellt, die für die CPU-Architektur des Geräts kompiliert ist.
- Unterstützung für Android 2.2 wurde hinzugefügt, einschließlich einer neuen stabilen API für den Zugriff auf die Pixelpuffer von
Bitmap
-Objekten aus nativem Code.
- Das neue
Android NDK r3 (März 2010)
- Allgemeine Hinweise:
-
- Unterstützung für native OpenGL ES 2.0-Bibliotheken wird hinzugefügt.
- Fügt eine Beispielanwendung (
hello-gl2
) hinzu, die die Verwendung von OpenGL ES 2.0-Vertex- und Fragment-Shadern veranschaulicht. - Die Toolchain-Binärdateien wurden für dieses Release mit GCC 4.4.0 aktualisiert. Damit sollte etwas kompakterer und effizienterer Maschinencode als mit der vorherigen Version (4.2.1) generiert werden. Das NDK enthält weiterhin die 4.2.1-Binärdateien, die Sie optional zum Erstellen Ihres Maschinencodes verwenden können.
Android NDK r2 (September 2009)
Ursprünglich als „Android 1.6 NDK, Release 1“ veröffentlicht.
- Allgemeine Hinweise:
-
- Unterstützung für native OpenGL ES 1.1-Bibliotheken wird hinzugefügt.
- Fügt eine Beispielanwendung (
san-angeles
) hinzu, die 3D-Grafiken über die nativen OpenGL ES-APIs rendert und den Aktivitätslebenszyklus mit einemGLSurfaceView
-Objekt verwaltet.
Android NDK r1 (Juni 2009)
Ursprünglich als „Android 1.5 NDK, Release 1“ veröffentlicht.
- Allgemeine Hinweise:
-
- Enthält Compilerunterstützung (GCC) für ARMv5TE-Befehle, einschließlich Thumb-1-Befehle.
- Enthält Systemheader für stabile native APIs, Dokumentation und Beispielanwendungen.