Diese Seite enthält Informationen zu Änderungen in allen veröffentlichten stabilen Versionen des NDK. Informationen zum Herunterladen der neuesten stabilen Version des NDK oder einer derzeit verfügbaren Betaversion finden Sie auf der Seite NDK-Downloads.
Ausführlichere Informationen finden Sie in der Google-Gruppe android-ndk-announce. Wenn Sie auch keine Versionsankündigungen erhalten möchten, können Sie sich anmelden.
Android NDK r26 LTS (September 2023)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- KitKat (APIs 19 und 20) wird nicht mehr unterstützt.
Android NDK r25 LTS (Juli 2022)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- Umfasst Android 13-APIs.
- Aktualisierung von LLVM auf clang-r450784d, basierend auf der LLVM 14-Entwicklung.
Android NDK r24 (März 2022)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
Der GNU Assembler (GAS) wurde entfernt. Wenn Sie mit
-fno-integrated-as
erstellt haben, müssen Sie dieses Flag entfernen. Informationen dazu, wie Sie Assembly mit LLVM kompatibel machen können, finden Sie in den Clang-Migrationshinweisen. - GDB wurde entfernt. Verwenden Sie stattdessen LLDB. „ndk-gdb“ verwendet standardmäßig LLDB und Android Studio hat bisher nur LLDB unterstützt.
- Jelly Bean (APIs 16, 17 und 18) wird nicht mehr unterstützt. Das Mindestbetriebssystem, das vom NDK unterstützt wird, ist KitKat (API-Level 19).
- Nicht-Neon-Geräte werden nicht mehr unterstützt. Eine sehr geringe Anzahl sehr alter Geräte unterstützt Neon nicht, sodass die meisten Anwendungen abgesehen von der Leistungsverbesserung keine Auswirkungen darauf haben.
- Die Build-Unterstützung für RenderScript 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 mit
Android NDK r23 LTS (August 2021)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
GNU-binutils, mit Ausnahme von GNU Assembler (GAS), wurden entfernt. GAS wird im nächsten Release entfernt. Wenn Sie mit
-fno-integrated-as
arbeiten, melden Sie Fehler, falls das Flag nicht entfernt werden kann. -
Die GDB wird nicht mehr unterstützt. GDB wird aus dem nächsten Release entfernt.
Verwenden Sie stattdessen LLDB. Beachten Sie, dass
ndk-gdb
standardmäßig LLDB verwendet. - NDK r23 ist der letzte Release, der 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. Daher werden die meisten Anwendungen abgesehen von der Leistungsverbesserung nichts bemerken.
- Jelly Bean (APIs 16, 17 und 18) wird in der nächsten NDK-Version nicht mehr unterstützt. Das Mindestbetriebssystem, das vom NDK für r24 unterstützt wird, ist KitKat (API-Level 19).
-
GNU-binutils, mit Ausnahme von GNU Assembler (GAS), wurden entfernt. GAS wird im nächsten Release entfernt. Wenn Sie mit
Android NDK r22b (März 2021)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
GNU binutils wurde verworfen und wird in einem zukünftigen NDK-Release entfernt. Der GNU-Assembler (
as
) ist ein Teil davon. Wenn Sie mit-fno-integrated-as
arbeiten, melden Sie Fehler, falls das Flag nicht entfernt werden kann. Wenn duas
direkt nutzt, verwende stattdessenclang
. - LLD ist jetzt die Standardverknüpfung. ndk-build und unsere CMake-Toolchain-Datei wurden ebenfalls mithilfe von llvm-ar und llvm-strip zu migriert.
- „ndk-gdb“ verwendet jetzt „lldb“ als Debugger. „gdb“ wurde eingestellt und wird in einer zukünftigen Version entfernt. Für ein Fallback auf gdb verwenden Sie die Option „--no-lldb“. Aber melde den Fehler und erläutere, warum du lldb nicht verwenden konntest.
-
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 fälschlicherweise ausgeführt, wenn ein nicht vorhandener Pfad auf alten Geräten übergeben wird.
-
Problem 1258:
-
GNU binutils wurde verworfen und wird in einem zukünftigen NDK-Release entfernt. Der GNU-Assembler (
Android NDK r21e LTS (Januar 2021)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
32-Bit-Windows wird nicht mehr unterstützt. Dies hat keine Auswirkungen auf die große Mehrheit der Nutzer. Wenn Sie noch NDK-Anwendungen aus 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 zu diesem Thema.
-
LLD ist jetzt zum Testen verfügbar.
AOSP verwendet standardmäßig LLD und der NDK folgt (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. Beachten Sie, dass sich Problem 843 auf Builds auswirkt, die LLD mit „binutils“-Strip und „objcopy“ verwenden, nicht mit „llvm-strip“ und „llvm-objcopy“. -
Die Installationspfade der Legacy-Toolchain werden in den kommenden Releases entfernt. Diese Pfade sind seit dem NDK r19 veraltet und nehmen viel Platz im NDK ein. Folgende Pfade werden entfernt:
- Plattformen
- Quellen/cxx-stl
- Sysroot
- Toolchains (mit Ausnahme von Toolchains/llvm)
make_standalone_toolchain.py
-Nutzer sind nicht betroffen (obwohl dieses Skript seit r19 nicht mehr benötigt wird). Informationen zur Migration vom Legacy-Toolchain-Layout finden Sie im Build-Systemadministrator-Leitfaden für die von Ihnen verwendete NDK-Version. - Ab August 2019 ist beim Hochladen eines APKs für den Play Store 64-Bit-Unterstützung erforderlich. Beginnen Sie jetzt mit der Mitnahme, um Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
- In unserem Wiki und auf unserer Website steht jetzt ein signiertes und notarisiertes macOS-App-Bundle zum Download zur Verfügung. Da nur Bundles RPATHs und die Pass-Notarisierung verwenden können, kann das herkömmliche NDK-Paket für macOS nicht beglaubigt werden. Das SDK verwendet weiterhin das herkömmliche Paket, da für das App-Bundle Layoutänderungen erforderlich sind, die dazu führen, dass es nicht mit Android Studio kompatibel ist. Der NDK wird nicht unter Quarantäne gestellt, wenn er über den SDK-Manager heruntergeladen wird, daher wird dies derzeit von Gatekeeper zugelassen. Der SDK-Manager ist derzeit die zuverlässigste Methode, um den NDK für macOS zu erhalten.
-
Android NDK r20b (Juni 2019)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
LLD ist jetzt zum Testen verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und der NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
-fuse-ld=lld
übergeben. - Ab August 2019 ist beim Hochladen eines APKs für den Play Store 64-Bit-Unterstützung erforderlich. Beginnen Sie jetzt mit der Mitnahme, um Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
- Android Q APIs wurden hinzugefügt.
-
LLD ist jetzt zum Testen verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und der NDK wird folgen (Zeitachse unbekannt). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
Android NDK r19c (Januar 2019)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
-
Entwickler sollten ihre Apps mit LLD testen. AOSP verwendet jetzt standardmäßig LLD und der NDK verwendet es im nächsten Release standardmäßig. BFD und Gold werden entfernt, sobald LLD einen Releasezyklus ohne größere ungelöste Probleme durchlaufen hat (geschätzter r21). Testen Sie 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 unter Windows auch keine komprimierten Symbole generieren. Dies kann jedoch zu einem Problem werden, wenn Artefakte verwendet werden, die aus Darwin oder Linux erstellt wurden. - Ab August 2019 ist beim Hochladen eines APKs für den Play Store 64-Bit-Unterstützung erforderlich. Beginnen Sie jetzt mit der Mitnahme, um Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
-
Problem 780: Eigenständige Toolchains sind jetzt nicht mehr erforderlich. Clang, binutils, der Sysroot und andere Toolchain-Komponenten sind jetzt alle in
$NDK/toolchains/llvm/prebuilt/<host-tag>
installiert und Clang findet sie automatisch. Statt eine eigenständige Toolchain für API 26 ARM zu erstellen, rufen Sie den Compiler stattdessen direkt über den NDK auf:$ $NDK/toolchains/llvm/prebuilt/
Bei r19 wird die Toolchain auch im alten Pfad installiert, damit Build-Systeme eine Möglichkeit haben, sich an das neue Layout anzupassen. Die alten Pfade werden in R20 entfernt. Das Skript/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
wird nicht entfernt. Es ist jetzt nicht mehr erforderlich und gibt eine Warnung mit den oben genannten Informationen aus. Das Skript bleibt jedoch bestehen, um vorhandene 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 Betreuer von Build-Systemen von Drittanbietern wichtig, die jetzt in der Lage sein sollten, Android-spezifischen Code zu löschen. Weitere Informationen finden Sie im Leitfaden Systemadministrator 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-Skripts, die an Clang weitergeleitet wurden, wurden entfernt, da sie nicht ausreichend funktionsfähig sind, um ersetzt zu werden.
-
Entwickler sollten ihre Apps mit LLD testen. AOSP verwendet jetzt standardmäßig LLD und der NDK verwendet es im nächsten Release standardmäßig. BFD und Gold werden entfernt, sobald LLD einen Releasezyklus ohne größere ungelöste Probleme durchlaufen hat (geschätzter r21). Testen Sie LLD in Ihrer App, indem Sie beim Verknüpfen
Android NDK r18b (September 2018)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- GCC wurde entfernt.
-
LLD ist jetzt zum Testen verfügbar.
AOSP wechselt derzeit zur standardmäßigen Verwendung von LLD und der 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.
- ICS (Android 14 und Android 15) wird nicht mehr unterstützt. Anwendungen, die ausführbare Dateien verwenden, müssen nicht mehr sowohl eine PIE- als auch eine Nicht-PIE-ausführbare Datei bereitstellen.
- Ab August 2019 ist beim Hochladen eines APKs für den Play Store 64-Bit-Unterstützung erforderlich. Beginnen Sie jetzt mit der Mitnahme, um Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
Android NDK r17c (Juni 2018)
Änderungsprotokoll- Downloads
-
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- GCC wird nicht mehr unterstützt. Sie wird in NDK r18 entfernt.
-
libc++ ist jetzt der Standard-STL für CMake und eigenständige Toolchains. Wenn Sie manuell einen anderen STL ausgewählt haben, sollten Sie unbedingt zu
libc++
wechseln. Beachten Sie, dass „ndk-build“ immer noch standardmäßig kein STL verwendet. Weitere Informationen finden Sie in diesem Blogpost. - gnustl und stlport sind veraltet und werden in NDK r18 entfernt.
- ARMv5 (armeabi), MIPS und MIPS64 werden nicht mehr unterstützt. Der Versuch, eines dieser ABIs zu erstellen, führt zu einem Fehler.
- Die Unterstützung für ICS (Android 14 und Android 15) wird von R18 entfernt.
- Ab August 2019 ist beim Hochladen eines APKs für den Play Store 64-Bit-Unterstützung erforderlich. Beginnen Sie jetzt mit der Mitnahme, um Überraschungen zu vermeiden. Weitere Informationen finden Sie in diesem Blogpost.
Android NDK r16b (Dezember 2017)
Änderungsprotokoll- Downloads
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- Die eingestellten Header wurden entfernt. Unified Headers heißen jetzt einfach „The Headers“. Tipps zur Migration finden Sie unter Migrationshinweise zu Unified Headers.
- GCC wird nicht mehr unterstützt. Sie wird noch nicht vom NDK entfernt, erhält aber keine Backports mehr. Es kann erst entfernt werden, nachdem libc++ stabil genug und der Standardwert geworden ist, da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind. Sie wird entfernt, wenn die anderen STLs in r18 entfernt werden.
libc++
hat die Betaphase durchlaufen und ist jetzt der bevorzugte STL im NDK. Ab r17 istlibc++
der Standard-STL für CMake und eigenständige Toolchains. Wenn Sie manuell einen anderen 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 benannt sind, und werden von „all“, „all32“ und „all64“ eingeschlossen. Die Unterstützung für diese Elemente wurde in Version 17 entfernt. Sowohl CMake als auch „ndk-build“ geben eine Warnung aus, wenn Sie auf eines dieser ABIs abzielen.
- APIs
-
Native APIs für Android 8.1 wurden hinzugefügt. Weitere Informationen zu diesen APIs finden Sie in der Übersicht zu nativen APIs.
Weitere Informationen zu Neuerungen und Änderungen in diesem Release finden Sie im Änderungsprotokoll.
Android NDK r15c (Juli 2017)
Änderungsprotokoll- Downloads
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- Einheitliche Header sind standardmäßig aktiviert. Informationen zur Verwendung dieser Header finden Sie unter Einheitliche Header.
- GCC wird nicht mehr unterstützt. Es wurde noch nicht vom NDK entfernt, erhält aber keine Backports mehr. Es kann erst entfernt werden, nachdem libc++ sich ausreichend stabilisiert hat und der Standardwert ist, da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind.
- Android 2.3 (
android-9
) wird nicht mehr unterstützt. Das Mindest-API-Level-Ziel im NDK ist jetzt Android 4.0 (android-14
). Wenn fürAPP_PLATFORM
ein niedrigerer Wert alsandroid-14
festgelegt ist, wird stattdessenandroid-14
verwendet. - CMake in NDK unterstützt jetzt das Erstellen von Assembly-Code, der in YASM geschrieben wurde, um auf x86- und x86-64-Architekturen ausgeführt zu werden. Weitere Informationen finden Sie unter Assemblercode erstellen.
Hinweis : Die verworfenen Header werden in einem zukünftigen Release entfernt. Wenn Probleme mit diesen Headern auftreten, melden Sie bitte den Fehler.
Tipps zur Migration finden Sie in den Migrationshinweisen zu einheitlichen Headern.
- APIs
-
Native APIs für Android 8.0 wurden hinzugefügt. Weitere Informationen zu diesen APIs finden Sie in der Übersicht zu nativen APIs.
Weitere Informationen zu Neuerungen und Änderungen in diesem Release finden Sie im Änderungsprotokoll.
Android NDK r14b (März 2017)
Änderungsprotokoll- Downloads
- Downloads für diesen Release sind hier verfügbar.
- Ankündigungen
-
- Einheitliche Header:In diesem Release werden Plattformheader eingeführt, die mit der Android-Plattform synchronisiert und immer auf dem neuesten Stand und genau gehalten werden. Fehlerkorrekturen, die nur Header betreffen, betreffen jetzt alle API-Ebenen. Durch die Einführung einheitlicher Header werden Inkonsistenzen in früheren NDK-Releases wie die folgenden behoben:
- Die Überschriften in M und N waren eigentlich Überschriften für L.
- Funktionsdeklarationen in Headern entsprachen nicht genau den Plattformebenen. In den Headern wurden nicht vorhandene Funktionen deklariert oder verfügbare Funktionen konnten nicht deklariert werden.
- In einigen der alten API-Ebenen fehlten oder falsche Konstanten, die in neueren API-Ebenen vorhanden waren.
Diese neuen einheitlichen Header sind nicht standardmäßig aktiviert. Informationen zum Aktivieren und Verwenden dieser Header finden Sie unter Einheitliche Header.
- Einstellung von GCC:In diesem Release wird die aktive Unterstützung für GCC eingestellt. GCC wurde noch nicht vom NDK entfernt, erhält jedoch keine Backports mehr. Da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind, wird GCC erst dann vollständig entfernt, wenn libc++ stabil genug ist und als Standardeinstellung verwendet wird.
- Einheitliche Header:In diesem Release werden Plattformheader eingeführt, die mit der Android-Plattform synchronisiert und immer auf dem neuesten Stand und genau gehalten werden. Fehlerkorrekturen, die nur Header betreffen, betreffen jetzt alle API-Ebenen. Durch die Einführung einheitlicher Header werden Inkonsistenzen in früheren NDK-Releases wie die folgenden behoben:
Weitere Informationen zu Neuerungen und Änderungen in diesem Release finden Sie im Änderungsprotokoll.
Android NDK r13b (Oktober 2016)
- Downloads
- Downloads für diesen Release finden Sie hier.
- Ankündigungen
-
- GCC wird nicht mehr unterstützt. Es wird noch nicht vom NDK entfernt, erhält aber keine Backports mehr. Sie kann erst entfernt werden, nachdem libc++ stabil genug und der Standardwert geworden ist, da einige Teile von gnustl immer noch nicht mit Clang kompatibel sind. Danach wird sie wahrscheinlich entfernt.
- simpleperf ist ein CPU-Profiler für Android.
- R13b
-
-
Zusätzliche Fehlerkorrekturen für fehlende
__cxa_bad_cast
.
-
Zusätzliche Fehlerkorrekturen für fehlende
- Logo: NDK
-
NDK_TOOLCHAIN_VERSION
verwendet jetzt standardmäßig Clang.- libc++ wurde auf r263688 aktualisiert.
- Wir haben das Update auf eine (fast) saubere Upstream-Version zurückgesetzt. Dadurch sollten eine Reihe von Fehlern beseitigt werden, aber wir müssen noch libandroid_support bereinigen, bevor wir es als Standard empfehlen können.
-
make-standalone-toolchain.sh
ist jetzt einfach ein Wrapper um 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 (mips64r2, mips32r6, mips32r2 und x32) wurden entfernt. Es könnte immer noch Nachzügler geben.
- Probleme mit „crtbegin_static.o“, die beim Erstellen einer statischen ausführbaren Datei für ARM android-21+ zu fehlenden atexit zum Zeitpunkt der Verknüpfung führten, wurden behoben: Problem 132
- Die CMake-Toolchain-Datei wurde in „build/cmake/android.empfohlen.cmake“ hinzugefügt.
- Bekannte Probleme
-
- Dies ist keine umfassende Liste aller ausstehenden Fehler.
- Eigenständige Toolchains, die libc++ und GCC verwenden, funktionieren nicht. Dies 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 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 von 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 einem nachfolgenden Release entfernen. - Das Skript
make-standalone-toolchain.sh
wird in R13 entfernt. Prüfen Sie, obmake_standalone_toolchain.py
Ihren Anforderungen entspricht. - Melden Sie Probleme an GitHub.
- Das Problem „
ndk-gdb.py
“ wurde behoben. (Problem 118) -
Wir haben
NdkCameraMetadataTags.h
aktualisiert, sodass sie keinen ungültigen enum-Wert mehr enthält. - Ein Fehler im ndk-build, der zu falschen Warnungen für statische Bibliotheken mit libc++ führte, wurde behoben. Weitere Informationen zu dieser Änderung finden Sie hier.
- Die OpenSUSE-Header wurden für android-24 aktualisiert.
- Logo: NDK
- Wir haben die Unterstützung für armeabi-v7a-hard ABI entfernt. Weitere Informationen finden Sie in dieser Erläuterung.
- Alle Sysroots für Pre-GB-Plattformebenen wurden entfernt. Wir haben die Unterstützung für sie in r11 eingestellt, sie aber nicht entfernt.
- Die Ausnahmebehandlung bei Verwendung von c++_shared in ARM32 funktioniert jetzt größtenteils. Der Unwinder ist jetzt mit jedem verknüpften Objekt und nicht mit libc++ selbst verknüpft. Weitere Informationen zu dieser Ausnahmebehandlung finden Sie unter Bekannte Probleme.
- Standard-Compiler-Flags wurden bereinigt.
(Problem 27)
- Umfassende Informationen zu den Änderungen finden Sie in dieser Änderungsliste.
- Eine Python-Implementierung von eigenständigen Toolchains wurde hinzugefügt:
build/tools/make_standalone_toolchain.py
.- Windows-Nutzer benötigen Cygwin nicht mehr, um diese Funktion zu verwenden.
- Da wir den Bash-Flavor in r13 entfernen, sollten Sie den neuen jetzt testen.
-fno-limit-debug-info
wurde für Clang-Builds zur Fehlerbehebung standardmäßig aktiviert. Durch diese Änderung sollte die Debug-Funktion mit LLDB verbessert werden.--build-id
ist jetzt standardmäßig aktiviert.- Die Build-ID wird jetzt in Berichten zu nativen Abstürzen angezeigt, sodass Sie leicht erkennen können, welche Version Ihres Codes ausgeführt wurde.
NDK_USE_CYGPATH
sollte keine Probleme mehr mit libgcc verursachen. (Problem 195486 von Android)- Die Optionen
-Wl
,--warn-shared-textrel
und-Wl,--fatal-warnings
sind jetzt standardmäßig aktiviert. Wenn Sie freigegebene Textverschiebungen verwenden, kann Ihre App unter Android 6.0 (API-Level 23) oder höher nicht geladen werden. Textverschiebungen waren noch nie für 64-Bit-Anwendungen erlaubt. - 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.
- Choreographer API zu 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.- Klamotten
- Clang wurde auf 3.8svn (r256229, Build 2812033) aktualisiert.
- Die ausführbaren Dateien
clang.exe
undclang++.exe
im 32-Bit-Windows-Paket sind in Wirklichkeit 64-Bit. Die ausführbare 32-Bit-Datei heißtclang_32.exe
.
- Die ausführbaren Dateien
- GCC
- Synchronisiert mit ChromeOS GCC @ google/gcc-4_9 r227810.
- Zurückportiertes Desinfektionsmittel-Patch von ToT (r231296).
- Problem mit libatomic behoben, sodass
ifuncs
nicht verwendet wird. (Problem 31) - Binutils
- Die Meldungen „Erratum 843419 gefunden und behoben“ wurden stummgeschaltet.
- Die Option
--long-plt
wurde eingeführt, um den internen Verknüpfungsfehler zu beheben, der beim Verknüpfen großer arm32-Binärdateien auftritt. - Falsche Laufzeit-Stubs für AArch64 wurden behoben. Dies führte dazu, dass Jump-Adressen für sehr große DSOs falsch berechnet wurden.
- Einführung der Standardoption
--no-apply-dynamic
zur Umgehung eines Dynamic Linker-Fehlers in früheren Android-Releases. - NDK r11 KI für
dynamic_cast
funktioniert nicht mit Clang. Wir haben x86,stlport_static
und die Optimierung korrigiert. - GDB
- Aktualisierung auf GDB 7.11. Weitere Informationen finden Sie auf der Seite GDB News.
- Einige Fehlerkorrekturen für
ndk-gdb.py
. - Bekannte Probleme
- x86 ASAN funktioniert immer noch nicht. Weitere Informationen finden Sie in der Diskussion zu dieser Änderungsliste.
- Das Abschalten von Ausnahmen mit
c++_shared
funktioniert weiterhin nicht für ARM unter Android 2.3 (API-Level 9) oder Android 4.0 (API-Level 14). - Bionic-Header und -Bibliotheken für Android 6.0 (API-Level 23) und Android 7.0 (API-Level 24) werden trotz Android-24 noch nicht offengelegt. Diese Plattformen sind weiterhin die Header und Bibliotheken von Android 5.0 (API-Level 21) (keine Regression von r11).
- RenderScript-Tools sind nicht vorhanden (keine Regression von r11). (Problem 7)
- Dieses Änderungsprotokoll ist nicht als umfassende Liste aller ausstehenden Fehler gedacht.
__thread
sollte diesmal funktionieren.
Android NDK r12 (Juni 2016)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Ankündigungen
- In einem zukünftigen Release wird der Befehl
ndk-build
standardmäßig Clang verwenden. GCC wird in einer späteren Version entfernt. - Das Skript
make-standalone-toolchain.sh
wird in einem zukünftigen Release entfernt. Wenn Sie dieses Skript verwenden, sollten Sie so bald wie möglich zumake_standalone_toolchain.py
migrieren. - Logo: NDK
- Die Unterstützung für 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. Wir haben die Unterstützung für sie in NDK r11 eingestellt, sie aber nicht entfernt.
- Die Ausnahmebehandlung bei der Verwendung von c++_shared in ARM32 wurde aktualisiert, damit es größtenteils funktioniert (siehe Bekannte Probleme). Der Unwinder ist jetzt mit jedem verknüpften Objekt und nicht mit libc++ selbst verknüpft.
- Die Standardcompiler-Flags wurden entfernt (NDK-Problem 27). Details zu dieser Aktualisierung finden Sie unter Änderung 207721.
- Eine Python-Implementierung von eigenständigen Toolchains wurde in
build/tools/make_standalone_toolchain.py
hinzugefügt. Unter Windows benötigen Sie Cygwin nicht mehr, um diese Funktion zu nutzen. Der Bash-Flavor wird in einem zukünftigen Release entfernt. Testen Sie daher die neue Version jetzt. - Konfigurierte Clang-Builds zur Fehlerbehebung, für die die Option
-fno-limit-debug-info
standardmäßig aktiviert ist Diese Änderung ermöglicht ein besseres Debugging mit LLDB. --build-id
wurde als Standardoption aktiviert. Mit dieser Option wird in den Berichten zu nativen Abstürzen eine Kennung angezeigt. So können Sie leicht erkennen, welche Version Ihres Codes ausgeführt wurde.- Ein Problem mit
NDK_USE_CYGPATH
wurde behoben, sodass es keine Probleme mehr mit libgcc verursacht (Problem 195486). - Die folgenden Optionen wurden standardmäßig aktiviert:
-Wl,--warn-shared-textrel
und-Wl,--fatal-warnings
. Wenn Sie freigegebene Texte verschieben, wird Ihre App unter Android 6.0 (API-Level 23) und höher nicht geladen. Diese Konfiguration wurde noch nie für 64-Bit-Anwendungen zugelassen. - Es wurden einige Probleme behoben, sodass 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.
- Choreographer API zu Android-24 hinzugefügt.
- Es wurden libcamera2 APIs für Geräte hinzugefügt, die die
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
-Funktionsstufe oder höher unterstützen. Weitere Informationen finden Sie in der Referenz zuCameraCharacteristics
. - Klamotten
- Clang wurde auf 3.8svn (r256229, Build 2812033) aktualisiert. Die ausführbaren Dateien
clang.exe
undclang++.exe
im 32-Bit-Windows-Paket sind in Wirklichkeit 64-Bit. Die ausführbare 32-Bit-Datei heißtclang_32.exe
. __thread
wurde korrigiert, sodass es diesmal in Echtzeit funktioniert.- GCC
- Der Compiler wurde mit ChromeOS GCC @ google/gcc-4_9 r227810 synchronisiert.
- Zurückportiertes Desinfektionsmittel-Patch von ToT (r231296).
- Problem mit der Verwendung von ifuncs für
libatomic
behoben (NDK-Problem 31). - Binutils
- Die Meldungen „Erratum 843419 gefunden und behoben“ wurden stummgeschaltet.
- Die Option
--long-plt
wurde eingeführt, um einen internen Verknüpfungsfehler beim Verknüpfen sehr großer arm32-Binärdateien zu beheben. - Falsche Laufzeit-Stubs für
AArch64
wurden korrigiert. Dieses Problem führte dazu, dass Jump-Adressen für sehr große Dynamic Shared Objects (DSOs) falsch berechnet wurden. - Einführung der Standardoption
--no-apply-dynamic
zur Umgehung eines Dynamic Linker-Fehlers in früheren Android-Releases. - Ein bekanntes Problem mit NDK r11 wurde behoben, bei dem
dynamic_cast
nicht mit Clang, x86, stlport_static und der Optimierung funktionierte. - GDB
- Aktualisierung auf GDB-Version 7.11. Weitere Informationen zu dieser Version finden Sie unter GDB News.
- Einige Fehler im
ndk-gdb.py
-Skript wurden behoben. - Bekannte Probleme
- Der Address Sanitizer (ASAN) von x86 funktioniert derzeit nicht. Weitere Informationen findest du unter Problem 186276.
- Das Abschalten von Ausnahmen mit
c++_shared
funktioniert nicht für ARM unter Android 2.3 (API-Level 9) oder Android 4.0 (API-Level 14). - Bionic-Header und -Bibliotheken für Android 6.0 (API-Level 23) und höher wurden trotz Android-24 noch nicht offengelegt. Diese Plattformen haben weiterhin die Header und Bibliotheken von Android 5.0 (API-Level 21), was mit NDK r11 konsistent ist.
- Die RenderScript-Tools sind nicht vorhanden, was mit NDK r11 übereinstimmt. (NDK-Problem 7)
- In der
NdkCameraMetadataTags.h
-Header-Datei wurde der enum-WertACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
des Kamera-Metadaten-Tags versehentlich aufgeführt und wird im nächsten Release entfernt. Verwenden Sie stattdessen den WertACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (März 2016)
- Änderungen
- Zusätzliche Korrekturen im
ndk-gdb.py
-Skript wurden angewendet. - Der Option
--attach
desndk-gdb
-Befehls wurde ein optionales Argument für den Paketnamen hinzugefügt. (Problem 13) - Ungültige Toolchain-Pfade für 32-Bit-Windows-Plattform wurden 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)
- Logo: NDK
-
- Wichtige Ankündigungen
- Unser Tracker für Programmfehler wurde zu GitHub verschoben.
- Änderungen
- Das Problem „
ndk-gdb.py
“ wurde behoben. Es war in r11 vollständig zurückgegangen. ndk-gdb
für Mac behobene Probleme.- Es wurden weitere Tastenkombinationen auf oberster Ebene für Befehlszeilentools hinzugefügt:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
: Diesen Befehl fehlte in früheren Releases.
- Eigenständige Toolchains für libc++ wurden korrigiert, in denen
__cxxabi_config.h
fehlte. - Die Hilfedokumentation für
--toolchain
inmake-standalone-toolchain.sh
wurde korrigiert.
- Das Problem „
- Wichtige Ankündigungen
- Klamotten
-
- Fehler
- Anders als in den Versionshinweisen r11 funktioniert
__thread
nicht. Das liegt daran, dass in der von uns ausgelieferten Version von Clang eine Fehlerkorrektur zur emulierten TLS-Unterstützung fehlt.
Android NDK r11 (März 2016)
- Klamotten
-
- Wichtige Ankündigungen
- Wir empfehlen dringend, zu Clang zu wechseln.
- Wenn im NDK Probleme mit Clang auftreten, können Sie hier Programmfehler melden. Bei allgemeineren Clang-Problemen können Sie der Anleitung auf dieser Seite folgen, um Fehler zu melden.
- Clang wurde auf 3.8svn (r243773, Build 2481030) aktualisiert.
- Diese Version ist ein fast reiner Upstream-Clang.
- Das für Windows herunterladbare NDK-Paket für 64-Bit enthält eine 32-Bit-Version von Clang.
- Wir empfehlen dringend, zu Clang zu wechseln.
- Ergänzungen
- Clang unterstützt jetzt emuliertes 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, jedoch 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. - Emulierte TLS funktioniert noch nicht mit Aarch64, wenn über eine gemeinsam genutzte Bibliothek auf TLS-Variablen zugegriffen wird.
- Der Compiler unterstützt jetzt
- Clang unterstützt jetzt emuliertes TLS.
- Wichtige Ankündigungen
- GCC
-
- Wichtige Ankündigungen
- GCC im NDK wurde zugunsten von Clang eingestellt.
- Das NDK wird weder auf 5.x aktualisiert noch akzeptiert es nicht kritische Backports.
- Die Wartung von Fehlkompilierungen und internen Compiler-Fehlern in Version 4.9 erfolgt von Fall zu Fall.
- Entfernte Elemente
- GCC 4.8 wurde entfernt. Für alle Ziele wird jetzt GCC 4.9 verwendet.
- Sonstige Änderungen
- google/gcc-4_9 mit r224707 synchronisiert. Zuvor wurde er mit r214835 synchronisiert.
- Logo: 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. Du findest sie stattdessen auf der Website für Android-Entwickler.
- Ergänzungen
android-23
wurde eine native Tracing API hinzugefügt.android-23
wurde eine native Multinetwork API hinzugefügt.- libc, m und dl wurden aktiviert, um versionierte Symbole ab API-Level 21 bereitzustellen.
- Vulkan-Header und -Bibliothek wurden zu API-Level N hinzugefügt.
- Entfernte Elemente
- Keine Unterstützung mehr für
_WCHAR_IS_8BIT
. - sed. entfernt.
- Mclinker wurde entfernt.
- Perl 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.
- Keine Unterstützung mehr für
- Sonstige Änderungen
- Die eigenständigen ARM-Toolchains wurden in die Standardeinstellung „arm7“ geändert.
- 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 die Bionik verursachen, verhindern keine App-Builds mehr.
- Es wurde ein segerror behoben, der auftrat, wenn ein Binärprogramm Ausnahmen über gabi++ auslöste. (Problem 179410)
- Der Inline-Namespace von libc++ wurde zu
std::__ndk1
geändert, um ODR-Probleme mit der Plattform libc++ zu vermeiden. - Alle libc++ Bibliotheken werden jetzt mit libc++abi erstellt.
- Standardeinstellung
APP_PLATFORM
wurde zu „Gingerbread“ geändert.- Gehen Sie davon aus, dass die Unterstützung für Froyo und ältere Versionen in einer zukünftigen Version nicht mehr verfügbar sein wird.
- Die eigenständigen ARM-Toolchains wurden in die Standardeinstellung „arm7“ geändert.
- Gabi++-Struktur
_Unwind_Exception
für 64 Bit aktualisiert. - cpufeatures wurden um die folgenden Funktionen hinzugefügt:
- Erkennt SSE4.1 und SSE4.2.
- Erkennt CPU-Features auf x86_64.
- libc++abi wurde auf den Upstream r231075 aktualisiert.
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
unduchar.h
von ToT Bionic aktualisiert.sys/cdefs.h
wurde auf allen API-Ebenen synchronisiert.fegetenv and fesetenv
für Verzweigung korrigiert.- Größe/Ausrichtung des Endpunkts von
crtend_*
für mips64 und x86_64 wurde korrigiert.
- Wichtige Ankündigungen
- Binutils
-
- Ergänzungen
- Neue Option hinzugefügt:
--pic-veneer
.
- Neue Option hinzugefügt:
- Entfernte Elemente
- Das 32-Bit-Windows-Paket enthält ld.gold nicht mehr. Sie können stattdessen ld.gold aus dem 64-Bit-Windows-Paket erhalten.
- Änderungen
- Einheitliche binutils-Quelle zwischen Android und Chromium OS. Weitere Informationen zu dieser Änderung finden Sie hier.
- Verbesserte Zuverlässigkeit von Gold für aarch64. Verwende
-fuse-ld=gold
bei der Verknüpfung, um Gold anstelle von BFd zu verwenden. Die Standardeinstellung wird wahrscheinlich im nächsten Release geändert. - Verbesserte Verknüpfungszeit für große Binärdateien für das Gold ARM-Back-End (bis zu 50% weniger Verknüpfungszeit für debug-fähige Chrome-Browser)
- Ergänzungen
- GDB
-
- Entfernte Elemente
- „ndk-gdb“ zugunsten von „ndk-gdb.py“ entfernt.
- Änderungen
- gdb auf Version 7.10 aktualisiert.
- Verbesserte Leistung
- Verbesserte Fehlermeldungen.
- Relative Projektpfade wurden festgelegt.
- Beenden des gdbserver im Hintergrund durch Strg + C wurde gestoppt.
- Verbesserte Windows-Unterstützung.
- Entfernte Elemente
- YASM
-
- Änderungen
- YASM wurde auf Version 1.3.0 aktualisiert.
- Änderungen
- Bekannte Probleme
-
- x86 ASAN funktioniert derzeit nicht. Weitere Informationen finden Sie in der Diskussion.
- Die Kombination aus Clang, x86, stlport_static und Optimierungsebenen, die höher als
-O0
sind, führt zu Testfehlern mitdynamic_cast
. Weitere Informationen finden Sie in den Kommentaren. - Die Ausnahmebehandlung schlägt häufig mit c++_shared auf ARM32 fehl. Die Ursache ist eine Inkompatibilität zwischen dem LLVM-Entwinder, den libc++abi für ARM32 und libgcc verwendet. Dieses Verhalten ist keine Regression von r10e.
Android NDK r10e (Mai 2015)
- Downloads
- Downloads für diesen Release sind hier archiviert.
- Wichtige Änderungen:
-
- Die Problemumgehung für Cortex-A53 Erratum 843419 wurde in die
aarch64-linux-android-4.9
-Verknüpfung integriert. Weitere Informationen zu dieser Problemumgehung finden Sie unter Problemumgehung für Cortex-a53 erratum 843419. - Clang 3.6 wurde hinzugefügt.
NDK_TOOLCHAIN_VERSION=clang
wählt jetzt diese Version von Clang standardmäßig aus. - Clang 3.4 wurde entfernt.
- GCC 4.6 wurde entfernt.
- Multithreading-Unterstützung in
ld.gold
für alle Architekturen implementiert. Es kann jetzt mit oder ohne Unterstützung für Multithreading verknüpft werden. In der Standardeinstellung ist dies nicht möglich.- Verwenden Sie die Option
--threads
, um Multithreading zu kompilieren. - Verwenden Sie die Option
--no-threads
, um ohne Multithreading zu kompilieren.
- Verwenden Sie die Option
- Aktualisierung von GDB/gdbserver auf Version 7.7 für alle Architekturen.
- Das NDK-Paket für das 32-Bit-Darwin wurde entfernt.
- Die Problemumgehung für Cortex-A53 Erratum 843419 wurde in die
- Wichtige Fehlerkorrekturen:
-
- Ein Absturz wurde behoben, der auftrat, wenn sich OpenMP-Schleifen außerhalb des Hauptthreads befanden.
- Ein interner GCC 4.9-Compiler-Fehler (ICE) wurde behoben, der auftrat, wenn der Nutzer
#pragma GCC optimize ("O0")
deklariert hatte, in der Befehlszeile jedoch eine andere Optimierungsstufe angegeben wurde.pragma
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 LLVM-Vektorisierung
llvm.cttz.v2i64()
generiert, einer Anweisung ohne Gegenstück im ARM-Befehlssatz.
- Weitere Fehlerkorrekturen:
-
- Folgende Fehler in Header und Bibliothek wurden korrigiert:
- Problem mit
PROPERTY_*
inmedia/NdkMediaDrm.h
behoben. sys/ucontext.h
fürmips64
korrigiert.- Die Clang-Versionsprüfung für
__builtin_isnan
und__builtin_isinf
wurde verworfen. android-21/arch-mips/usr/include/asm/reg.h
undandroid-21/arch-mips64/usr/include/asm/reg.h
wurden hinzugefügt.- Es wurde eine falsche Warnung zu Array-Grenzen behoben, die von GCC 4.9 für x86 erzeugt wurde. Außerdem wurde die Warnung zu Array-Grenzen wieder aktiviert, die GCC 4.9 für ARM erzeugt hatte. Die Warnung für ARM war zuvor unbedingt deaktiviert.
- Clang 3.5 für
mips
undmips64
wurde korrigiert, um einen beschreibbaren.gcc_except_table
-Abschnitt zu erstellen, was dem GCC-Verhalten entspricht. Mit dieser Änderung lässt sich die folgende Verknüpfungswarnung vermeiden:.../ld: warning: creating a DT_TEXTREL in a shared object
- Eine Fehlerkorrektur für
compiler-rt
-Probleme, die bei der Kompilierung von Clang fürmips64
zu Abstürzen führten, wurde rückportiert. Weitere Informationen finden Sie unter LLVM-Problem 20098. - Behebung von Clang 3.5-Abstürzen, die bei Nicht-ASCII-Kommentaren auftraten. (Problem 81440)
- Problem mit
stlport collate::compare
behoben, sodass-1
und1
zurückgegeben wurden. Zuvor wurden beliebige vorzeichenbehaftete Zahlen zurückgegeben. ndk-gdb
für 64-Bit-ABIs korrigiert. (Problem 118300)- Der Absturz des HelloComputeNDK-Beispiels für RenderScript unter Android 4.4 (Android API-Level 19) wurde behoben. Weitere Informationen finden Sie auf dieser Seite.
libc++ __wrap_iter
für GCC wurde korrigiert. Weitere Informationen finden Sie unter LLVM-Problem 22355.- Die
.asm
-Unterstützung für ABIx86_64
wurde korrigiert. - Es wurde eine Problemumgehung für das GCC 4.8-
stlport
-Problem implementiert. (Problem 127773) - Das nachgestellte Verzeichnistrennzeichen
\\
wurde aus dem Projektpfad in Windows entfernt. (Problem 160584) - Ein
no rule to make target
-Fehler wurde behoben, der beim Kompilieren einer einzelnen.c
-Datei durch Ausführen desndk-build.cmd
-Befehls übergradle
auftrat. (Problem 66937) - Die Bibliotheken
libatomic.a
undlibgomp.a
, die in den folgenden Host-Toolchains gefehlt haben, wurden hinzugefügt:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Weitere Änderungen:
-
ld.gold
füraarch64
hinzugefügt. Die standardmäßige Verknüpfung bleibtld.bfd
. Wenn Sield.gold
explizit aktivieren möchten, fügen Sie-fuse-ld=gold
in die VariableLOCAL_LDFLAGS
oderAPP_LDFLAGS
ein.- Die MIPS- und MIPS64-Toolchains wurden mit
binutils-2.25
erstellt, was eine verbesserte R6-Unterstützung bietet. -fstandalone-debug
(vollständige Informationen zur Fehlerbehebung) wurde zur Standardoption für Clang gemacht.- Für die Toolchains ARM, AArch64, X86 und X86_64 wurde
-fstack-protector
durch-fstack-protector-strong
für GCC 4.9, Clang 3.5 und Clang 3.6 ersetzt. - Der Befehlszeilen-Switch
--package
wurde zundk-gdb
hinzugefügt, damit das Build-System den Paketnamen überschreiben kann. (Problem 56189) -
-mno-ldc1-stc1
für MIPS wurde eingestellt. Diese Option funktioniert möglicherweise nicht mit den neuen Optionen-fpxx
und-mno-odd-spreg
oder mit der FPXX-ABIs. - MIPS-MSA- und R6-Erkennung zu
cpu-features
hinzugefügt.
Android NDK r10d (Dezember 2014)
- Wichtige Änderungen:
-
- GCC 4.8 wurde zum Standard für alle 32-Bit-ABIs. GCC 4.6 wurde verworfen. Wird beim nächsten Release entfernt. Um das vorherige Verhalten wiederherzustellen, fügen Sie entweder
NDK_TOOLCHAIN_VERSION=4.6
zu ndk-build hinzu oder fügen Sie--toolchain=arm-linux-androideabi-4.6
hinzu, wenn Siemake-standalone-toolchain.sh
in der Befehlszeile ausführen. GCC 4.9 bleibt die Standardeinstellung für 64-Bit-ABIs. -mstackrealign
wird von allen x86[_64]-Toolchains nicht mehr standardmäßig hinzugefügt. Bei der NDK-Toolchain wird von einer 16-Byte-Stackausrichtung ausgegangen. Diese Regel wird von den standardmäßig verwendeten Tools und Optionen erzwungen. Ein Nutzer, der Assembly-Code schreibt, muss darauf achten, die Stackausrichtung beizubehalten und sicherzustellen, dass andere Compiler ebenfalls diese Regel einhalten. (GCC-Fehler 38496)- Die Address Sanitizer-Funktion wurde zur Clang 3.5-Unterstützung für die ARM- und x86-ABIs hinzugefügt. Weitere Informationen zu dieser Änderung finden Sie im Projekt Address Sanitizer.
- Einführung der Anforderung ab API-Level 21,
-fPIE -pie
beim Erstellen zu verwenden. Ab API-Level 16 verwendet ndk-buildPIE
bei der Erstellung. Diese Änderung hat eine Reihe von Auswirkungen, die in Problem 888 der Entwicklervorschau erläutert werden. Diese Auswirkungen gelten nicht für gemeinsam genutzte Bibliotheken.
- GCC 4.8 wurde zum Standard für alle 32-Bit-ABIs. GCC 4.6 wurde verworfen. Wird beim nächsten Release entfernt. Um das vorherige Verhalten wiederherzustellen, fügen Sie entweder
- Wichtige Fehlerkorrekturen:
-
- Weitere Fehlerkorrekturen im Zusammenhang mit
A53 Errata #835769 im Linker „aarch64-linux-android-4.9“. Dabei übergibt GCC die neue Option
--fix-cortex-a53-835769
, wenn-mfix-cortex-a53-835769
angegeben ist (standardmäßig aktiviert). Weitere Informationen finden Sie in dieser binutils-Nachricht und dieser binutils-Nachricht. - Die Behebung eines
sscanf/vsscanf
-Abhängens von libc++ wurde in API-Level 21 dokumentiert. Die Korrektur selbst wurde in r10c implementiert. (Problem 77988) - Ein AutoFDO-Absturz (
-fauto-profile
) wurde behoben, der bei GCC 4.9 bei Angabe von-Os
auftrat. (Problem 77571)
- Weitere Fehlerkorrekturen im Zusammenhang mit
A53 Errata #835769 im Linker „aarch64-linux-android-4.9“. Dabei übergibt GCC die neue Option
- Weitere Fehlerkorrekturen:
-
- Folgende Fehler in Header und Bibliothek wurden korrigiert:
posix_memalign
wurde zu API-Level 16 hinzugefügt. Außerdem wurde den API-Levels 16 bis 19 ein Prototyp instdlib.h
hinzugefügt. (Problem 77861)stdatomic.h
wurde korrigiert, sodass es<atomic>
nur für C++11 enthält.- Die folgenden Header für die eigenständige Verwendung wurden geändert:
sys/user.h
undgl2ext.h
,dlext.h
,fts.h
undsgidefs.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
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 keine der folgenden Bedingungen zutrifft: - Sie haben
LOCAL_ARM_MODE
aufarm
gesetzt. - Sie führen einen Debug-Build aus (mit Einstellungen wie
APP_OPTIM=debug
undAndroidManifest.xml
, dieandroid:debuggable="true"
enthalten), wobei der ARM-Modus die Standardeinstellung ist, um die Kompatibilität mit früheren Toolchains aufrechtzuerhalten. (Problem 74040) - Problem mit
LOCAL_SRC_FILES
in ndk-build behoben, sodass jetzt absolute Windows-Pfade verwendet wurden. (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 zur Behebung einer Korrektur für transitive
System.loadLibrary()
-Abhängigkeiten wurde überarbeitet. (Problem 41790) - Es wurde ein Problem behoben, durch das 64-Bit-Pakete unter Ubuntu 14.04 und OS X 10.10 (Yosemite) nicht extrahiert werden konnten. (Problem 78148)
- Ein Problem mit
LOCAL_PCH
zur Verbesserung der Clang-Unterstützung wurde behoben. (Problem 77575) - Die Warnung „Erfordert ausführbaren Stapel“ von „ld.gold“ wurde klarer formuliert. (Problem 79115)
unsigned long
, um user_regs_structure* zu strukturieren.
Android NDK r10c (Oktober 2014)
- Wichtige Änderungen:
-
- An der Downloadstruktur wurden folgende Änderungen vorgenommen:
- Jedes Paket enthält jetzt sowohl den 32- als auch den 64-Bit-Header, die Bibliotheken und die Tools für die jeweilige Plattform.
- STL-Bibliotheken mit Debugging-Informationen müssen nicht mehr separat heruntergeladen werden.
- Alles, was zuvor
Android-L
genannt wurde, wurde in die offizielle Release-Bezeichnungandroid-21
geändert. - Aktualisierung von GCC 4.9 durch Rebasing auf den Zweig
google
des GCC-Repositorys. Die Hauptunterschiede zur Upstream-Version von GCC 4.9 sind: - Die Option
-O2
aktiviert jetzt die Vektorisierung, ohne Schleifen-Peeling, aber mit aggressiverem Entrollen. - Verbesserungen bei FDO und LIPO
- Unterstützung für Clang 3.5 für alle Hosts hinzugefügt:
NDK_TOOLCHAIN_VERSION=clang
wählt jetzt Clang 3.5. Hinweise: - ARM und x86 verwenden standardmäßig den integrierten Assembler. Wenn dies Probleme verursacht, verwenden Sie
-fno-integrated-as
als Behelfslösung. - Clang 3.5 gibt weitere Warnungen für nicht verwendete Flags aus, z. B. die von GCC unterstützte
-finline-functions
-Option. - Durch Angabe der Option
art-on
kann beim Debugging auf einem Android 5.0-Gerät mit ART als virtuelle Maschine in den ART-Debugging-Modus gewechselt werden. Weitere Informationen finden Sie unterprebuilt/common/gdb/common.setup
im Verzeichnis, das den NDK enthält. - Keine Unterstützung mehr für Clang 3.3.
- GCC 4.6 wurde eingestellt. Es wird möglicherweise aus zukünftigen Releases entfernt.
- Mclinker wurde auf Version 2.8 mit Unterstützung für IDFA (Identical Code Folding) aktualisiert. Geben Sie den ICF mit der Option
--icf
an. - Die
arm_neon.h
-Unterstützung in x86 und x86_64 wurde erweitert und erreichte eine Abdeckung von ca. 93% der NEON-Intrinsik. Weitere Informationen zur NEON-Unterstützung:- Rufen Sie das NDK Programmer's Guide (
docs/Programmers_Guide/html/
) auf und sehen Sie sich Architectures and CPUs > Neon an. - Sehen Sie sich die aktualisierte Stichprobe
hello-neon
insamples/
an. - Informationen zur Portierung von ARM NEON zu Intel SSE findest du im Intel-Leitfaden.
- Rufen Sie das NDK Programmer's Guide (
- Die Unterstützung von
_FORTIFY_SOURCE
inheaders/libs/android-21
wurde dokumentiert, die in r10 erschien (alsandroid-21
nochAndroid-L
hieß), aber keine Dokumentation hatte.
Weitere Informationen finden Sie unten im Abschnitt Wichtige Fehlerkorrekturen.
Bei der Migration von Projekten mit GCC können Sie die nicht verwendeten Flags mit
-Wno-invalid-command-line-argument
und-Wno-unused-command-line-argument
ignorieren, bis Sie sich entscheiden, wie Sie sie längerfristig verwenden möchten. - Wichtige Fehlerkorrekturen:
-
- Ein interner Compiler-Fehler mit GCC4.9/aarch64 wurde behoben, der die folgende Fehlermeldung verursachte (Problem 77564):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Fehlerhafte Codegenerierung von GCC4.9/arm behoben. (Problem 77567)
- Ein interner Compiler-Fehler mit GCC4,9/mips bei Inline-Assembly wurde behoben. (Problem 77568)
- Falscher Code behoben, der GCC4.9/verzweigung für
x = (cond) ? y : x
generiert hat. (Problem 77569)- GCC4.9/aarch64 und Clang3.5/aarch64 wurden korrigiert, sodass das Cortex-A53-Erratum (835769) standardmäßig umgangen wurde. Deaktivieren Sie die Problemumgehung, indem Sie
-mno-fix-cortex-a53-835769
angeben. - Weitere Fehlerkorrekturen:
-
- Für
android-21
wurden folgende Fehler im Header und in der Bibliothek vorgenommen:- Weitere TV-Keycodes hinzugefügt:
android/keycodes.h
- Weitere Konstanten und sechs neue Sensorfunktionen wurden zu
android/sensor.h
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 bereitzustellen.sys/ucontext.h
undsys/user.h
wurden allen API-Levels hinzugefügt. Dersignal.h
-Header enthält jetzt<sys/ucontext.h>
. Sie können jede vorhandene Definition 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
. - Dem Beispiel
native-media/AndroidManifest.xml
wurden die erforderlichen Berechtigungen hinzugefügt. (Problem 106640) clock_nanosleep
undclock_settime
wurden zu API-Level 21 hinzugefügt. (Problem 77372)- Folgende 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
,__open
,__futex_wake
, und .__wait4
__get_tls
__getdents64
dlmalloc
- 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 in der 64-Bit-Architektur wiederhergestellt:
arc4random
,arc4random_buf
undarc4random_uniform
. cxa_*
und die Operatorennew
unddelete
wurden zurück zulibstdc++.so
verschoben. Durch diese Änderung wird das r9d-Verhalten wiederhergestellt. Frühere Versionen von r10 enthielten Platzhalterdateien.
- Weitere TV-Keycodes hinzugefügt:
- MXU-Unterstützung in GCC 4.8 und 4.9 für mips wiederhergestellt. Diese Unterstützung fehlte in r10 und r10b, weil diese Versionen von GCC mit binutils-2.24 kompiliert wurden, das MXU nicht unterstützt. Jetzt ist es so weit.
--toolchain=
inmake-standalone-toolchain.sh
wurde korrigiert, sodass es jetzt die Verwendung eines Suffixes unterstützt, das eine Version von Clang angibt.- Die
strtod()
-Funktionen von libc++/armeabi wurden korrigiert. - Fehler in der NDK-Dokumentation in
docs/
wurden behoben.
- Für
- Weitere Änderungen:
-
cpu-features
wurde erweitert, 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 zur Verwendung von
*-gcc-ar
geändert, das in GCC 4.8, GCC 4.9 und Clang verfügbar ist. Clang gibt ihn anstelle von*-ar
an. Mit dieser Einstellung wird die LTO-Unterstützung verbessert. - Die Header
include-fixed/linux/a.out.h
undinclude-fixed/linux/compiler.h
wurden aus dem GCC-Compiler entfernt. (Problem 73728) - Ein Problem im Zusammenhang mit
-flto
mit GCC 4.8 unter Mac OS X wurde behoben. Die Fehlermeldung lautete:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Ein Tippfehler in
build-binary.mk.
wurde behoben. (Problem 76992) - Wichtige bekannte Probleme:
-
- Die Angabe von -Os (
-fauto-profile
) in GCC4.9 kann zum Absturz 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 befinden sie sich in den 64-Bit-Versionen:
- Android-L-Header
- GCC 4.9
- Derzeit unterstützt das NDK nur das 32-Bit-Renderscript mit Android 4.4 (API-Level 19). HelloComputeNDK (das einzige Renderscript-Beispiel) kann nicht mit einer anderen Kombination aus Renderscript (32- oder 64-Bit) und Android-Version erstellt werden.
- Um nativen Codec zu kompilieren, musst du 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 Header-Dateien aus den Windows-Paketen in den
platforms/android-L/arch-*/usr/include/linux/netfilter*/
-Verzeichnissen wurden entfernt. (Problem 73704) - Ein Problem wurde behoben, durch das Clang daran gehindert wurde, HelloComputeNDK zu erstellen.
- Fehler in atexit behoben. (Problem 66595)
- Es wurden verschiedene Korrekturen an den Dokumenten in
docs/
undsources/third_party/googletest/README.NDK
vorgenommen. (Problem 74069) - Die Android-L-Header wurden folgendermaßen korrigiert:
- Folgende Funktionen wurden zu
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()
. cmsg_nxthdr
wurde in__cmsg_nxthdr
umbenannt.__libc_malloc_dispatch
wurde entfernt.- Der Prototyp
ptrace()
wurde inlong ptrace(int, ...);
geändert. sha1.h
wurde entfernt.android_dlextinfo
inandroid/dlext.h
erweitert.- Annotierte
__NDK_FPABI__
für Funktionen, die Gleitkomma- oder Doppelwerte instdlib.h
,time.h
,wchar.h
undcomplex.h
empfangen oder zurückgeben.
- Weitere Änderungen:
-
- Aktualisierung von
mipsel-linux-android-4.9
undmips64el-linux-android-4.9
, Implementierung eines neuen Multilib-Verzeichnislayouts und Unterstützung für gdb-7.7 cpu-features
wurde optimiert, um mehr arm64-Funktionen zu erkennen. (Liste der Änderungen 100339)
- Aktualisierung von
Android NDK r10 (Juli 2014)
- Wichtige Änderungen:
-
- Drei neue ABIs hinzugefügt, alle 64-Bit: arm64-v8a, x86_64, mips64. Hinweis:
- GCC 4.9 ist der Standardcompiler für 64-Bit-ABIs. Clang ist derzeit Version 3.4.
NDK_TOOLCHAIN_VERSION=clang
funktioniert möglicherweise nicht für arm64-v8a und mips64. - Android-L ist die erste Ebene mit 64-Bit-Unterstützung. Diese API-Ebene ist temporär und nur für die L-Vorschau vorgesehen. Bei L-Release wird er durch eine tatsächliche API-Level-Nummer ersetzt.
- Dieser Release 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
- Das neue GNU libstdc++ in Android-L enthält alle
<tr1/cmath>
. Bevor Sie Ihre eigene mathematische Funktion definieren, prüfen Sie in_GLIBCXX_USE_C99_MATH_TR1
, ob eine Funktion mit diesem Namen bereits vorhanden ist. So vermeiden Sie Mehrfachdefinitionsfehler durch die Verknüpfung. - Die Bibliothek für CPU-Features wurde für den ARMv8-Kernel aktualisiert. Die vorhandene Bibliothek für CPU-Features erkennt möglicherweise das Vorhandensein von NEON auf der ARMv8-Plattform nicht. Kompilieren Sie Ihren Code mit der neuen Version neu.
- Neues API-Verzeichnis
platforms/android-L/
hinzugefügt. Er enthält: - Wir haben die Bionic-Header aktualisiert, die sich nicht von Android API-Level 3 (Cupcake) zu 19 (KitKat) geändert hatten. Diese neue Version für Stufe L soll mit AOSP synchronisiert werden.
- Neue Medien-APIs und ein Beispiel mit nativem Codec
- Ein aktualisierter
Android.h
-Header für Coursera/OpenSUSE, der die Unterstützung eines Gleitkomma-Audioformats mit einfacher Genauigkeit 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 wurden den 32-/64-Bit-ABIs hinzugefügt. GCC 4.9 ist, wie bereits erwähnt, der (einzige) Standardcompiler für 64-Bit-ABIs. Für 32-Bit-ABIs müssen Sie GCC 4.9 explizit aktivieren, da GCC 4.6 immer noch die Standardeinstellung ist.
- Aktivieren Sie für „ndk-build“ die 32-Bit-GCC 4.9-Erstellung, 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=
im Skriptmake-standalone-toolchain.sh
. Beispiel:--toolchain=arm-linux-androideabi-4.9.
- Aktualisierung von GDB auf Version 7.6 in GCC 4.8/4.9 und x86*. Da sich GDB in GDB-7.3.x in GCC 4.6 (Standardeinstellung für ARM und MIPS) noch in der Version GDB-7.3.x befindet, müssen Sie
NDK_TOOLCHAIN_VERSION=4.8
oder4.9
festlegen, um ndk-gdb für die Auswahl von GDB 7.6 zu aktivieren. - Die Build-Option
-mssse3
wurde zur Bereitstellung von SSSE3 hinzugefügt und zum Standard für ABI x86 gemacht (Upgrade von SSE3). Das von Google veröffentlichte Bild enthält keine SSSE3-Anweisungen. - Aktualisierung von GCC 4.8 auf 4.8.3.
- Verbesserte Unterstützung für ARM libc++ EH durch Wechsel von gabi++ zu libc++abi. Weitere Informationen finden Sie in der Dokumentation im Abschnitt "C++ Support". Hinweise:
- Alle Tests mit Ausnahme des Gebietsschemas gelten jetzt für Clang 3.4 und GCC 4.8. Weitere Informationen finden Sie in der Dokumentation im Abschnitt „C++ Support“.
- 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 TBAA-Regeln verstößt. (Problem 61571) - Ab GCC 4.6 wird libc++ mit LIBCXX_FORCE_REbuild:=true nicht mehr neu erstellt. Für die Neuerstellung ist die Verwendung eines anderen Compilers erforderlich. Clang 3.3 wurde nicht getestet.
- Mclinker ist jetzt Version 2.7 und bietet Linux-Unterstützung für aarch64.
- Unterstützung für vorkompilierte Header für von
LOCAL_PCH
angegebene Header hinzugefügt. (Problem 25412)
- Wichtige Fehlerkorrekturen:
-
- Behebung von libc++, sodass jetzt
std::feof
usw. kompiliert werden (Problem 66668). - Es wurde ein atomarer Bibliotheksaufruf in Clang 3.3/3.4 behoben, der bei einigen libc++-Tests für ABI Armeabi zu Abstürzen führte.
- Behebung von Clang 3.4-Abstürzen, die beim Lesen vorkompilierter Header auftraten. (Problem 66657)
- Fehlerkorrektur für Clang 3.3/3.4
-O3
-Assertion auf: - Der folgende Absturz von Clang 3.3/3.4 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) - Behebung von libc++, sodass jetzt
- Weitere Fehlerkorrekturen:
-
- Feste Header:
- Für die 32-Bit-Version von
ssize_t
wurdeint
stattlong int
geändert. WCHAR_MIN
undWCHAR_MAX
wurden korrigiert, sodass sie je nach Architektur, auf der sie ausgeführt werden, die richtigen Zeichen haben:- X86/MIPS: signiert.
- ARM: nicht signiert.
- Verwenden Sie
-D__WCHAR_UNSIGNED__
, um zu erzwingen, dass X86/MIPS standardmäßig ohne Signatur verwendet wird. - Um die Größe von
wchar_t
auf 16 Bit zu erzwingen, verwenden Sie-fshort-wchar
. - Nicht vorhandene Symbole wurden aus dem 32-Bit-
libc.so
entfernt und für Android API-Level 12 und höherpread64
,pwrite64
undftruncate64
hinzugefügt. (Problem 69319) Weitere Informationen finden Sie in der Commit-Nachricht der AOSP-Änderungsliste 94137. - Die GCC-Warnung bezüglich der Neudefinition von
putchar
wurde behoben. Die Warnmeldung lautet: make-standalone-toolchain.sh --stl=libc++
wurde so korrigiert:- Kopiert
cxxabi.h
. (Problem 68001) - Wird in anderen Verzeichnissen als dem NDK-Installationsverzeichnis ausgeführt. (Probleme 67690 und 68647)
- GCC/Windows wurde so korrigiert, dass Argumente nur dann zitiert werden, wenn dies für das Erzeugen von Prozessen in externen Programmen erforderlich ist. Durch diese Änderung steigt die Wahrscheinlichkeit, dass die 32-K-Längenbeschränkung überschritten wird.
- Es wurde ein Problem behoben, bei dem die Umgebungsvariablen
APP_PLATFORM
nicht angepasst werden konnte. - Die Implementierung von
IsSystemLibrary()
in „crazy_linker“ wurde korrigiert, sodassstrrchr()
anstelle vonstrchr()
verwendet wird, um den tatsächlichen Basisnamen des Bibliothekspfads zu finden. - Das Problem, dass natives Audio im Debug-Modus nicht erstellt werden konnte, wurde behoben.
- Das Problem, dass gdb keine extremen Gleitkommazahlen ausgeben konnte, wurde behoben. (Problem 69203)
- Es wurde behoben, dass Clang 3.4 nicht mit
-Wl,-shared
kompiliert werden konnte (im Gegensatz zu-shared
, bei dem es keine Kompilierungsprobleme gab). Das Problem bestand darin, dass Clang-pie
für Android-Ziele hinzugefügt hat, wenn weder-shared
noch-static
vorhanden waren. Dieses Verhalten, das nicht korrekt war, hat dazu geführt, dass die Verknüpfung zwischen-shared
und-pie
beanstandet, dass sie nicht gleichzeitig vorhanden sind.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Änderungsliste 91185). - Weitere Änderungen:
-
arm_neon.h
wurde der x86-Toolchain hinzugefügt, sodass jetzt ca. 47% von Neon emuliert werden. Derzeit werden 64-Bit-Typen nicht unterstützt. Weitere Informationen finden Sie in der x86-Dokumentation im Abschnitt zur integrierten ARM-Neon-Unterstützung.- Portierte ARM/GOT_PREL-Optimierung (verfügbar in GCC 4.6, erstellt aus dem GCC-Google-Branch) zu ARM GCC 4.8/4.9. Durch diese Optimierung wird manchmal die Anzahl der Anweisungen beim Zugriff auf globale Variablen reduziert. Ein Beispiel finden Sie im Skript „build.sh“ in
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - ARM-Version für STL gabi++, stlport und libc++ hinzugefügt. Sie verfügen jetzt sowohl über den Daumenmodus als auch über den Daumenmodus.
- Es ist jetzt möglich, das Skript make-standalone-warning.sh mit
--toolchain=x86_64-linux-android-4.9
aufzurufen, was--toolchain=x86_64-4.9
entspricht.
Android NDK r9d (März 2014)
- Wichtige Änderungen:
-
- Der Clang 3.4-Compiler wird jetzt unterstützt. 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 mit der zusätzlichen Multilib-Option-mfloat-abi=hard
hinzugefügt. Diese Optionen sind für die Verwendung mit ARM GCC 4.6/4.8 und Clang 3.3/3.4 (die den Assembler, Verknüpfung und Bibliotheken von 4.8 verwenden). Beachten Sie bei 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:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
Die erstellte Bibliothek wird nachlibs/armeabi-v7a
kopiert. Damit sich das Modell wie erwartet verhält, können Sie nicht sowohlarmeabi-v7a
als aucharmeabi-v7a-hard
als Ziele angeben (d.h. in der Zeile APP_ABI=). Andernfalls wird eine von ihnen ignoriert. Beachten Sie, dassAPP_ABI=all
weiterhinarmeabi armeabi-v7a x86 mips
entspricht. - Das Skript
make-standalone-toolchain.sh
kopiert zusätzliche Bibliotheken in/hard
-Verzeichnisse. Fügen Sie Ihrem Makefile die obigenCFLAGS
undLFLAGS
hinzu, damit GCC oder Clang mit Bibliotheken in/hard
verknüpft werden können. - Der Yasm-Assembr 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, um
-gc-sections
zu unterstützen. - Zusätzliche experimentelle libc++-Unterstützung (upstream r201101). So verwenden Sie die neue Funktion:
- Fügen Sie
APP_STL := c++_static
oderAPP_STL := c++_shared
inApplication.mk
hinzu. Sie können den Quelltext überLIBCXX_FORCE_REBUILD := true
neu erstellen - Führen Sie
make-standalone-toolchain.sh --stl=libc++
aus, um eine eigenständige Toolchain mit libc++ Headers/lib zu erstellen.
CPLUSPLUS-SUPPORT.html
. (Problem 36496) - Fügen Sie
- Der Clang 3.4-Compiler wird jetzt unterstützt. Mit der Option
- Wichtige Fehlerkorrekturen:
-
- Ein nicht abgefangener Auswurf von einem unerwarteten Ausnahme-Handler für GCC 4.6/4.8 ARM EABI wurde behoben. (GCC-Problem 59392)
- GCC 4.8 wurde behoben, sodass die teilweise Spezialisierung einer Vorlage jetzt mit einem abhängigen, typunabhängigen Vorlagenargument korrekt aufgelöst wird. (GCC-Problem 59052)
- Dem vordefinierten Python wurden weitere Module 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:
- Probleme mit dem x86- und MIPS-gdbserver-
event_getmsg_helper
wurden behoben. - Es wurden zahlreiche Probleme in der RenderScript NDK-Toolchain behoben, darunter Probleme mit der Kompatibilität mit älteren Geräten und der C++-Reflexion.
- Weitere Fehlerkorrekturen:
-
- Fehlerkorrekturen in der Kopfzeile:
- 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
wurdeJNI_OnLoad
undJNI_OnUnload
injni.h
hinzugefügt. Beachten Sie, dassJNICALL
als__NDK_FPABI__
definiert ist. Weitere Informationen finden Sie untersys/cdefs.h
.- Wir haben die folgenden Header aktualisiert, sodass sie eingefügt werden können, ohne die Abhängigkeiten manuell hinzufügen zu müssen (Problem 64679):
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Es wurde ein fehlendes
sys/cachectl.h
wurde 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 korrigiert, indem__NDK_FPABI__
zu Funktionen hinzugefügt wurde, die Gleitkomma- oder Double-Werte übernehmen oder zurückgeben.- Der MIPS-Parameter
struct stat
wurde korrigiert, der fälschlicherweise auf sein 64-Bit-Gegenstück für Android API-Level 12 und höher festgelegt war. Diese falsche Einstellung war eine Regression, die in der Version 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 wurden definiert.scalbln
,scalblnf
undscalblnl
wurden in x86libm.so
für APIs 18 und höher hinzugefügt.- Ein Tippfehler in
sources/android/support/include/iconv.h
wurde behoben. (Problem 63806)
std::unexpected()
wurde korrigiert, umstd::terminate()
aufzurufen, damit ein benutzerdefinierterstd::terminate()
-Handler ausgeführt werden kann.- Gabi++ wurde korrigiert, um
std::nullptr
zu erfassen.- Korrigierte Beispiele „Teapot“ und „MoreTeapots“:
- Ein Problem mit den Chips Tegra 2 und 3 wurde gelöst, indem spekulative Variablen auf mittlere Genauigkeit geändert wurden. Die Werte für die Spekulationsstärke können jetzt kleiner als 1,0 sein.
- Die Samples wurden so geändert, dass durch Drücken der Lautstärketaste der immersive Modus wiederhergestellt und
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
ungültig wird. Durch die Bildschirmdrehung wird nichtonSystemUiVisibilityChange
ausgelöst und der immersive Modus wird daher nicht wiederhergestellt.
- Das Skript
ndk-build
wurde korrigiert. Es wurden-rpath-link=$SYSROOT/usr/lib
und-rpath-link=$TARGET_OUT
hinzugefügt, umld.bfd
zum Verknüpfen von ausführbaren Dateien zu verwenden. (Problem 64266)-Bsymbolic
wurde aus allen STL-Builds entfernt.ndk-gdb-py.cmd
wurde korrigiert, indemSHELL
als Umgebungsvariable festgelegt wurde, anstatt sie anpython.exe
zu übergeben, wodurch die Einstellung ignoriert wird. (Problem 63054)- Das Skript
make-standalone-toolchain.sh
wurde so korrigiert, dass die Option--stl=stlport
die Gabi++-Header kopiert, anstatt sie zu symlinken. Diecmd.exe
- und MinGW-Shells verstehen keine von cygwin erstellten Symlinks. - Fehlerkorrekturen in der Kopfzeile:
- Weitere Änderungen:
-
- Es wurden Ausführungsberechtigungen auf alle
*cmd
-Skripts angewendet, die bisher nur in dercmd.exe
-Shell vorgesehen waren, für den Fall, dass Entwicklerndk-build.cmd
in cygwin anstelle des empfohlenenndk-build
-Skripts verwenden möchten. - Die Geschwindigkeit des Skripts
make-standalone-toolchain.sh
wurde verbessert, weil das angegebene Zielverzeichnis nicht vorhanden ist, sondern verschoben und nicht kopiert wurde.
- Es wurden Ausführungsberechtigungen auf alle
Android NDK r9c (Dezember 2013)
Diese Version dient nur zur Fehlerbehebung.
- Wichtige Fehlerkorrekturen:
-
- Es wurde ein Problem mit GCC 4.8 ARM behoben, bei dem der Stackzeiger zu früh wiederhergestellt wurde. Dieses Problem hinderte den Framepointer daran, zuverlässig auf eine Variable im Stack-Frame zuzugreifen. (GCC-Problem 58854)
- Es wurde ein Problem mit GCC 4.8 libstdc++ behoben, bei dem ein Fehler in std::nth_element die Generierung von Code verursachte, der einen zufälligen Segmentierungsfehler verursachte. (Problem 62910)
- GCC 4.8 ICE 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
-mhard-float
-Unterstützung für mathematische__builtin
-Funktionen wurde korrigiert. Aktuelle Informationen zu Fehlerbehebungen für-mhard-float
mit STL finden Sie im Problem 61784.
- Weitere Fehlerkorrekturen:
-
- Fehlerkorrekturen in der Kopfzeile:
- Prototyp von
poll
inpoll.h
zupoll(struct pollfd *, nfds_t, int);
geändert. utimensat
wurde zulibc.so
für Android API-Level 12 und 19 hinzugefügt. Diese Bibliotheken sind jetzt in allen Android API-Levels 12 bis 19 enthalten.- Einführung von
futimens
inlibc.so
für Android API-Level 19. - Fehlende
clock_settime()
und fehlendeclock_nanosleep()
wurden zutime.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
wurden intime.h.
hinzugefügt- Veraltete
CLOCK_REALTIME_HR
undCLOCK_MONOTONIC_HR.
entfernt
- Prototyp von
- In den Beispielen „Teapot“, „MoreTeapots“ und „
source/android/ndk_helper
“:- Sie wurden so geändert, dass sie jetzt einen Hard-Float-Abi für armeabi-v7a verwenden.
- Sie wurden so aktualisiert, dass ab Android API-Level 19 der immersive Modus verwendet wird.
- Es wurde ein Problem mit
Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
behoben, das auf x86-Geräten zu Abstürzen führte.
- Behebung von
ndk-build
-Fehlern, die in cygwin aufgetreten sind, wenn über Symlink auf das NDK-Paket verwiesen wird. - Der Fehler von
ndk-build.cmd
wurde behoben, der in Fensterncmd.exe
aufgetreten ist, wennLOCAL_SRC_FILES
absolute Pfade enthält. (Problem 69992) - Das Skript
ndk-stack
wurde so korrigiert, dass es auch dann fortgesetzt wird, wenn ein Frame nicht geparst werden konnte, weil eine Routine, ein Dateiname oder eine Zeilennummer nicht gefunden werden konnte. In jedem dieser Fälle wird??
ausgegeben. - Der
ndk-stack
-Stapel für Windows-x64_64-Ziele wurde so korrigiert, dass er nicht mehr fälschlicherweise einer Frame-Zeile mit einer Zeile im Abschnittstack:
entspricht, die wederpc
,eip
nochip
enthält. Beispiel:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Wir haben Gabi++ so korrigiert, dass
- Verwendet Malloc() nicht zum Zuweisen lokaler C++-Thread-Objekte.
- Deadlocks in gabi++ werden vermieden, wenn libc.debug.malloc bei Builds der Android-Plattform „userdebug/eng“ nicht null ist.
- Fehlerkorrekturen in der Kopfzeile:
- Weitere Änderungen:
-
- „
LOCAL_EXPORT_LDFLAGS
“ wurde hinzugefügt. - Die
NDK_PROJECT_PATH=null
-Einstellung wurde in einem integrierten Build-System eingeführt, bei dem Optionen explizit anndk-build
übergeben werden. Mit dieser Einstellung versuchtndk-build
nicht, nachNDK_PROJECT_PATH.
zu suchen. Diese Einstellung verhindert auch, 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_*
-Werte inApplication.mk
. APP_ABI
kann jetzt in einer durch Kommas getrennten Liste aufgezählt werden. Beispiel:APP_ABI := "armeabi,armeabi-v7a"
- Es wurde die Möglichkeit gegeben, alle STL-Dateien mit Debugging-Informationen in einem optionalen, separaten Paket namens
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
mithilfe der Option-g
neu zu erstellen. Mit dieser Option kann das Skriptndk-stack
einen besseren Stack-Dump für STL bereitstellen. Diese Änderung sollte sich nicht auf den Code bzw. die Größe der endgültigen, entfernten Datei auswirken. - Es wurden erweiterte
hello-jni
-Beispiele zum Melden vonAPP_ABI
bei der Kompilierung hinzugefügt. - Das
ar
-Tool wurde im deterministischen Modus (Option-D
) verwendet, um statische Bibliotheken zu erstellen. (Problem 60705)
- „
Android NDK r9b (Oktober 2013)
- Wichtige Änderungen:
-
include/android/*h
undmath.h
wurden für alle Android API-Level bis 18 aktualisiert, einschließlich der hinzugefügten Level 13, 15, 16 und 17. Informationen zu hinzugefügten APIs finden Sie unter Commit-Nachrichten für Änderungen 68012 und 68014. (Probleme 47150, 58528 und 38423)- Android API-Level 19 wird unterstützt, einschließlich Renderscript-Bindung.
- Unterstützung für
-mhard-float
in der 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 Farbdiagnose hinzugefügt. Zum Aktivieren von Diagnosefarben legen Sie
-fdiagnostics-color=auto
oder-fdiagnostics-color=always,
fest oder exportierenGCC_COLORS
wie unten gezeigt:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Weitere Informationen finden Sie unter Sprachunabhängige Optionen in GCC. - Es wurden zwei neue Beispiele hinzugefügt, um die Funktionen von OpenGL ES 3.0 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, die mit dem nächsten Release entfernt wird.
- Wichtige Fehlerkorrekturen:
-
- Problem behoben, bei dem in ARM GCC 4.6
thumb2
keine relativen 16-Bit-Sprungtabellen generiert werden konnten. (GCC-Problem) - Der interne Compiler-Fehler (ICE) für GCC 4.8 für
g++.dg/cpp0x/lambda/lambda-defarg3.C
wurde behoben. (Änderung 62770, GCC-Problem) - Ein Problem wurde behoben, bei dem ausführbare Windows-32-Bit-
*-gdb.exe
-Dateien nicht gestartet wurden. (Problem 58975) - GCC 4.8 ICE beim Erstellen der Aufzählungsbibliothek wurde behoben. Die Fehlermeldung lautet:
internal compiler error: verify_flow_info failed
(Problem 58916, GCC-Problem) - Der GDB/ARM-Build wurde so geändert, dass
ARM.exidx
-Daten zum Entspannen im Prologcode übersprungen werden. Außerdem wurde ein Befehl (set arm exidx-unwinding
) hinzugefügt, um die Entspannung von exidx-basierten Stacks zu steuern. (Problem 55826) - Problem mit dem Clang 3.3 MIPS-Compiler-Problem behoben, bei dem HI- und LO-Register falsch wiederverwendet wurden.
- Ein Problem mit MIPS 4.7 ICE in
dbx_reg_number
wurde behoben. Die Fehlermeldung lautet:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC-Patch)
- Problem behoben, bei dem in ARM GCC 4.6
- Weitere Fehlerkorrekturen:
-
- Korrekturen an der Kopfzeile
- Die ARM-
WCHAR_MIN
und -WCHAR_MAX
wurden gemäß den Spezifikationen von uns getrennt (die X86/MIPS-Versionen sind signiert). Definieren Sie_WCHAR_IS_ALWAYS_SIGNED
, um das alte Verhalten wiederherzustellen. (Problem 57749) - Es wurde korrigiert, dass
include/netinet/tcp.h
die Status-EnumTCP_INFO
enthält. (Problem 38881) - Das
cdefs_elh.h
-Makro_C_LABEL_STRING
wurde korrigiert, sodass in der GCC 4.8-Toolchain keine Warnungen mehr generiert werden, wenn der C++11-Modus verwendet wird. (Problem 58135 und 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) - Fehlende Funktion
mkdtemp()
hinzugefügt, die bereits imbionic
-Headerstdlib.h
vorhanden ist.
- Die ARM-
- Das Problem bei der Erstellung von
samples/gles3jni
mit Clang unter Android API-Level 11 wurde behoben. - Der MCLinker wurde so korrigiert, dass die folgenden Optionen mehrmals vorkommen dürfen:
-gc-sections
und--eh-frame-hdr
. - Der MCLinker wurde korrigiert, sodass die Option
--no-warn-mismatch
akzeptiert wurde. - 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 die IDIV nur noch Geräten auf der Zulassungsliste hinzugefügt, einschließlich Nexus 4. (Problem 57637) - Ein Problem wurde behoben, bei dem
android_native_app_glue.c
fälschlicherweise Fehler bei Ereignis-Vorausleitungsvorgängen protokollierte. - Wir haben korrigiert, dass alle Vorgänge auf
gabi++
beendet und unerwartet_handler Thread-sicher sind. - Es wurden mehrere Probleme mit der Clang-Option
-integrated-as
behoben, sodass die Tests fürssax-instructions
undfenv
bestanden werden konnten. - Der GCC 4.6/4.7/4.8-Compiler wurde so korrigiert, dass die Verknüpfungsoption
--eh-frame-hdr
auch für statische ausführbare Dateien übergeben wird. Weitere Informationen finden Sie im GCC-Patch. - Ein zusätzlicher Apostroph in
CPU-ARCH-ABIS.html
wurde korrigiert. Weitere Informationen finden Sie unterNDK-DEPENDS.html
. (Problem 60142) - Zusätzliche Anführungszeichen in der ndk-build-Ausgabe unter Windows wurden korrigiert. (Problem 60649)
- Clang 3.3 wurde korrigiert, um die integrierten, atomaren Vorgänge von ARM wie
__atomic_fetch_add
,__atomic_fetch_sub
und__atomic_fetch_or
zu kompilieren. - Clang 3.3 ICE mit benutzerdefiniertem
vfprintf
korrigiert. (Clang-Problem)
- Korrekturen an der Kopfzeile
- Weitere Änderungen:
-
- OpenMP wurde für alle GCC-Builds aktiviert. Fügen Sie den Build-Einstellungen die folgenden Flags hinzu, um dieses Feature zu verwenden:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Codebeispiele finden Sie untertests/device/test-openmp
. - Die Größe von
ld.mcld
wurde deutlich verringert (1,5 MB gegenüberld.bfd
um 3,5 MB undld.gold
7,5 MB), was zu einer Geschwindigkeitssteigerung um etwa 20 % führt. LOCAL_CONLYFLAGS
undAPP_CONLYFLAGS
wurden hinzugefügt, um Optionen anzugeben, die nur für C, aber nicht für C++ gelten. Die vorhandenenLOCAL_CFLAGS
undAPP_CFLAGS
werden auch für die C++-Kompilierung verwendet, damit die meisten Optionen nicht zweimal angegeben werden müssen. Optionen wie-std=gnu99
können in g++-Builds mit einer Warnung und in clang++-Builds mit einem Fehler fehlschlagen.- Array-Hilfsfunktionen für
gabi++
wurden hinzugefügt. - Geänderte GCC-Builds werden so konfiguriert, dass alle
libgcc.a
-Dateien mit-funwind-tables
erstellt werden, damit der Stack über zuvor blockierte Punkte wie__aeabi_idiv0
gelöst werden kann. - Unterstützung für Ingenic MXU in MIPS GCC4.6/4.7/4.8 mit der neuen Option
-mmxu
. - MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
wurde erweitert, um ldxc1/sdxc1 zu steuern - „Crazy Linker“ hinzugefügt. Weitere Informationen finden Sie unter
sources/android/crazy_linker/README.TXT
. bitmap-plasma
wurde korrigiert, sodass jetzt im Vollbildmodus und nicht in einem Bereich von 200 × 200 Pixeln gezeichnet wurde.- Die Größe der Linux- und Darwin-Toolchain wurde um 25% reduziert, indem Symlinks zu identischen Dateien erstellt wurden.
- OpenMP wurde für alle GCC-Builds aktiviert. Fügen Sie den Build-Einstellungen die folgenden Flags hinzu, um dieses Feature zu verwenden:
Android NDK r9 (Juli 2013)
- Wichtige Änderungen:
-
- Android 4.3 (API-Level 18) wird jetzt unterstützt. Weitere Informationen findest du unter
STABLE-APIS.html
und in neuen Codebeispielen insamples/gles3jni/README
. - Header und Bibliotheken für OpenGL ES 3.0, das von Android 4.3 (API-Level 18) und höher unterstützt wird, wurden hinzugefügt.
- Der NDK wurde der GNU Compiler Collection (GCC) 4.8-Compiler hinzugefügt. Da GCC 4.6 immer noch die Standardeinstellung ist, müssen Sie diese Option explizit aktivieren:
- Für
ndk-build
-Builds exportieren SieNDK_TOOLCHAIN_VERSION=4.8
oder fügen es inApplication.mk
hinzu. - Verwenden Sie für eigenständige Builds die Option
--toolchain=
inmake-standalone-toolchain.sh
. Beispiel:
--toolchain=arm-linux-androideabi-4.8
Hinweis: Die Option
-Wunused-local-typedefs
wird durch-Wall
aktiviert. Fügen Sie unbedingt__attribute__((unused))
hinzu, wenn Sie Compile-Zeit-Assertions wiesources/cxx-stl/stlport/stlport/stl/config/features.h
, Zeile 311 verwenden. Weitere Informationen finden Sie unter 55460 ändern.Hinweis: Ab GCC 4.7 generieren ARM-Compiler standardmäßig nicht abgestimmten Zugriffscode für ARMv6- und höhere Build-Ziele. Möglicherweise müssen Sie die Build-Option
-mno-unaligned-access
hinzufügen, wenn Sie Builds für Kernel erstellen, die dieses Feature nicht unterstützen. - Für
- Unterstützung für Clang 3.3 wurde hinzugefügt. Die Build-Option
NDK_TOOLCHAIN_VERSION=clang
wählt jetzt standardmäßig Clang 3.3 aus.Hinweis:Sowohl GCC 4.4.3 als auch Clang 3.1 wurden eingestellt und werden aus dem nächsten NDK-Release entfernt.
- Der GNU Project Debugger (GDB) wurde zur Unterstützung von Python 2.7.5 aktualisiert.
- MCLinker zur Unterstützung von Windows-Hosts hinzugefügt. Da
ld.gold
die Standardeinstellung ist, müssen Sie-fuse-ld=mcld
inLOCAL_LDFLAGS
oderAPP_LDFLAGS
hinzufügen, um MCLinker zu aktivieren. ndk-depends
-Tool wurde hinzugefügt, das ELF-Bibliotheksabhängigkeiten ausgibt. Weitere Informationen findest du unterNDK-DEPENDS.html
. (Problem 53486)
- Android 4.3 (API-Level 18) wird jetzt unterstützt. Weitere Informationen findest du unter
- Wichtige Fehlerkorrekturen:
-
- Es wurde ein potenzielles Problem bei der Ereignisverarbeitung in
android_native_app_glue
behoben. (Problem 41755) - Der ARM/GCC-4.7-Build wurde korrigiert, um eine ausreichende Ausrichtung für die NEON-Lade- und Speicheranweisungs-VST und VLD zu generieren. (GCC-Problem 57271)
- Ein interner Compiler-Fehler (ICE) für einen konstanten negativen Indexwert in einem Stringliteral wurde behoben. (Problem 54623)
- GCC 4.7-Segmentierungsfehler bei konstanter Initialisierung 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) libc.so
undlibc.a
wurden korrigiert, sodass sie die Funktionwait4()
unterstützen. (Problem 19854)- Die x86-Dateien libc.so und libc.a wurden aktualisiert, sodass sie die Funktion
clone()
enthalten. - Es wurde ein
LOCAL_SHORT_COMMANDS
-Fehler behoben, bei dem die Dateilinker.list
leer war oder nicht verwendet wurde. - Es wurde ein Problem mit GCC-MIPS-Builds unter Mac OS behoben, sodass CFI-Anweisungen verwendet werden, ohne dass
ld.mcld --eh-frame-hdr
häufig fehlschlägt. - Der interne Clang 3.2-X86/MIPS-Compiler-Fehler in
llvm/lib/VMCore/Value.cpp
wurde behoben. (Änderung von 59021) - Der Absturz von GCC 4.7 bei 64-Bit-Windows Assembler wurde behoben. (Fehler:
out of memory allocating 4294967280 bytes
). - Das Skript
ndk-gdb
wurde aktualisiert, sodass die Aktionen--start
oder--launch
jetzt auf den GNU Debug Server warten, sodass er zuverlässiger auf Haltepunkte treffen kann, die früh im Ausführungspfad gesetzt wurden (z. B. Haltepunkte im JNI-Code). (Problem 41278)Hinweis:Diese Funktion erfordert jdb und gibt eine Warnung zu ausstehenden Haltepunkten aus. Geben Sie die Option
--nowait
an, um das vorherige Verhalten wiederherzustellen. - Der GDB-Absturz wurde behoben, wenn die Bibliotheksliste leer war.
- Behebung eines GDB-Absturzes bei Verwendung eines
stepi
-Befehls über die Thumb-Anweisungbx pc
oderblx pc
. (Problem 56962 und Problem 36149) - MIPS-
gdbserver
wurde korrigiert, sodass nachDT_MIPS_RLD_MAP
stattDT_DEBUG
gesucht wurde. (Problem 56586) - Es wurde eine zirkuläre Abhängigkeit im Skript "ndk-build" behoben, beispielsweise: Wenn A->B und B->B, dann B aus dem Build entfernt wurde. (Problem 56690)
- Es wurde ein potenzielles Problem bei der Ereignisverarbeitung in
- Weitere Fehlerkorrekturen:
-
- Das Skript
ndk-build
wurde korrigiert, sodass Sie eine Version von Clang als Befehlszeilenoption angeben können (z.B.NDK_TOOLCHAIN_VERSION=clang3.2
). Bisher konnte nur die Version als Umgebungsvariable angegeben werden. - Die Gabi++-Größe von
_Unwind_Exception
wurde für MIPS-Build-Ziele bei Verwendung des Clang-Compilers auf 24 festgelegt. (Änderung 54141) - Das Skript
ndk-build
wurde korrigiert, damit erstellte Bibliotheken bei Verwendung des Befehlsndk-build clean
auch wirklich aus Projekten entfernt werden, die vordefinierte statische Bibliotheken enthalten. (Änderung 54461, Änderung 54480) - Die Option
NDK_ANALYZE=1
wurde geändert, sodass sie weniger ausführlicher ist. - Es wurde korrigiert, dass
gnu-libstdc++/Android.mk
einenbackward/
-Pfad für Builds enthält, die Abwärtskompatibilität verwenden. (Problem 53404) - Es wurde ein Problem behoben, bei dem
stlport new
manchmal zufällige Werte zurückgibt. ndk-gdb
wurde korrigiert, sodass es der Reihenfolge vonCPU_ABIS
entspricht, nichtAPP_ABIS
. (Problem 54033)- Es wurde ein Problem behoben, bei dem der 64-Bit-Build von NDK unter MacOSX den falschen Pfad für den Compiler auswählt. (Problem 53769)
- Die Build-Scripts konnten jetzt die 64-Bit-Windows Vista von Windows erkennen. (Problem 54485)
- x86-Fehler
ntonl/swap32
wurde behoben:invalid 'asm': operand number out of range
. (Problem 54465, Änderung 57242) - Problem mit
ld.gold
behoben, sodass Stringliterale jetzt zusammengeführt werden können. ld.gold
wurde korrigiert, um die Ausrichtung großer Symbole zu verarbeiten.ld.gold
wurde aktualisiert, um die Option--sort-section=name
zu aktivieren.- GCC 4.4.3/4.6/4.7 wurde korrigiert, um die Option
-export-dynamic
für statisch verknüpfte Programme zu unterdrücken. In GCC wird kein.interp
-Abschnitt für statisch verknüpfte Programme mehr hinzugefügt. - Der Kompilierungsfehler
stlport
in GCC 4.4.3 über inkonsistentetypedef
von_Unwind_Control_Block
wurde behoben. (Problem 54426) awk
-Scripts wurden korrigiert, um unter Windows erstellteAndroidManifest.xml
-Dateien zu verarbeiten, die nachgestellte\r
-Zeichen enthalten und Build-Fehler verursachen können. (Problem 42548)- Es wurde ein Fehler korrigiert, mit dem
make-standalone-toolchain.sh
das Verzeichnisprebuilts/
prüft, um festzustellen, ob der Host 32 oder 64 Bit groß ist. - Fehler bei der Clang 3.2-Option
-integrated-as
behoben. - Die Handler-Daten des Clang 3.2 ARM EHABI-kompakten Modells
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, wenn kein
uses-sdk
-Element im App-Manifest vorhanden war. (Problem 57015)
- Das Skript
- Weitere Änderungen:
-
- Korrekturen an der Kopfzeile
- Header wurden geändert, um
__set_errno
zu einer Inline-Funktion zu machen, da__set_errno
inerrno.h
verworfen wurde undlibc.so
nicht mehr exportiert. elf.h
wurde geändert und enthält jetztstdint.h
. (Problem 55443)- Es wurde korrigiert, dass
sys/un.h
unabhängig von anderen Headern eingeschlossen werden konnte. (Problem 53646) - Die gesamte API-Familie
MotionEvent_getHistorical
wurde so korrigiert, dassconst AInputEvent* motion_event
verwendet wird. (Problem 55873) malloc_usable_size
wurde so korrigiert, dass esconst void*
nimmt. (Problem 55725)- stdint.h wurde für bessere Kompatibilität mit C99 korrigiert. (Änderung 46821)
wchar.h
wurde geändert, umWCHAR_MAX
undWCHAR_MIN
nicht neu zu definieren- Die
<inttypes.h>
-Deklaration für zeigerbezogenePRI
- undSCN
-Makros wurde korrigiert. (Problem 57218) - Wir haben den
sys/cdefs.h
-Header so geändert, dass__WCHAR_TYPE__
für API-Ebenen unter 9 32 Bit ist, was bedeutet, dasswchat_t
für alle API-Ebenen 32 Bit ist. Wenn Sie das vorherige Verhalten wiederherstellen möchten, definieren Sie die boolesche Variable_WCHAR_IS_8BIT
. (Problem 57267)
- Header wurden geändert, um
- In NDK
docs/
wurden weitere Formatierungen hinzugefügt und verschiedene Dokumentationskorrekturen wurden korrigiert. - Zusätzliche Unterstützung für eine schlanke Archivierungstechnik beim Erstellen statischer Bibliotheken. (Problem 40303)
- Das Skript
make-standalone-toolchain.sh
wurde aktualisiert, um diestlport
-Bibliothek zusätzlich zugnustl
zu unterstützen, wenn Sie die Option--stl=stlport
angeben. Weitere Informationen findest du unterSTANDALONE-TOOLCHAIN.html
. - Das Skript
make-standalone-toolchain.sh
wurde so aktualisiert, dass die Option--llvm-version=
die Skripts$TOOLCHAIN_PREFIX-clang
und$TOOLCHAIN_PREFIX-clang++
zusätzlich zuclang
undclang++
erstellt, um zu vermeiden, dass die Definitionen des Hosts clang und clang++ verwendet werden. - Es wurden zwei Flags hinzugefügt, um zwei Optimierungen in Upstream-Clang wieder zu aktivieren, aber in NDK deaktiviert, um die Kompatibilität mit von GCC kompiliertem Code zu verbessern:
- Es wurde ein
-fcxx-missing-return-semantics
-Flag hinzugefügt, um die fehlende Rückgabesemantik in Clang 3.2 und höher wieder zu aktivieren. Normalerweise sollten alle Pfade mit einer Rückgabeanweisung für eine Wertrückgabefunktion enden. Ist dies nicht der Fall, fügt Clang eine undefinierte Anweisung (oder einen Trap im Debug-Modus) ohne Rückgabeanweisung in den Pfad ein. Wenn Sie sicher sind, dass Ihr Code korrekt ist, verwenden Sie dieses Flag, damit die Optimierung das undefinierte Verhalten nutzen kann. Wenn Sie sich nicht sicher sind, verwenden Sie dieses Flag nicht. Der Aufrufer erhält möglicherweise immer noch einen zufälligen falschen Wert, der von der Optimierung jedoch nicht ausgenutzt wird und die Fehlerbehebung im Code erschwert wird. - Es wurde ein
-fglobal-ctor-const-promotion
-Flag hinzugefügt, um globale Variablen mit dem statischen Konstruktor wieder auf Konstanten hochzustufen. Mit diesem Flag versucht der Optimierungspass für globale Variablen von LLVM, die globalen Variablen mit statischen Konstruktoren auszuwerten und zu globalen Konstanten hochzustufen. Diese Optimierung ist zwar korrekt, kann aber zu Inkompatibilität mit von GCC kompiliertem Code führen. Beispielsweise kann der Codeconst_cast
ausführen, um die Konstante in änderbar umzuwandeln und zu ändern. In GCC befindet sich die Variable im Lese-/Schreibmodus und der Code wird versehentlich ausgeführt. In Clang befindet sich die Variable „const“ im schreibgeschützten Speicher und kann zum Absturz Ihrer Anwendung führen.
- Es wurde ein
-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 Anwendung einen benutzerdefinierten Allocator verwendet, der nicht immer auf die gleiche Weise wie der Standard-Allocator an der 8-Byte-Grenze eines neuen Objekts ausgerichtet ist, kann Ihre Anwendung aufgrund vonldc1
- undsdc1
-Vorgängen in nicht ausgerichtetem Arbeitsspeicher abstürzen. Verwenden Sie in diesem Fall das Flag-mno-ldc1-sdc1
, um das Problem zu umgehen.- Der Schweregrad des Ereignisses wurde von „Warnung“ auf „Info“ herabgestuft, wenn
APP_PLATFORM_LEVEL
größer alsAPP_MIN_PLATFORM_LEVEL
ist. DerAPP_PLATFORM_LEVEL
kann kleiner alsAPP_PLATFORM
injni/Application.mk
sein, da der NDK nicht für alle Ebenen Header hat. In diesem Fall wird die tatsächliche Ebene nach unten verschoben.APP_MIN_PLATFORM_LEVEL
wird durch dieandroid:minSdkVersion
im Manifest deiner App angegeben. (Problem 39752) - Die Methoden
android_getCpuIdArm()
undandroid_setCpuArm()
wurden zucpu-features.c
hinzugefügt. Dadurch können die ARM-CPUID-Informationen leichter abgerufen werden. (Problem 53689) ndk-build
wurde geändert, umas/ld
von GCC 4.7 für die Clang-Kompilierung zu verwenden.Hinweis: In GCC 4.7 wurden
monotonic_clock
undis_monotonic
insteady_clock
bzw.is_steady
umbenannt.- Dem Skript
ndk-build
wurden die folgenden neuen Warnungen hinzugefügt:- Es wurden Warnungen hinzugefügt, wenn
LOCAL_LDLIBS/LDFLAGS
in statischen Bibliotheksmodulen verwendet wird. - Es wurde eine Warnung hinzugefügt, wenn eine Konfiguration kein Modul zum Erstellen enthält.
- Es wurde eine Warnung für die Verwendung von nicht systemeigenen Bibliotheken in
LOCAL_LDLIBS/LDFLAGS
einer gemeinsam genutzten Bibliothek oder ausführbarer Module 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, wird das Erstellen des Builds durch das Skript erzwungen. (Problem 53502) ndk-build
wurde aktualisiert, um absolute Pfade inLOCAL_SRC_FILES
zu unterstützen.- Die ausführbaren
*-gdbtui
-Dateien, die Duplikate der ausführbaren*-gdb
-Dateien mit aktivierter Option-tui
sind, wurden entfernt. - Die Build-Skripts wurden aktualisiert, damit Sie gewarnt werden, wenn das Frontend des Compilers der Edison Design Group (EDG)
_STLP_HAS_INCLUDE_NEXT
wieder aktiviert. (Problem 53646) - Die Umgebungsvariable
NDK_LIBS_OUT
wurde hinzugefügt, um das Überschreiben des Pfades fürlibraries/gdbserver
aus der Standardeinstellung$PROJECT/libs
zu ermöglichen. Weitere Informationen findest du unterOVERVIEW.html
. - Die Standardeinstellungen des ndk-build-Skripts wurden geändert, um Code mit dem Formatstringschutz
-Wformat -Werror=format-security
zu kompilieren. Sie könnenLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
festlegen, um sie zu deaktivieren. Weitere Informationen:ANDROID-MK.html
- Unterstützung für STL-Optimierung in
ndk-gdb-py
hinzugefügt. Weitere Informationen finden Sie unterNDK-GDB.html
. - Es wurden Tests hinzugefügt, die auf den googletest-Frameworks basieren.
- Dem Toolchain-Build-Skript wurde eine Benachrichtigung hinzugefügt, die Sie warnt, wenn die aktuelle Shell nicht
bash
ist.
- Korrekturen an der Kopfzeile
Android NDK r8e (März 2013)
- Wichtige Änderungen:
-
- 64-Bit-Host-Toolchain-Set hinzugefügt (Paketnamenssuffix
*-x86_64.*
). Weitere Informationen finden Sie unterCHANGES.HTML
undNDK-BUILD.html
. - Clang 3.2-Compiler wurde hinzugefügt. GCC 4.6 ist immer noch die Standardeinstellung. Informationen zur Verwendung des Clang-Compilers finden Sie unter
CHANGES.HTML
. - Statischer Codeanalysator 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. Die
ld.gold
-Verknüpfung ist die Standardeinstellung (sofern verfügbar). Sie müssen sie daher explizit aktivieren. Weitere Informationen finden Sie unterCHANGES.HTML
. - ndk-build wurde aktualisiert, um die topologische Sortierung für Modulabhängigkeiten zu verwenden. Dies bedeutet, dass der Build automatisch die Reihenfolge der in
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
undLOCAL_SHARED_LIBRARIES
angegebenen Bibliotheken sortiert. Weitere Informationen findest du unterCHANGES.HTML
. (Problem 39378)
- 64-Bit-Host-Toolchain-Set hinzugefügt (Paketnamenssuffix
- Wichtige Fehlerkorrekturen:
-
- Das Build-Script zum Erstellen aller Toolchains in
-O2
wurde korrigiert. In früheren Releases wurden Toolchains ohne Optimierung falsch erstellt. - Das Build-Script, das Clang/llvm für MacOSX bedingungslos in 64-Bit erstellt, wurde korrigiert.
- Der interne Compiler-Fehler GCC 4.6/4.7 wurde behoben:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Problem 52732) - Das Build-Problem wurde behoben, bei dem GCC/ARM 4.6/4.7 keinen Code mit integrierten 64-Bit-Atomfunktionen verknüpfen konnte. (Problem 41297)
- Fehler aufgrund von nicht übereinstimmenden Nutzungsabweichungen in GCC 4.7-Verknüpfung DIV wurden behoben. (Problem mit Quellcode)
- Der interne GCC 4.7-Compiler-Fehler
build_data_member_initialization, at cp/semantics.c:5790
wurde behoben. - Der interne GCC 4.7-Compiler-Fehler
redirect_eh_edge_1, at tree-eh.c:2214
wurde behoben. (Problem 52909) - Ein Segmentfehler in GCC 4.7 wurde behoben. (GCC-Problem)
- Die Taktauflösung von
<chrono>
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) - Ein Problem wurde behoben, bei dem der X86-MXX-/SSE-Code aufgrund einer fehlenden
posix_memalign
nicht verknüpft werden konnte. (Änderung bei 51872) - GCC4.7/X86-Segmentierungsfehler in
i386.c
, Funktiondistance_non_agu_define_in_bb()
, wurde behoben. (50383 ändern) - 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 behoben. (Problem 46718) - Der undefinierte Verweis der
ld.gold
-Laufzeit auf__exidx_start
und__exidx_start_end
wurde korrigiert. (Änderung 52134) - Der interne Clang 3.1-Compiler-Fehler bei Verwendung der Eigen-Bibliothek wurde behoben. (Problem 41246)
- Der interne Clang 3.1-Compiler-Fehler einschließlich
<chrono>
im C++11-Modus wurde behoben. (Problem 39600) - Der interne Clang 3.1-Compiler-Fehler beim Generieren von Objektcode für einen Methodenaufruf an eine einheitlich initialisierte
rvalue
wurde behoben. (Problem 41387) - Die Neuausrichtung von Clang 3.1/X86-Stacks wurde behoben. (Änderung 52154)
- Problem mit GNU Debugger (GDB) SIGILL beim Debugging unter Android 4.1.2 behoben (Problem 40941)
- Problem behoben, bei dem die GDB keine
source:line
-Haltepunkte festlegen konnte, wenn Symbole lange, indirekte Dateipfade enthielten. (Problem 42448) - GDB-
read_program_header
für ausführbare MIPS PIE-Dateien wurde korrigiert. (Änderung bei 49592) - Segmentierungsfehler
STLport
inuncaught_exception()
behoben. (50236 ändern) - Der
STLport
-Busfehler bei der Ausnahmebehandlung wurde aufgrund eines nicht ausgerichteten Zugriffs vonDW_EH_PE_udata2
,DW_EH_PE_udata4
undDW_EH_PE_udata8
behoben. - Das Gabi++-Problem mit unendlicher Rekursion mit dem Operator
nothrow new[]
wurde behoben. (Problem 52833) - Der falsche Offset von Gabi++ für den Ausnahme-Handler-Zeiger wurde korrigiert. (53446 ändern)
- Redundantes kostenloses Gabi++ für Ausnahmeobjekt entfernt (Änderung 53447)
- Das Build-Script zum Erstellen aller Toolchains in
- Weitere Fehlerkorrekturen:
-
- Feste NDK-Header:
- Redundante Definitionen von
size_t
,ssize_t
undptrdiff_t
wurden entfernt. - MIPS- und ARM-
fenv.h
-Header wurden korrigiert. - Für
stddef.h
wurde behoben, dassoffsetof
nicht neu definiert wurde, da es bereits in der Toolchain vorhanden ist. elf.h
wurde so korrigiert, dass esElf32_auxv_t
undElf64_auxv_t
enthält. (Problem 38441)- Die C++-Definitionen von
#ifdef
in derOpenSLES_AndroidConfiguration.h
-Header-Datei wurden korrigiert. (Problem 53163)
- Redundante Definitionen von
- Es wurde behoben, dass
STLport
nach einem Fehler aufgrund fehlenden Arbeitsspeichers abgebrochen wurde, anstatt die App ohne Meldung zu verlassen. - System- und Gabi++-Header wurden korrigiert, sodass eine Kompilierung mit API-Level 8 und niedriger möglich ist.
- Problem behoben, bei dem
cpufeatures
/proc/self/auxv
nicht geparst wird. (Problem 43055) - Problem behoben, bei dem
ld.gold
nicht mehr vom Host libstdc++ und von Windows-Plattformen abhängig war, also nicht von der Bibliotheklibgcc_sjlj_1.dll
abhängig war. - Clang 3.1 wurde behoben, das eine inkonsistente Registerliste in
.vsave
ausgibt und Assembler fehlschlägt. (Änderung 49930) - Clang 3.1 wurde korrigiert, sodass es libgabi++ kompilieren und die
test-stlport
-Tests für MIPS-Build-Ziele bestehen kann. (Änderung 51961) - Behebung von Clang 3.1, dass Ausnahmen standardmäßig nur für C++ und nicht für C aktiviert wurden.
- Mehrere Probleme in Clang 3.1 wurden behoben, durch die die meisten GNU-Ausnahmetests bestanden wurden.
- Die Skripts
clang
undclang++
im eigenständigen NDK-Compiler wurden korrigiert, sodass-cc1
erkannt und-target
nicht angegeben wurde, wenn sie gefunden wurden. ndk-build
wurde so korrigiert, dassNDK_APP_OUT
inApplication.mk
festgelegt wurde.- Fehlerkorrektur für X86
libc.so
undlib.a
, bei denen die Funktionensigsetjmp
undsiglongjmp
fehlen, die bereits insetjmp.h
deklariert waren. (Problem 19851) - GCC 4.4.3/4.6/4.7 libstdc++ wurde für Clang in C++ 11 repariert. (Clang-Problem)
- Der Cygwin-Pfad in einem Argument, das an
HOST_AWK
übergeben wurde, wurde korrigiert. - Die
ndk-build
-Skriptwarnung in Fenstern bei Ausführung aus dem JNI-Verzeichnis des Projekts wurde behoben. (Problem 40192) - Ein Problem wurde behoben, bei dem das Skript
ndk-build
nicht erstellt wurde, wenn das Makefile nachgestellte Leerzeichen in derLOCAL_PATH
-Definition enthält. (Problem 42841)
- Feste NDK-Header:
- Weitere Änderungen:
-
- Threading-Unterstützung in GCC/MIPS-Toolchain aktiviert.
- Die GCC-Ausnahmebehandlungshilfen
__cxa_begin_cleanup
und__cxa_type_match
wurden so aktualisiert, dass sie die Sichtbarkeit Standard gegenüber der vorherigen ausgeblendeten Sichtbarkeit in GNU libstdc++ haben. Weitere Informationen finden Sie unterCHANGES.HTML
. - Die Build-Skripts wurden aktualisiert, sodass die statischen Gabi++- und STLport-Bibliotheken jetzt mit versteckter Sichtbarkeit erstellt werden, mit Ausnahme von Hilfsprogrammen für die Ausnahmebehandlung.
- Der Build wurde aktualisiert, sodass
STLport
für ARM im Daumenmodus erstellt wurde. - Unterstützung für
std::set_new_handler
in Gabi++ hinzugefügt. (Problem 52805) FUTEX
-Systemaufruf in GNU libstdc++ aktiviert.ndk-build
wurde aktualisiert, sodass die vordefinierte 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)- Erstellung zusätzlicher GNU-libstdc++-Bibliotheken für ARM.
- MIPS-Gleitkomma-
madd/msub/nmadd/nmsub/recip/rsqrt
-Anweisungen mit 32-Bit-FPU wurden aktiviert. - In GCC 4.6 und 4.7 wurde die Graphite-Schleifenoptimierung aktiviert, um weitere Optimierungen zu ermöglichen:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
und-ftree-loop-linear
. (Info) polly
wurde für Clang 3.1 auf 32-Bit-Hosts von Linux und Max OS X aktiviert, um den Arbeitsspeicherzugriff zu analysieren und zu optimieren. (Info)-flto
ist in GCC 4.7, 4.6, Clang 3.2 und Clang 3.1 unter Linux aktiviert (Clang LTO über LLVMgold.so). MIPS-Compilerziele werden nicht unterstützt, dald.gold
nicht verfügbar ist.--plugin
und--plugin-opt
wurden fürld.gold
in GCC 4.6/4.7 aktiviert.--text-reorder
wurde fürld.gold
in GCC 4.7 aktiviert.- GNU libstdc++ mit
_GLIBCXX_USE_C99_MATH
konfiguriert, wodurch das Skriptisinf
im Bioonic-Header nicht definiert wird. Weitere Informationen finden Sie unterCHANGES.html
. APP_LDFLAGS
wurde den Build-Skripts hinzugefügt. Weitere Informationen finden Sie unterANDROID-MK.html
.- Die Build-Skripts wurden aktualisiert, damit
NDK_LOG=0
NDK_LOG
deaktivieren kann. - Die Build-Skripts wurden aktualisiert, damit
NDK_HOST_32BIT=0
die 32-Bit-Toolchain der Hostentwicklerumgebung deaktivieren kann. - Die GCC-/X86-Standard-Flags
-march=
und-mtune=
wurden vonpentiumpro
undgeneric
ini686
undatom
geändert. - Build-Scripts für erweiterte Toolchain:
- Es wurde eine Race-Bedingung in
build-gcc.sh
für den Build-Typmingw
behoben, die die parallele Build-Verarbeitung erheblich verhinderte. build-gabi++.sh
undbuild-stlport.sh
wurden aktualisiert, sodass sie jetzt über das NDK-Paket ausgeführt werden können. (Problem 52835)run-tests.sh
in der DienstprogrammsammlungMSys
wurde korrigiert.- Verbesserte 64-Bit-Host-Toolchain und Unterstützung für Canadian Cross-Builds.
build-mingw64-toolchain.sh
Script wurde auf eine neuere Version aktualisiert.- Option zum Erstellen von
libgnustl_static.a
undstlport_static.a
ohne ausgeblendete Sichtbarkeit hinzugefügt.
- Es wurde eine Race-Bedingung in
Android NDK r8d (Dezember 2012)
- Wichtige Änderungen:
-
- Der GNU Compiler Collection (GCC) 4.7-Compiler wurde dem NDK hinzugefügt. Der GCC 4.6-Compiler ist weiterhin der Standard, sodass Sie die neue Version wie folgt explizit aktivieren müssen:
- Exportieren Sie für
ndk-build
die VariableNDK_TOOLCHAIN_VERSION=4.7
oder fügen Sie sie zuApplication.mk
hinzu. - Fügen Sie für eigenständige Builds die Option
--toolchain=
zumake-standalone-toolchain.sh
hinzu. Beispiel:--toolchain=arm-linux-androideabi-4.7
Hinweis:Diese Funktion befindet sich noch in der Testphase. Bitte versuchen Sie es und melden Sie etwaige Probleme.
- Exportieren Sie für
- Unterstützung für
stlport
-Ausnahmen über gabi++ hinzugefügt. Beachten Sie, dass die neue gabi++ vondlopen
und dem zugehörigen Code abhängt. Das bedeutet:- Sie können keine statische ausführbare Datei mit der Option
-static
erstellen oderlibstlport_static.a
mitAPP_STL := stlport_static
einbinden. Sie können die Option-static
weiterhin mit einer eigenständigen Toolchain verwenden. Die Kompilierung einer dynamischen ausführbaren Datei mitinclude $(BUILD_EXECUTABLE)
funktioniert weiterhin, da der Compiler automatisch die Option-ldl
hinzufügt. - Wenn Ihr Projekt mit
-nostdlib
und {-Wl,--no-undefined} verknüpft ist, müssen Sie die Option-ldl
manuell einfügen.
CPLUSPLUS-SUPPORT.html
.Hinweis: Diese Funktion ist experimentell und funktioniert besser mit den GCC 4.6/4.7-Compilern als mit GCC 4.4.3 oder Clang 3.1. Bitte versuchen Sie es und melden Sie etwaige Probleme.
- Sie können keine statische ausführbare Datei mit der Option
- Eine
-mstack-protector-guard=
-Option für x86 wurde hinzugefügt, um zwischen einem globalen Standardpfad, der mit älterer 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 GCC 4.6 und höher-Compilern auszuwählen.Hinweis: Durch die Einstellung
-mstack-protector-guard
selbst werden keine-fstack-protector*
-Optionen aktiviert. sources/android/cpufeatures/cpu-features.c
wurde eineandroid_setCpu()
-Funktion hinzugefügt, die verwendet werden kann, wenn die automatische Erkennung über/proc
in Android 4.1 und höher nicht möglich ist. (Chromium-Problem 164154)
- Der GNU Compiler Collection (GCC) 4.7-Compiler wurde dem NDK hinzugefügt. Der GCC 4.6-Compiler ist weiterhin der Standard, sodass Sie die neue Version wie folgt explizit aktivieren müssen:
- Wichtige Fehlerkorrekturen:
-
- Das Problem mit unnötiger Neuerstellung von Objektdateien bei Verwendung des Skripts
ndk-build
wurde behoben. (Problem 39810) - Ein Verknüpfungsfehler mit dem Release NDK 8c für Mac OS X 10.6.x, der den folgenden Fehler verursacht hat, wurde behoben:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Die
-x c++
-Optionen wurden aus dem eigenständigen Clang++-Build-Skript entfernt. (Problem 39089) - Probleme mit der Option
NDK_TOOLCHAIN_VERSION=clang3.1
in Cygwin wurden behoben. (Problem 39585) - Das Skript
make-standalone-toolchain.sh
wurde so korrigiert, dass eine eigenständige Toolchain mit der Cygwin- oder MinGW-Umgebung generiert werden kann. Die resultierende Toolchain kann in Cygwin-, MingGW- oder CMD.exe-Umgebungen verwendet werden. (Problem 39915 und Problem 39585) - Fehlende Option
SL_IID_ANDROIDBUFFERQUEUESOURCE
in Android-14-Builds für ARM und X86 hinzugefügt. (Problem 40625) - Die x86-CPU-Erkennung für die Funktion
ANDROID_CPU_X86_FEATURE_MOVBE
wurde korrigiert. (Problem 39317) - Die Standardvorlagenbibliothek (Standard Template Library, STL) konnte keine C++-Quellen ohne die Dateiendung
.cpp
verwenden. Dieses Problem wurde behoben. - Der interne GCC 4.6 ARM-Compiler-Fehler atrefresh1.c:1061 wurde behoben. (Problem 20862)
- Fehler beim internen GCC 4.4.3 ARM-Compiler bei emit-rtl.c:1954 behoben. (Problem 22336)
- Behebung eines internen GCC 4.4.3 ARM-Compilers-Fehlers bei postreload.c:396. (Problem 22345)
- Ein Problem mit dem Überspringen von Lambda-Funktionen in GCC 4.6/4.7 wurde behoben. (Problem 35933)
- Das Problem mit unnötiger Neuerstellung von Objektdateien bei Verwendung des Skripts
- Weitere Fehlerkorrekturen:
-
- Fehlerkorrekturen in der NDK-Headerdatei:
- Für
__WINT_TYPE__
undwint_t
wurde korrigiert, dass es sich um denselben Typ handelt. - Tippfehler in
android/bitmap.h
wurde korrigiert. (Problem 15134) - Tippfehler in
errno.h
wurde korrigiert. - Prüfung auf Vorhandensein von
__STDC_VERSION__
insys/cdefs.h
hinzugefügt. (Problem 14627) - Neu sortierte Überschriften in
byteswap.h
unddirent.h
. - Für
limits.h
wurde korrigiert, dass jetztpage.h
einbezogen wurde, diePAGE_SIZE
-Einstellungen bereitstellt. (Problem 39983) - Der Rückgabetyp von
glGetAttribLocation()
undglGetUniformLocation()
wurde vonint
aufGLint
korrigiert. - Die
__BYTE_ORDER
-Konstante für x86-Builds wurde korrigiert. (Problem 39824)
- Für
- Das
ndk-build
-Skript wurde korrigiert, um-Os
für ARM-Builds nicht mit-O2
zu überschreiben. - Build-Scripts wurden korrigiert, um das Überschreiben der Einstellungen
HOST_AWK
,HOST_SED
undHOST_MAKE
zu ermöglichen. - Ein Problem wurde behoben, das bei
ld.gold
unterfsck_msdos
zum Verknüpfen von Objekten verwendet wurde, die vom Intel C/C++ Compiler (ICC) erstellt wurden. - Die ARM EHABI-Unterstützung in Clang wurde korrigiert, um die Spezifikationen zu erfüllen.
- GNU Debugger (GDB) wurde korrigiert, um die Zeit für das Durchgehen der Linkmap des Ziels während
solib
-Ereignissen zu verkürzen. (Problem 38402) - Das Problem mit fehlender
libgcc.a
-Datei beim Verknüpfen geteilter Bibliotheken wurde behoben.
- Fehlerkorrekturen in der NDK-Headerdatei:
- Weitere Änderungen:
-
- Zurückportierte integrierte 64-Bit-Funktionen für ARM zu GCC 4.6.
- Es wurde eine Dokumentation für die Latenz der Audioausgabe sowie weitere Dokumentationen und Fehlerkorrekturen hinzugefügt.
- Fehler in Debug-Builds mit Clang wurden korrigiert, sodass Funktionen ohne void-Element jetzt für Pfade ohne Return-Anweisung ein
SIGILL
-Signal ausgeben. make-standalone-toolchain.sh
wurde aktualisiert, sodass das Suffix-clang3.1
akzeptiert wird. Dies entspricht dem Hinzufügen von--llvm-version=3.1
zur GCC 4.6-Toolchain.- Die URL des Fehlerberichts für GCC und Clang wurde aktualisiert auf: https://source.android.com/source/report-bug s.html
- ARM ELF-Unterstützung für
llvm-objdump
hinzugefügt. - Unterdrückte Warnung behandeln von c Eingabe als c++ für Clang-Builds.
- Der Build wurde aktualisiert, sodass nur die 32-Bit-Version von
libiberty.a
erstellt und unterlib32/
platziert wird.
Android NDK r8c (November 2012)
- Wichtige Änderungen:
-
- Der Clang 3.1-Compiler wurde dem NDK hinzugefügt. Die GNU Compiler Collection (GCC) 4.6 ist immer noch der Standard. Daher müssen Sie die Clang-Compiler-Option wie folgt explizit aktivieren:
- Exportieren Sie für
ndk-build
NDK_TOOLCHAIN_VERSION=clang3.1
oder fügen Sie diese Einstellung der UmgebungsvariablenApplication.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 befindet sich noch in der Testphase. Bitte versuchen Sie es und melden Sie etwaige Probleme.
- Exportieren Sie für
- Gold-Verknüpfung
ld.gold
für die Windows-Toolchain hinzugefügt. Gold Linker ist auch die Standardeinstellung für ARM und X86 auf allen Hosts. Sie können es überschreiben und dield.bfd
-Verknüpfung verwenden. Fügen Sie dazuLOCAL_LDFLAGS += -fuse-ld=bfd
zuAndroid.mk
hinzu oder übergeben Sie-fuse-ld=bfd
an die g++/clang++-Befehlszeile, die die Verknüpfung durchführt. - Den Skripts
ndk-build[.cmd]
undndk-gdb
wurden Prüfungen auf Leerzeichen im NDK-Pfad hinzugefügt, um Build-Fehler zu vermeiden, die schwer zu diagnostizieren sind. - An der API-Level-Verarbeitung wurden folgende Änderungen vorgenommen:
- Die Build-Logik wurde so geändert, dass Projekte, die
android-10
bisandroid-13
inAPP_PLATFORM
,project.properties
oderdefault.properties
angeben, eine Verknüpfung mitandroid-9
anstelle vonandroid-14
herstellen. - Der Build wurde so aktualisiert, dass ausführbare Dateien, die android-16 (Jelly Bean) oder höher verwenden, mit der Option
-fPIE
für positionunabhängige ausführbare Dateien (PIE) kompiliert werden. Mit der neuenAPP_PIE
-Option können Sie dieses Verhalten steuern. Weitere Informationen findest du unterAPPLICATION-MK.html
.Hinweis: Alle API-Level über 14 sind weiterhin mit
platforms/android-14
verknüpft und es wurden keine neuenplatforms/android-N
hinzugefügt. ndk-build
wurde geändert, um Warnungen auszugeben, wenn das angepasste API-Level in derAndroidManifest.xml
des Projekts größer alsandroid:minSdkVersion
ist.
- Die Build-Logik wurde so geändert, dass Projekte, die
- Die
cpu-features
-Hilfsbibliothek wurde aktualisiert, um mehr ARM-spezifische Funktionen einzubeziehen. Weitere Informationen findest du untersources/android/cpufeatures/cpu-features.h
. - Der Wert des Long Double-Werts auf der X86-Plattform wurde in 8 Byte geändert. Dieser Datentyp hat jetzt die gleiche Größe wie ein Double, wird aber 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 das Verknüpfungselement übergeben wird. Diese Änderung sorgt dafür, dass v7-spezifische Bibliotheken undcrt*.o
korrekt verknüpft sind. -mfpu=vfpv3-d16
wurdendk-build
anstelle der in früheren Releases verwendeten Option-mfpu=vfp
hinzugefügt.
- Dieser Build-Typ wurde so geändert, dass der Parameter
- Der Clang 3.1-Compiler wurde dem NDK hinzugefügt. Die GNU Compiler Collection (GCC) 4.6 ist immer noch der Standard. Daher müssen Sie die Clang-Compiler-Option wie folgt explizit aktivieren:
- Wichtige Fehlerkorrekturen:
-
- Ein Problem wurde behoben, bei dem
make-standalone-toolchain.sh
mit Root-Berechtigungen ausgeführt wurde, wodurch einige Nutzer nicht auf die eigenständige Toolchain zugreifen konnten. (Problem 35279)- Alle Dateien und ausführbaren Dateien im NDK-Releasepaket haben Lese- und Ausführungsberechtigungen für alle.
- Die Inhaberschaft/Gruppe von
libstdc++.a
wird beim Kopieren beibehalten.
- Redundante
\r
wurde aus der Windows-vordefinierten Versionecho.exe
entfernt. Der redundante\r
hat dazu geführt, dassgdb.setup
im GNU Debugger (GDB) fehlgeschlagen ist, da er fälschlicherweise Teil des Pfads wurde. (Problem 36054) - Es wurden parallele Windows-Builds behoben, die manchmal aufgrund von Zeitproblemen in der
host-mkdir
-Implementierung fehlgeschlagen sind. (Problem 25875) - Problem mit GCC 4.4.3 GNU
libstdc++
behoben, sodasstypeinfo
-Namen nicht standardmäßig zusammengeführt werden. Weitere Informationen finden Sie untertoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Problem 22165) - Problem im
null
-Kontext in GCC 4.6cp/mangle.c::write_unscoped_name
behoben, bei dem GCC möglicherweise abstürzt, wenn der Kontextnull
ist und inTREE_CODE
dereferenziert wurde. - GCC 4.4.3-Abstürze bei ARM NEON-spezifischen Typdefinitionen für Gleitkommazahlen wurden behoben. (Problem 34613)
- Die interne
STLport
-Implementierung von_IteWrapper::operator*()
wurde behoben, bei der ein veralteter Stack-Speicherort mit dem dereferenzierten Wert zurückgegeben wurde und Laufzeitabstürze verursachte. (Problem 38630) - ARM-spezifische Fehlerkorrekturen:
- Fehler bei ARM GCC 4.4.3/4.6
g++
behoben, sodass keine Warnung angezeigt wurde, dass die Mangling-Funktion von <va_list> in GCC 4.4 geändert wurde. Die Problemumgehung ist nicht mehr erforderlich, wenn Sie den Schalter-Wno-psabi
verwenden, um diese Warnung zu vermeiden. - Ein Problem wurde behoben, bei dem in einem Projekt mit den Suffixen
.arm
oder.neon
inLOCAL_SRC_FILES
auchAPP_STL
verwendet wurde. MitAPP_STL
sucht das Skriptndk-build
nach C++-Dateien inLOCAL_SRC_FILES
, bevor es STL-header/lib
-Pfade zur Kompilierung hinzufügt.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. - Es wurde behoben, dass
binutils-2.21/ld.bfd
Objekte von älteren binutils ohnetag_FP_arch
verknüpfen konnte, was in GNU-Binutils Fehlermeldungen zu assertion-fehlgeschlagen hervorrief. (Problem 35209) - Warnung Unbekanntes EABI-Objektattribut 44 entfernt, wenn
binutils-2.19/ld
ein vordefiniertes Objekt vonbinutils-2.21
verlinkt - Es wurde ein Problem bei der GNU-
stdc++
-Kompilierung mit-mthumb
und-march=armv7-a
behoben, bei demmake-standalone-toolchain.sh
geändert wurde, umheaders/libs
im Unterverzeichnisarmv7-a/thumb
zu füllen. (Problem 35616) - Fehler beim nicht auflösbaren R_ARM_THM_CALL relocation-Relocation-Fehler behoben. (Problem 35342)
- Ein interner Compiler-Fehler bei
reload1.c:3633
wurde behoben, der dadurch verursacht wurde, dass das ARM-Back-End bei der Signaturerweiterung vonchar
den falschen Operandentyp erwartete. (GCC-Problem 50099) - Interner Compilerfehler mit negativem Verschiebungsbetrag wurde behoben. (GCC-Problem)
- Fehler bei ARM GCC 4.4.3/4.6
-fstack-protector
für X86 wurde korrigiert, das auch der Standard für das x86-ABI-Zielndk-build
ist.- MIPS-spezifische Fehlerkorrekturen:
- Die Endian-ness von
STLport
wurde behoben, indem_STLP_LITTLE_ENDIAN
beim Kompilieren der MIPS-libstlport_*
auf 1 gesetzt wurde. - Das GCC-
__builtin_unreachable
-Problem beim Kompilieren von LLVM wurde behoben. (GCC-Problem 54369) - Zurückportierte Korrektur für den Kompilierungsprozess von
cc1
, der 100% CPU beansprucht. (GCC-Problem 50380)
- Die Endian-ness von
- Spezifische Fehlerkorrekturen für GNU Debugger:
- Die Python-Unterstützung in gdb-7.x beim Build wurde deaktiviert. Andernfalls kann die Funktion „gdb-7.x“ die auf dem Host verfügbare Python-Version abrufen und
gdb
mit einer kabelgebundenen Abhängigkeit von einer bestimmten Python-Version erstellen. (Problem 36120) ndk-gdb
wurde korrigiert, wennAPP_ABI
all
enthält und mit keiner der bekannten Architekturen übereinstimmt. (Problem 35392)- Die Unterstützung von Windows-Pfadnamen wurde korrigiert, indem das Zeichen
:
beibehalten wurde, wenn es Teil eines Windows-Pfads sein könnte, der mit einem Laufwerksbuchstaben beginnt. (GDB-Problem 12843) - Das Hinzufügen der Hardware-Haltepunktunterstützung für ARM in
gdbserver
wurde korrigiert. (GDB-Problem) - Es wurde eine Korrektur hinzugefügt, dass die aktuelle
solibs
nur dann gelesen wird, wenn die Verknüpfung konsistent ist. Durch diese Änderung wird die Verarbeitung vonsolib
-Ereignissen beschleunigt. (Problem 37677) - Eine Korrektur wurde hinzugefügt, um wiederholte Versuche,
solib
-Haltepunkte zu finden. GDB wiederholtenable_break()
jetzt bei jedem Aufruf vonsvr4_current_sos()
, bis der Vorgang erfolgreich ist. (Änderung 43563) - Es wurde ein Problem behoben, bei dem
gdb
an Haltepunkten indlopen-ed
-Bibliotheken nicht angehalten wurde. (Problem 34856) - Problem mit
SIGILL
in der dynamischen Verknüpfung beim Aufrufen vondlopen()
auf einem System behoben, in dem/system/bin/linker
von Symbolen entfernt wurde undrtld_db_dlactivity()
alsThumb
implementiert wurde, weilLSB
vonsym_addr
nicht beibehalten wurde. (Problem 37147)
- Die Python-Unterstützung in gdb-7.x beim Build wurde deaktiviert. Andernfalls kann die Funktion „gdb-7.x“ die auf dem Host verfügbare Python-Version abrufen und
- Ein Problem wurde behoben, bei dem
- Weitere Fehlerkorrekturen:
-
- Feste NDK-Header:
- Fehler mit
arch-mips/include/asm/*
-Code behoben, der fälschlicherweise aus dem ursprünglichen Kernel entfernt wurde. (Änderung: 43335) - Die Daten der Strukturmitglieder
__unused
wurden inlinux/sysctl.h
undlinux/icmp.h
durch__linux_unused
ersetzt, um einen Konflikt mit#define __unused
insys/cdefs.h
zu vermeiden. fenv.h
für geschlossene C-Funktionen mit__BEGIN_DECLS
und__END_DECLS
wurde korrigiert.- Nicht implementierte Funktionen aus
malloc.h
wurden entfernt. - Die
stdint.h
-Definition vonuint64_t
für ANSI-Compiler wurde korrigiert. (Problem 1952) - Präprozessor-Makros 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>
.
- Fehler mit
- Ein Pufferüberlauf in
ndk-stack-parser
wurde behoben. - Der Fehler
_STLP_USE_EXCEPTIONS
wurde korrigiert, wenn nicht definiert, sodass alle Deklarationen und Verwendungen von__Named_exception
weggelassen werden. Die Kompilierung und Verwendung von__Named_exception
-Einstellungen erfolgt nur, wennSTLport
Ausnahmen verwenden darf. - Das Erstellen von Linux-spezifischen NDK-Paketen wurde korrigiert, ohne dass zusätzlich Windows-Code erstellt wurde. Verwenden Sie die folgenden Einstellungen, um diese Art von Build auszuführen:
./build/tools/make-release.sh --force --systems=linux-x86
libc.so
wurde korrigiert, sodassatexit()
und__do_handler
nicht exportiert werden. Diese Symbole werden von der Systemversion der C-Bibliothek für ARM-Builds exportiert, um native Legacy-Bibliotheken zu unterstützen. Von NDK generierte Elemente sollten niemals direkt darauf verweisen. Stattdessen sollte jede gemeinsam genutzte Bibliothek oder ausführbare Datei eine 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 Ihre eigene__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 gezeigt:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Der Symboldecoder für ARM, der in
objdump
fürplt
-Einträge verwendet wurde, um ein lesbareres Formularfunction@plt
zu generieren, wurde korrigiert. - Folgende Symbole, die in GCC 4.6
libgcc.a
eingeführt wurden, wurden aus der Bibliotheklibc.so
der X86-Plattform entfernt:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
und__aeabi_unwind_cpp_pr2
. - Nicht verwendete
.ctors
,.dtors
und.eh_frame
wurden in den MIPS-crt*_so.S
entfernt. ndk-gdb
wurde aktualisiert, sodass nur die letzte Ausgabezeile fürndk-build
DUMP_XXXX
verwendet wird. Durch diese Änderung wird sichergestellt, dassApplication.mk
oderAndroid.mk
etwas mit der$(info ...)
-Syntax ausgibt, wird es nicht in das Ergebnis vonDUMP_XXXX
eingeschleust. Weitere Informationen
- Feste NDK-Header:
- Weitere Ä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 unterstützt werden. - Vereinfachte C++-Dateien enthalten den 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/
ndk-build
wurde so korrigiert, dass standardmäßig mehr C++-Dateierweiterungen erkannt werden:.cc .cp .cxx .cpp .CPP .c++ .C
. Du kannst diese Erweiterungseinstellungen weiterhin mitLOCAL_CPP_EXTENSION
überschreiben.- Es wurde ein Problem in
samples/san-angeles
behoben, das beim Neustart zu einem schwarzen Bildschirm oder einem Standbild führte. - Veraltete APIs in NDK-Beispielen wurden ersetzt.
(Problem 20017)
hello-gl2
von Android-5 auf Android-7 umgestelltnative-activity
von Android-9 auf Android-10 umgestelltnative-audio
von Android-9 auf Android-10 umgestelltnative-plasma
von Android-9 auf Android-10 umgestellt
- Im Abschnitt
.note.android.ident
(definiert incrtbegin_static/dynamic.o
) wurde ein neues Branding für ausführbare Android-Dateien mit einem einfacheren Schema hinzugefügt, damit Debugging-Tools entsprechend reagieren können. Das Strukturmitglied und die Werte sind 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 vorherigen Branding-Optionen im Abschnitt
.note.ABI-tag
wurden eingestellt. - Das neue 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. Es wurde optimiert, um die meisten Tests für alle unterstützten ABIs zu kompilieren und auf allen verbundenen Geräten auszuführen.
- Die Header
Android NDK r8b (Juli 2012)
Die Hauptfunktionen dieses Release sind eine neue Toolchain für GNU Compiler Collection (GCC) und GNU Debugger (GDB) 7.3.x, die Debugging-Unterstützung für das System-Image von Android 4.1 (API-Level 16) bieten.
- Wichtige Fehlerkorrekturen:
-
LOCAL_SHORT_COMMANDS
-Probleme in macOS- und Windows Cygwin-Umgebungen für statische Bibliotheken wurden behoben. Die Erstellung von Listendateien ist schneller und wird nicht neu generiert, um wiederholte Neuerstellungen des Projekts zu vermeiden.- Es wurden mehrere Probleme in
ndk-gdb
behoben:- Das Tool wurde aktualisiert, damit die Flags
-e
,-d
und-s
einheitlicher ADB übergeben. - Das Tool wurde aktualisiert, damit Seriennummern von Geräten, die Leerzeichen enthalten, akzeptiert werden können.
- Aktualisiertes Tool zum Abrufen von
/system/bin/link
-Informationen, sodassgdb
auf dem Host einen Haltepunkt in__dl_rtld_db_dlactivity
festlegen und auf Verknüpfungsaktivitäten achten kann (z.B.solib
-Symbole noch einmal scannen, wenndlopen()
aufgerufen wird).
- Das Tool wurde aktualisiert, damit die Flags
- Problem mit
ndk-build clean
unter Windows behoben, bei dem./libs/*/lib*.so
nicht entfernt werden konnte. - Es wurde behoben, dass
ndk-build.cmd
einenERRORLEVEL
ungleich null zurückgibt, wennmake
fehlschlägt. - Problem behoben, bei dem
libc.so
die Symbole__exidx_start
und__exidx_end
nicht mehr fälschlicherweise exportiert hat. - Das Problem mit
SEGV
beim Abschalten des Stacks nach__libc_init
für ARM und MIPS wurde behoben.
- Wichtige Änderungen:
-
- GCC 4.6-Toolchain (
binutils
2.21 mitgold
und GDB 7.3.x) wurde hinzugefügt, damit sie gemeinsam mit der ursprünglichen GCC 4.4.3-Toolchain (binutils
2.19 und GDB 6.6) vorhanden ist.- GCC 4.6 ist jetzt die Standard-Toolchain. Sie können
NDK_TOOLCHAIN_VERSION=4.4.3
inApplication.mk
festlegen, um die ursprüngliche Datei auszuwählen. - Unterstützung für die
gold
-Verknüpfung ist nur für ARM- und x86-Architekturen auf Linux- und Mac OS-Hosts verfügbar. Diese Unterstützung ist standardmäßig deaktiviert. FügeLOCAL_LDLIBS += -fuse-ld=gold
inAndroid.mk
hinzu, um sie zu aktivieren. - Programme, die mit
-fPIE
kompiliert wurden, benötigen das neueGDB
zur Fehlerbehebung, einschließlich Binärprogrammen in System-Images von Android 4.1 (API-Level 16). - Das
ld
-Toolbinutils
2.21 enthält rückportierte Fehlerkorrekturen aus Version 2.22:ld --gc-sections
, das fälschlicherweise Zombie-Verweise auf externe Bibliotheken beibehält, wurde behoben. Weitere Informationen- Der ARM-Befehl
strip
wurde korrigiert, um die ursprünglichenp_align
undp_flags
im AbschnittGNU_RELRO
beizubehalten, wenn sie gültig sind. Ohne diese Korrektur können mit-fPIE
erstellte Programme nicht debuggen. (weitere Informationen)
- Die
sincos()
-Optimierung für Kompatibilität mit älteren Plattformen wurde deaktiviert.
- GCC 4.6 ist jetzt die Standard-Toolchain. Sie können
- Die Build-Optionen wurden aktualisiert, um die Schutzmaßnahmen „Nie eXecute“ (NX) und
relro
/bind_now
standardmäßig zu aktivieren:--noexecstack
wurde dem Assembler und-z noexecstack
dem Linker hinzugefügt, der NX-Schutz vor Pufferüberlaufangriffen bietet. Dazu wird NX-Bit auf Stack und Heap aktiviert.-z relro
und-z now
wurden zum Verknüpfungsprogramm hinzugefügt, um interne Datenabschnitte nach der Verknüpfung zu härten, um Sicherheitslücken durch Speicherbeschädigungen zu vermeiden. (Weitere Informationen: 1, 2)- Diese Funktionen können mithilfe der folgenden Optionen deaktiviert werden:
- Deaktivieren Sie den NX-Schutz. Legen Sie dazu die Option
--execstack
für den Assembler und-z execstack
für den Verknüpfungsdienst fest. - Deaktivieren Sie die Härtung interner Daten, indem Sie die Optionen
-z norelro
und-z lazy
für die Verknüpfung festlegen. - Deaktivieren Sie diese Schutzmaßnahmen im NDK
jni/Android.mk
. Legen Sie dazu die folgenden Optionen fest:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Weitere Informationen findest du unter
docs/ANDROID-MK.html
. - Deaktivieren Sie den NX-Schutz. Legen Sie dazu die Option
- Das Branding für ausführbare Android-Dateien wurde im Abschnitt
.note.ABI-tag
(incrtbegin_static/dynamic.o
) hinzugefügt, damit Debugging-Tools entsprechend reagieren können. Das Strukturmitglied 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:
-
- Das Problem „
mips-linux-gnu
-Verschiebung“ wurde behoben, das für das Problem „R_MIPS_TLS_LDM
“ abgeschnitten wurde. Weitere Informationen - Segmentfehler im
ld
-Tool bei Verwendung von--gc-sections
wurden behoben. Weitere Informationen - Problem bei der Zählung der MIPS-
GOT_PAGE
wurde behoben. Weitere Informationen - Der Link zum Folgen des Warnsymbols für
mips_elf_count_got_symbols
wurde korrigiert. - Der Link zum Folgen des Warnsymbols für
mips_elf_allocate_lazy_stub
wurde korrigiert. - MIPS
.dynamic
wurden in das Datensegment verschoben, sodass es beschreibbar ist. - Hartcodierte Werte für Symbole wurden durch korrekte 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, der PIC deaktiviert. Das Problem, dass der Compiler in diesem Fall-mno-shared
nicht hinzufügt. - Falsche Paketnamen in den Beispielen
hello-jni
undtwo-libs
wurden korrigiert, sodass das darunter liegendetests
-Projekt kompiliert werden kann.
- Das Problem „
- Weitere Änderungen:
-
- Geänderte Speicherorte der Binärprogramme:
gdbserver
wurde vontoolchain/<arch-os-ver>/prebuilt/gdbserver
nachprebuilt/android-<arch>/gdbserver/gdbserver
verschoben.- Das x86-Toolchain-Präfix wurde von
i686-android-linux-
ini686-linux-android-
umbenannt. sources/cxx-stl/gnu-libstdc++/include
undlib
wurden bei der Kompilierung mit GCC 4.6 zusources/cxx-stl/gnu-libstdc++/4.6
odersources/cxx-stl/gnu-libstdc++/4.4.3
bei der Kompilierung mit GCC 4.4.3 verschoben.libbfd.a
undlibintl.a
wurden vonlib/
nachlib32/
verschoben.
- In der NDK-Toolchain wurden verschiedene Skripts hinzugefügt und verbessert:
build-mingw64-toolchain.sh
wurde hinzugefügt, um eine neue Linux-gehostete Toolchain zu generieren, die ausführbare Win32- und Win64-Dateien generiert.- Die Geschwindigkeit von
download-toolchain-sources.sh
wurde verbessert, indem der Befehlclone
und nurcheckout
für die Verzeichnisse verwendet werden, die zum Erstellen der NDK-Toolchain-Binärdateien erforderlich sind. build-host-gcc.sh
- undbuild-host-gdb.sh
-Skripts 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 eigenständigen
tests/standalone/run.sh
-Tests wurden umgeschrieben .
- Der
if_dl.h
-Header wurde von allen Plattformen und Architekturen entfernt. Die beschriebenenAF_LINK
- undsockaddr_dl
-Elemente sind BSD-spezifisch (d.h., sie sind unter Linux nicht vorhanden).
- Geänderte Speicherorte der Binärprogramme:
Android NDK r8 (Mai 2012)
Diese Version des NDK unterstützt MIPS ABI und einige zusätzliche Fehlerkorrekturen.
- Neue Funktionen:
-
- Die MIPS-ABI wird jetzt unterstützt. Damit können Sie Maschinencode generieren, der auf kompatiblen MIPS-basierten Android-Geräten ausgeführt wird. Zu den Hauptfunktionen für MIPS gehören MIPS-spezifische Toolchains, Systemheader, Bibliotheken und die Unterstützung für die Fehlerbehebung. 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
mips
zurAPP_ABI
-Definition in derApplication.mk
-Datei hinzufügen, um Builds 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 bearbeiten müssen, um MIPS-Maschinencode zu erstellen. - Sie können beim Aufrufen von
make-standalone-toolchain.sh
mit der Option--arch=mips
eine eigenständige MIPS-Toolchain erstellen. Weitere Informationen finden Sie unterdocs/STANDALONE-TOOLCHAIN.html
.
Hinweis:Google Play filtert Anwendungen anhand der in der App enthaltenen Informationen des Befehlssatzes, damit Ihre Apps nur für Nutzer verfügbar sind, deren Geräte sie ausführen können. Sie müssen nichts weiter tun, um die Filterung zu aktivieren. Außerdem prüft das Android-System selbst deine App bei der Installation und lässt die Installation nur dann fortgesetzt, wenn die App eine Bibliothek bereitstellt, die für die CPU-Architektur des Geräts kompiliert wurde.
- Die MIPS-ABI wird jetzt unterstützt. Damit können Sie Maschinencode generieren, der auf kompatiblen MIPS-basierten Android-Geräten ausgeführt wird. Zu den Hauptfunktionen für MIPS gehören MIPS-spezifische Toolchains, Systemheader, Bibliotheken und die Unterstützung für die Fehlerbehebung. Weitere Informationen zur MIPS-Unterstützung finden Sie unter
- Wichtige Fehlerkorrekturen:
-
- Ein Tippfehler in der GAbi++-Implementierung wurde behoben, bei dem das Ergebnis von
dynamic_cast<D>(b)
des Basisklassenobjektsb
an die abgeleitete KlasseD
falsch in der entgegengesetzten Richtung der Basisklasse angepasst wurde. (Problem 28721) - Es wurde ein Problem behoben, bei dem
make-standalone-toolchain.sh
libsupc++.*
nicht kopiert hat.
- Ein Tippfehler in der GAbi++-Implementierung wurde behoben, bei dem das Ergebnis von
- Weitere Fehlerkorrekturen:
-
ndk-build.cmd
wurde korrigiert, damitndk-build.cmd
auch dann korrekt funktioniert, wenn der Nutzer die UmgebungsvariableSHELL
neu definiert hat. Diese kann bei der Installation verschiedener Entwicklungstools in Windows-Umgebungen geändert werden.
Android NDK r7c (April 2012)
Diese Version des NDK enthält eine wichtige Fehlerkorrektur für Tegra2-basierte Geräte sowie einige zusätzliche Fehlerkorrekturen und Verbesserungen:
- Wichtige Fehlerkorrekturen:
-
- Die GNU STL-Binärdateien armeabi-v7a stürzten auf Nicht-NEON-Geräten nicht ab. Die mit dem NDK r7b bereitgestellten Dateien waren nicht richtig konfiguriert, was zu Abstürzen auf Tegra2-basierten Geräten und anderen Geräten führte, wenn versucht wurde, bestimmte Gleitkommafunktionen (z.B.
cosf
,sinf
,expf
).
- Die GNU STL-Binärdateien armeabi-v7a stürzten auf Nicht-NEON-Geräten nicht ab. Die mit dem NDK r7b bereitgestellten Dateien waren nicht richtig konfiguriert, was zu Abstürzen auf Tegra2-basierten Geräten und anderen Geräten führte, wenn versucht wurde, bestimmte Gleitkommafunktionen (z.B.
- Wichtige Änderungen:
-
- Zusätzliche Unterstützung für benutzerdefinierte Ausgabeverzeichnisse über die Umgebungsvariable
NDK_OUT
. Wenn diese Variable definiert ist, wird sie zum Speichern aller generierten Zwischendateien anstelle von$PROJECT_PATH/obj
verwendet. Die Variable wird auch vonndk-gdb
erkannt. - Zusätzliche Unterstützung für das Erstellen von Modulen mit Hunderten oder sogar Tausenden von Quelldateien durch Definition von
LOCAL_SHORT_COMMANDS
intrue
in deinemAndroid.mk
.Durch diese Änderung wird das NDK-Build-System gezwungen, die meisten Verknüpfer- oder Archivierungsoptionen in Listendateien zu speichern, um so die Längenbeschränkungen der Befehlszeilen zu umgehen. Weitere Informationen findest du unter
docs/ANDROID-MK.html
.
- Zusätzliche Unterstützung für benutzerdefinierte Ausgabeverzeichnisse über die Umgebungsvariable
- Weitere Fehlerkorrekturen:
-
- Die Implementierung von
android_getCpuCount()
in der Helper-Bibliothekcpufeatures
wurde korrigiert. Auf bestimmten Geräten, auf denen Kerne dynamisch vom System aktiviert werden, meldet die vorherige Implementierung die Gesamtzahl der aktiven Kerne beim ersten Aufruf der Funktion und nicht die Gesamtzahl der physisch verfügbaren Kerne.
- Die Implementierung von
Android NDK r7b (Februar 2012)
Diese Version des NDK enthält Fehlerkorrekturen für native Windows-Builds, Cygwin und viele andere Verbesserungen:
- Wichtige Fehlerkorrekturen:
-
sys/atomics.h
wurde aktualisiert, um Korrektheitsprobleme auf einigen ARM-basierten Geräten mit mehreren Kernen zu vermeiden. Erstellen Sie Ihre unveränderten Quellen mit dieser Version des NDK neu. Dieses Problem sollte vollständig beseitigt sein. Weitere Informationen findest du unterdocs/ANDROID-ATOMICS.html
.binutils
2.19 wurde wiederhergestellt, um Debugging-Probleme in NDK r7 zu beheben (der Wechsel zubinutils
2.20.1).ndk-build
unter 32-Bit-Linux wurde korrigiert. Aufgrund eines Paketfehlers wurde eine 64-Bit-Version der ausführbaren Dateiawk
in NDK r7 unterprebuilt/linux-x86/bin
abgelegt.- Der native Windows-Build wurde korrigiert (
ndk-build.cmd
). Andere Build-Modi waren nicht betroffen. Folgende Fehler wurden behoben:- Es wurde ein Endlosschleifen-/Stacküberlauf-Bug entfernt, der bei dem Versuch aufgetreten ist,
ndk-build.cmd
aus einem Verzeichnis aufzurufen, das sich nicht ganz oben in deinem Projektpfad befand (z.B. in einem Unterverzeichnis davon). - Ein Problem wurde behoben, bei dem die automatisch generierten Abhängigkeitsdateien ignoriert wurden. Dies bedeutete, dass durch die Aktualisierung eines Headers keine Neukompilierung der Quellen ausgelöst wurde, in denen der Header enthalten war.
- Sonderzeichen in Dateien oder Pfaden, mit Ausnahme von Leerzeichen und Anführungszeichen, wurden nicht korrekt verarbeitet. Dieses Problem wurde behoben.
- Es wurde ein Endlosschleifen-/Stacküberlauf-Bug entfernt, der bei dem Versuch aufgetreten ist,
- Die eigenständige Toolchain wurde korrigiert, sodass bei Verwendung von
-lstdc++
(d.h. einer Verknüpfung mit der GNU-C++-Laufzeitlibstdc++
) ordnungsgemäße Binärdateien generiert werden. Verwenden Sie-lgnustl_shared
, wenn Sie eine Verknüpfung mit der Version der gemeinsam genutzten Bibliothek erstellen möchten, oder-lstdc++
für die statische Version.Weitere Informationen zu dieser Korrektur findest du unter
docs/STANDALONE-TOOLCHAIN.html
. - Problem mit
gnustl_shared
für Cygwin behoben. Die Verknüpfung hat gemeldet, dasslibsupc++.a
nicht gefunden werden konnte, obwohl sich die Datei am richtigen Speicherort befindet. - Der Cygwin-C++-Link wurde korrigiert, wenn über
APP_STL
keine bestimmte C++-Laufzeit verwendet wurde.
- Weitere Änderungen:
-
- Wenn Ihre Anwendung die GNU-Laufzeit
libstdc++
verwendet, erzwingt der Compiler die Aktivierung von Ausnahmen und RTTI nicht mehr. Durch diese Änderung wird der Code kleiner.Wenn Sie diese Funktionen benötigen, führen Sie einen der folgenden Schritte aus:
- Aktivieren Sie Ausnahmen und/oder RTTI explizit in Ihren Modulen oder
Application.mk
. (empfohlen) - Definiere
APP_GNUSTL_FORCE_CPP_FEATURES
als'exceptions'
,'rtti'
oder beides in deinerApplication.mk
. Weitere Informationen finden Sie unterdocs/APPLICATION-MK.html
.
- Aktivieren Sie Ausnahmen und/oder RTTI explizit in Ihren Modulen oder
ndk-gdb
funktioniert jetzt ordnungsgemäß, wenn private Dienste Ihrer Anwendung in unabhängigen Prozessen ausgeführt werden. Sie debuggt den Hauptanwendungsprozess und nicht den ersten Prozess, der nachps
aufgeführt wird. Dieser Prozess ist normalerweise ein Dienstprozess.- Es wurde ein seltener Fehler behoben, bei dem NDK r7 den Wert
LOCAL_ARM_MODE
nicht berücksichtigt und bestimmte (aber nicht alle) Quelldateien immer zu 32-Bit-Anweisungen kompiliert hat. STLport
: Aktualisieren Sie die Quellen, damit sie mit der Version der Android-Plattform übereinstimmen. Mit diesem Update werden einige kleinere Fehler behoben:- Die Instanziierung eines unvollständigen Typs wurde korrigiert.
- Kleinere Tippfehler "==" im Vergleich zu "=" wurden behoben.
memmove
stattmemcpy
instring::assign
verwendet- Die Verarbeitung von
IsNANorINF
,IsINF
,IsNegNAN
usw. wurde verbessert.
Ausführliche Informationen finden Sie im Commit-Log.
STLport
: 5 nicht erforderliche statische Initialisierungen wurden aus der Bibliothek entfernt.- Die GNU-Bibliotheken „libstdc++“ 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 zu einer etwas besseren Leistung führen.
- Die Hilfsbibliothek
cpu-features
wurde aktualisiert, um drei optionale x86-CPU-Features zu melden (SSSE3
,MOVBE
undPOPCNT
). Weitere Informationen finden Sie unterdocs/CPU-FEATURES.html
. docs/NDK-BUILD.html
wurde aktualisiert, umNDK_APPLICATION_MK
anstelle vonNDK_APP_APPLICATION_MK
zu verwenden, um eine benutzerdefinierteApplication.mk
-Datei auszuwählen.- Cygwin:
ndk-build
erstellt beim Aufruf keine leere „NUL“-Datei im aktuellen Verzeichnis mehr. - Cygwin: Verbesserung der automatischen Abhängigkeitserkennung. In der vorherigen Version funktionierte es in den folgenden Fällen nicht richtig:
- Wenn das Laufwerkspräfix Cygwin nicht
/cygdrive
war. - Bei der Verwendung von Bereitstellungen ohne Laufwerk, z. B. wenn Cygwin
/home
in\\server\subdir
anstelle vonC:\Some\Dir
übersetzt.
- Wenn das Laufwerkspräfix Cygwin 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-Laufzeit
Android NDK r7 (November 2011)
Diese Version des NDK enthält neue Funktionen zur Unterstützung der Android 4.0-Plattform sowie viele weitere Ergänzungen und Verbesserungen:
- Neue Funktionen
-
- Es wurden offizielle NDK APIs für Android 4.0 (API-Level 14) hinzugefügt. Dadurch werden der Plattform die folgenden nativen Funktionen hinzugefügt:
- Eine native Multimedia-API, die auf dem OpenMAX AL 1.0.1-Standard der Khronos Group basiert, wurde hinzugefügt. Mit den neuen
<OMXAL/OpenMAXAL.h>
- und<OMXAL/OpenMAXAL_Android.h>
-Headern können Anwendungen, die auf API-Level 14 ausgerichtet sind, über eine neue Android-spezifische Schnittstelle für Pufferwarteschlangen Multimedia-Ausgaben direkt aus nativem Code ausführen. Weitere Informationen finden Sie unterdocs/openmaxal/index.html
und http://www.khronos.org/openmax/. - Die native Audio API wurde auf Basis des OpenSL ES 1.0.1-Standards der Khronos Group aktualisiert. Mit API-Level 14 können Sie jetzt komprimierte Audiodateien (z.B. MP3, AAC, Vorbis) in PCM decodieren. Weitere Informationen finden Sie unter
docs/opensles/index.html
und http://www.khronos.org/opensles/.
- Eine native Multimedia-API, die auf dem OpenMAX AL 1.0.1-Standard der Khronos Group basiert, wurde hinzugefügt. Mit den neuen
- CCache-Unterstützung wurde hinzugefügt. Wenn Sie umfangreiche Neuerstellungen beschleunigen möchten, definieren Sie die Umgebungsvariable
NDK_CCACHE
alsccache
(oder den Pfad zu Ihrerccache
-Binärdatei). Wenn deklariert, verwendet das NDK-Build-System beim Kompilieren einer Quelldatei automatisch CCache. Beispiel:export NDK_CCACHE=ccache
Hinweis:CCache ist nicht im NDK-Release enthalten. Es muss daher vor der Verwendung installiert werden. Weitere Informationen zu CCache finden Sie unter http://ccache.samba.org.
- Unterstützung für die Einstellung von
APP_ABI
aufall
hinzugefügt, um anzugeben, dass Sie Ihre NDK-Module für alle ABIs erstellen möchten, die von Ihrem NDK-Release unterstützt werden. Das bedeutet, dass eine der folgenden beiden Zeilen in der DateiApplication.mk
dieser Version entspricht:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Dies funktioniert auch, wenn Sie
APP_ABI
definieren, wenn Siendk-build
über die Befehlszeile aufrufen. 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. Beispiele:ndk-build APP_ABI=all
- In
Android.mk
wurde eineLOCAL_CPP_FEATURES
-Variable hinzugefügt, mit der du deklarieren kannst, welche C++-Funktionen (RTTI oder Ausnahmen) von deinem Modul verwendet werden. Dadurch wird sichergestellt, dass die endgültige Verknüpfung ordnungsgemäß funktioniert, wenn Sie vordefinierte Module haben, die von diesen Features 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
aus Ihrem 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 Beschränkungen für die maximale Befehlszeilenlänge zu vermeiden, die von Ihrem Hostbetriebssystem unterstützt wird. Das Verhalten bleibt unverändert, wenn Siendk-build
aus einem Unterverzeichnis Ihrer Projektstruktur aufrufen oderNDK_PROJECT_PATH
so definieren, dass es auf ein bestimmtes Verzeichnis verweist.
- Es wurden offizielle NDK APIs für Android 4.0 (API-Level 14) hinzugefügt. Dadurch werden der Plattform die folgenden nativen Funktionen hinzugefügt:
- Experimentelle Funktionen
-
Sie können Ihre NDK-Quelldateien jetzt unter Windows ohne Cygwin erstellen. Dazu rufen Sie das Script
ndk-build.cmd
über die Befehlszeile aus Ihrem Projektpfad auf. Das Skript verwendet dieselben Argumente wie das ursprünglichendk-build
-Skript. Das Windows-NDK-Paket enthält eigene vorgefertigte Binärdateien für GNU Make, Awk und andere für den Build erforderliche Tools. Sie müssen nichts anderes installieren, um ein funktionierendes Build-System zu erhalten.Wichtig:
ndk-gdb
funktioniert nicht unter Windows, sodass Sie weiterhin Cygwin zur Fehlerbehebung benötigen.Diese Funktion befindet sich noch in der Testphase. Sie können sie also ausprobieren und Probleme in der öffentlichen Fehlerdatenbank oder im öffentlichen Forum melden. Alle mit dem NDK gelieferten Stichproben und Einheitentests wurden erfolgreich mit diesem Feature kompiliert.
- Wichtige Fehlerkorrekturen
-
- Importierte gemeinsam genutzte Bibliotheken werden jetzt standardmäßig am Zielinstallationsort (
libs/<abi>
) installiert, wennAPP_MODULES
in IhremApplication.mk
nicht definiert ist. Wenn beispielsweise ein Modulfoo
der obersten Ebene ein Modulbar
importiert, werden sowohllibfoo.so
als auchlibbar.so
an den Installationsort kopiert. Zuvor wurde nurlibfoo.so
kopiert, sofern Sie nicht auchbar
inAPP_MODULES
aufgeführt haben. Wenn SieAPP_MODULES
explizit definieren, bleibt das Verhalten unverändert. ndk-gdb
funktioniert jetzt korrekt für Aktivitäten mit mehreren Kategorien in den MAIN-Intent-Filtern.- Importe statischer Bibliotheken sind jetzt korrekt Transitiv. Wenn beispielsweise ein Modul
foo
der obersten Ebene 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 wurde behoben. Das Mindest-API-Level sollte 9 sein, nicht 8 für native Aktivitäten.docs/STABLE-APIS.html
: Fehlende Dokumentation mit der EGL als unterstützte stabile API hinzugefügt (ab API-Level 9)download-toolchain-sources.sh
: Aktualisiert, um die Toolchain-Quellen von android.googlesource.com herunterzuladen. Dies ist der neue Speicherort für die AOSP-Server.- Eine neue C++-Supportlaufzeit mit dem Namen
gabi++
wurde hinzugefügt. Weitere Informationen finden Sie in der aktualisiertendocs/CPLUSPLUS-SUPPORT.html
. - Es wurde eine neue C++-Supportlaufzeit mit dem Namen
gnustl_shared
hinzugefügt, die der Version der gemeinsam genutzten Bibliothek von GNU libstdc++ v3 (GPLv3-Lizenz) entspricht. Weitere Informationen findest du unterdocs/CPLUSPLUS-SUPPORT.html
- Zusätzliche Unterstützung für RTTI in den STLport C++-Laufzeiten (keine Unterstützung für Ausnahmen).
- Mehrere Dateiendungen werden jetzt in
LOCAL_CPP_EXTENSION
unterstützt. Wenn du beispielsweise sowohlfoo.cpp
als auchbar.cxx
als C++-Quellen kompilieren möchtest, musst du Folgendes angeben:LOCAL_CPP_EXTENSION := .cpp .cxx
- Wir haben viele unerwünschte exportierte Symbole aus den vom NDK bereitgestellten Link-Time-Systembibliotheken entfernt. So wird sichergestellt, dass mit der eigenständigen Toolchain generierter Code nicht versehentlich von einem instabilen ABI-Symbol abhängig ist (z. B. von jedem 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 dadurch nicht die NDK-ABIs für die entsprechenden Bibliotheken geändert werden, da jede Erweiterung zur Laufzeit von der Clientanwendung geprüft werden muss.
Welche Erweiterungen verfügbar sind, hängt von Ihrem Gerät und Ihren GPU-Treibern ab, nicht von der Plattformversion, auf der das Gerät ausgeführt wird. Durch die Änderung des Headers werden einfach neue Konstanten und Typen hinzugefügt, um die Verwendung der Erweiterungen zu erleichtern, wenn sie mit
eglGetProcAddress()
oderglGetProcAddress()
geprüft wurden. In der folgenden Liste werden die neuen 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. Der r6b-Release behebt die folgenden Probleme im R6-Release:
- Wichtige Fehlerkorrekturen
-
- Der Build wurde korrigiert, wenn
APP_ABI="armeabi x86"
für Builds mit mehreren Architekturen verwendet wurde. - Der Speicherort der vordefinierten STLport-Binärdateien im NDK-Releasepaket wurde korrigiert. Sie wurden aufgrund eines Fehlers im Skript für die Paketerstellung an die falsche Position verschoben.
- Die Verwendung von
atexit()
in gemeinsam genutzten Bibliotheken mit der eigenständigen x86-Toolchain wurde korrigiert. - Problem mit
make-standalone-toolchain.sh --arch=x86
behoben. Früher konnten die richtigen GNU-libstdc++-Binärdateien nicht an den richtigen Speicherort kopiert werden. - Die Warnungen der eigenständigen Toolchain-Verknüpfung zu fehlenden Definition und Größe für das Symbol
__dso_handle
wurden korrigiert (nur ARM). - Die Einschlussreihenfolge von
$(SYSROOT)/usr/include
für x86-Builds wurde korrigiert. Weitere Informationen finden Sie im Bug. - Die Definitionen von
ptrdiff_t
undsize_t
in x86-spezifischen Systemen wurden korrigiert, wenn sie mit der eigenständigen x86-Toolchain verwendet wurden.
- Der Build wurde korrigiert, wenn
Android NDK r6 (Juli 2011)
Diese Version des NDK unterstützt das x86-ABI und andere kleinere Änderungen.
Ausführliche Informationen zu den Änderungen in diesem Release finden Sie im CHANGES.HTML
-Dokument im NDK-Paket.
- Allgemeine Hinweise:
-
- Mit der Unterstützung für x86 ABI können Sie Maschinencode generieren, der auf kompatiblen x86-basierten Android-Geräten ausgeführt wird. Zu den Hauptfunktionen für x86 gehören x86-spezifische Toolchains, Systemheader, Bibliotheken und Unterstützung für die Fehlerbehebung. Alle Details zur x86-Unterstützung finden Sie unter
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 der DateiApplication.mk
hinzufügen, um Builds 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 keine ARM-basierten Assemblyquellen verwenden, sollten Sie Ihre
Android.mk
-Dateien nicht bearbeiten müssen, um x86-Maschinencode zu erstellen. - Sie können beim Aufrufen von
make-standalone-toolchain.sh
mit der Option--toolchain=x86-4.4.3
eine eigenständige x86-Toolchain erstellen. Weitere Informationen finden Sie unterdocs/STANDALONE-TOOLCHAIN.html
. - Mit dem neuen
ndk-stack
-Tool können Sie Stacktraces inlogcat
übersetzen, die durch nativen Code generiert wurden. Das Tool übersetzt Anweisungsadressen in ein lesbares Format, das Elemente wie die Funktion, die Quelldatei und die Zeilennummer für jeden Stapelframe enthält. Weitere Informationen und ein Anwendungsbeispiel findest du unterdocs/NDK-STACK.html
.
- Mit der Unterstützung für x86 ABI können Sie Maschinencode generieren, der auf kompatiblen x86-basierten Android-Geräten ausgeführt wird. Zu den Hauptfunktionen für x86 gehören x86-spezifische Toolchains, Systemheader, Bibliotheken und Unterstützung für die Fehlerbehebung. Alle Details zur x86-Unterstützung finden Sie unter
- Weitere Änderungen:
arm-eabi-4.4.0
, das seit NDK r5 verworfen 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. Der r5c-Release behebt die folgenden Probleme im r5b-Release:
- Wichtige Fehlerkorrekturen:
-
ndk-build
: Ein seltener Fehler wurde behoben, der beim Versuch auftrat, parallele Builds von debug-fähigen Projekten auszuführen.- Ein Tippfehler, der verhindert, dass
LOCAL_WHOLE_STATIC_LIBRARIES
mit der neuen Toolchain richtig funktioniert, wurde behoben. Eine entsprechende Dokumentation wurde indocs/ANDROID-MK.html
hinzugefügt. - Ein Fehler wurde behoben, bei dem mit
gnustl_static
verknüpfter Code abgestürzt ist, wenn er auf Plattform-Releases ausgeführt wurde, die älter als API-Level 8 (Android 2.2) sind. ndk-gdb
: Es wurde ein Fehler behoben, der beim Debugging von Geräten mit Android 3.0 oder höher einen Segmentierungsfehler verursachte.<android/input.h>
: Zwei Funktionen, die in API-Level 9 (Android 2.3) eingeführt wurden, waren fehlerhaft und wurden behoben. Dadurch wird zwar die Quell-API beeinträchtigt, die binäre Schnittstelle zum System bleibt jedoch unverändert. Bei den falschen Funktionen fehlt der Parameterhistory_index
. Die korrekten Definitionen sind unten aufgeführt: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, damit neue Funktionen, die in dieser API-Ebene hinzugefügt wurden (z. B.
pthread_rwlock_init
), zum Zeitpunkt der Verknüpfung korrekt dargestellt werden.
- Kleinere Verbesserungen und Korrekturen:
-
- Objektdateien sind jetzt immer in der Reihenfolge verknüpft, in der sie in
LOCAL_SRC_FILES
erscheinen. Dies war zuvor nicht der Fall, da die Dateien stattdessen nach Quellerweiterungen 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 verwendete DefinitionNDK_MODULE_PATH
korrekt ist. - Wenn
import-module
erfolgreich ist, wird jetzt das Verzeichnis, in dem das Modul gefunden wurde, im Log ausgegeben (sichtbar mitNDK_LOG=1
). - Die Build-Geschwindigkeit von debug-fä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.
- Es wurde ein Fehler behoben, der verursachte, 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
-Assembly-Dateien verhinderte (.S
-Dateien waren in Ordnung).
- Objektdateien sind 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. Der R5b-Release behebt die folgenden Probleme im R5-Release:
- Für die r5-Binärdateien war glibc 2.11 erforderlich, die r5b-Binärdateien werden jedoch mit einer speziellen Toolchain generiert, die stattdessen auf glibc 2.7 oder höher ausgerichtet ist. Die Linux-Toolchain-Binärdateien werden jetzt unter Ubuntu 8.04 oder höher ausgeführt.
- Es wurde ein Compiler-Programmfehler in der Toolchain arm-linux-androideabi-4.4.3 behoben. Die vorherige Binärdatei hat ungültige Thumb-Anweisungssequenzen im Umgang mit signierten Zeichen generiert.
- Es wurde eine fehlende Dokumentation für den Wert „gnustl_static“ für APP_STL hinzugefügt, mit dem eine Verknüpfung mit einer statischen Bibliotheksversion von GNU „libstdc++“ erstellt werden kann. das
- Die folgenden
ndk-build
-Probleme wurden behoben:- Ein Programmfehler, der inkonsistente Abhängigkeitsdateien verursachte, als unter Windows ein Kompilierungsfehler auftrat. Dies verhinderte einen ordnungsgemäßen Build, nachdem der Fehler im Quellcode behoben wurde.
- Ein Cygwin-spezifischer Fehler, bei dem die Verwendung sehr kurzer Pfade für die Android-NDK-Installation oder der Projektpfad zur Generierung ungültiger Abhängigkeitsdateien führte. Dies machte inkrementelle Builds unmöglich.
- Ein Tippfehler, der verhindert hat, dass die cpufeatures-Bibliothek mit der neuen NDK-Toolchain korrekt funktioniert.
- Builds in Cygwin sind schneller, da Aufrufe von
cygpath -m
von GNU Make für jede Quell- oder Objektdatei vermieden werden, was zu Problemen bei sehr großen Quellbäumen führte. Wenn dies nicht richtig funktioniert, definieren SieNDK_USE_CYGPATH=1
in Ihrer Umgebung, umcygpath -m
noch einmal zu verwenden. - Die Cygwin-Installation benachrichtigt Nutzer jetzt über ungültige Installationspfade, die Leerzeichen enthalten. Bisher hat ein ungültiger Pfad einen Fehler ausgegeben, in dem eine falsche Version von GNU Make gemeldet wurde, selbst wenn die richtige Version installiert war.
- Ein Tippfehler wurde behoben, der verhinderte, dass die Umgebungsvariable
NDK_MODULE_PATH
richtig funktionierte, wenn sie mehrere Verzeichnisse enthält, die durch einen Doppelpunkt getrennt waren. - Das Skript
prebuilt-common.sh
enthält Korrekturen, um den Compiler auf mit 64-Bit generierten Maschinencode zu prüfen, anstatt sich auf das Host-Tag zu verlassen, wodurch die 32-Bit-Toolchain ordnungsgemäß auf Snow Leopard neu erstellt werden kann. Die Toolchain-Rebuild-Skripts unterstützen jetzt auch die Verwendung einer 32-Bit-Host-Toolchain. <netinet/in.h>
wurde eine fehlende Deklaration fürINET_ADDRSTRLEN
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, von denen die meisten eingeführt werden, um die Entwicklung von Spielen und ähnlichen Anwendungen zu unterstützen, die nativen Code in großem Umfang nutzen. Über die APIs haben Entwickler direkten nativen Zugriff auf Ereignisse, Audio, Grafiken und Fensterverwaltung, Assets und Speicher. Entwickler können den Lebenszyklus der Android-Anwendung mithilfe der neuen NativeActivity
-Klasse auch in nativen Code implementieren. Ausführliche Informationen zu den Änderungen in diesem Release finden Sie im CHANGES.HTML
-Dokument im heruntergeladenen NDK-Paket.
- Allgemeine Hinweise:
-
- Mit dieser Option werden native Aktivitäten unterstützt, sodass Sie den Lebenszyklus der Android-Anwendung in nativem Code implementieren können.
- Native Unterstützung für Folgendes:
- Eingabe-Subsystem (z. B. Tastatur und Touchscreen)
- Zugriff auf Sensordaten (Beschleunigungsmesser, Kompass, Gyroskop usw.).
- Event Loop APIs, die auf Elemente wie Eingabe- und Sensorereignisse warten.
- Fenster- und Oberflächensubsystem
- Audio APIs, die auf dem OpenSL ES-Standard basieren und die Wiedergabe und Aufzeichnung unterstützen sowie die Audioeffekte der Plattform steuern
- 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 kann jetzt auch als eigenständiger Cross-Compiler für Nutzer verwendet werden, die ihre Inhalte mit
./configure && make
erstellen möchten. Weitere Informationen finden Sie unter docs/STANDALONE-TOOLCHAIN.html. Die Binärprogramme für GCC 4.4.0 werden weiterhin bereitgestellt, aber die 4.2.1-Binärdateien wurden entfernt. - Unterstützung für vordefinierte statische und gemeinsam genutzte Bibliotheken (docs/PREBUILTS.html) sowie Modulexporte und -importe, um die Freigabe und Wiederverwendung von Modulen von Drittanbietern zu vereinfachen (in Docs/IMPORT-MODULE.html wird dies erklärt).
- Stellt eine standardmäßige C++ STL-Implementierung (basierend auf STLport) als Hilfsmodul bereit. Er kann entweder als statische oder als gemeinsam genutzte Bibliothek verwendet werden (Details und Nutzungsbeispiele finden Sie unter „sources/android/stlport/Readme“). Vordefinierte Binärprogramme für STLport (statisch oder freigegeben) und GNU libstdc++ (nur statisch) stehen ebenfalls zur Verfügung, wenn Sie anstelle der standardmäßigen C++-STL-Implementierung für die Kompilierung diese Bibliotheken auswählen. 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 für den CPU-Typ verbessert (einige Geräte haben zuvor die ARMv7-CPU gemeldet, obwohl es sich tatsächlich um ein ARMv6-Gerät handelte). Wir empfehlen Entwicklern, die diese Bibliothek verwenden, ihre Apps neu zu erstellen und sie 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 die neuen 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 ausführlichere Liste der Änderungen finden Sie unter docs/CHANGES.html.
Android NDK r4b (Juni 2010)
- Hinweise zum NDK r4b:
-
Enthält Fehlerkorrekturen für verschiedene 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 im Dokument CHANGES.TXT, das im heruntergeladenen NDK-Paket enthalten ist.
- Allgemeine Hinweise:
-
- Stellt ein vereinfachtes Build-System über den neuen Build-Befehl
ndk-build
bereit. - Mit dem neuen Befehl
ndk-gdb
wird ein einfaches natives Debugging von generiertem Maschinencode auf Produktionsgeräten unterstützt. - Fügt eine neue Android-spezifische ABI für ARM-basierte CPU-Architekturen hinzu:
armeabi-v7a
. Das neue ABI erweitert das vorhandene ABIarmeabi
um die folgenden CPU-Befehlssatzerweiterungen:- Anleitung für Thumb-2
- FPU-Anleitung für VFP-Hardware (VFPv3-D16)
- Optionale Unterstützung für ARM Advanced SIMD (NEON) GCC-Intrinsik und VFPv3-D32. Wird von Geräten wie Verizon Droid von Motorola, Google Nexus One und anderen unterstützt.
- Fügt eine neue statische
cpufeatures
-Bibliothek (mit Quellen) hinzu, mit der Ihre Anwendung die CPU-Features des Hostgeräts zur Laufzeit erkennen kann. Insbesondere können Anwendungen auf ARMv7-A-Unterstützung sowie VFPv3-D32- und NEON-Unterstützung prüfen und dann bei Bedarf separate Codepfade angeben. - Es wird die Beispielanwendung
hello-neon
hinzugefügt, die zeigt, wie Sie mit der Bibliothekcpufeatures
CPU-Features prüfen und dann mithilfe von NEON-Instruktionen einen optimierten Codepfad bereitstellen, sofern dies von der CPU unterstützt wird. - Generieren Sie Maschinencode für einen oder beide vom NDK unterstützten Befehlssätze. So kannst du beispielsweise gleichzeitig eine ARMv5- und eine ARMv7-A-Architektur erstellen und alles in der endgültigen
.apk
deiner Anwendung speichern. - Damit Ihre Apps nur für Nutzer verfügbar sind, deren Geräte sie ausführen können, filtert Google Play Apps jetzt basierend auf den in Ihrer App enthaltenen Informationen zum Befehlssatz. Sie müssen nichts weiter tun, um die Filterung zu aktivieren. Außerdem prüft das Android-System deine App bei der Installation ebenfalls selbst. Die Installation kann nur fortgesetzt werden, wenn die App eine Bibliothek bereitstellt, die für die CPU-Architektur des Geräts kompiliert wurde.
- Zusätzliche Unterstützung für Android 2.2 sowie eine neue stabile API für den Zugriff auf die Pixelzwischenspeicher von
Bitmap
-Objekten aus nativem Code.
- Stellt ein vereinfachtes Build-System über den neuen Build-Befehl
Android NDK r3 (März 2010)
- Allgemeine Hinweise:
-
- Zusätzliche Unterstützung für OpenGL ES 2.0 native Bibliotheken
- Es wurde die Beispielanwendung
hello-gl2
hinzugefügt, die die Verwendung von OpenGL ES 2.0 Vertex- und Fragment-Shadern veranschaulicht. - Die Toolchain-Binärdateien wurden für diesen Release mit GCC 4.4.0 aktualisiert, wodurch etwas kompakterer und effizienterer Maschinencode als der vorherige (4.2.1) generiert werden sollte. Der NDK stellt auch weiterhin die 4.2.1-Binärdateien bereit, die Sie optional zum Erstellen Ihres Maschinencodes verwenden können.
Android NDK r2 (September 2009)
Ursprünglich veröffentlicht als „Android 1.6 NDK, Release 1“.
- Allgemeine Hinweise:
-
- Zusätzliche Unterstützung für OpenGL ES 1.1-native Bibliotheken
- Es wird die Beispielanwendung
san-angeles
hinzugefügt, 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 veröffentlicht als „Android 1.5 NDK, Release 1“.
- Allgemeine Hinweise:
-
- Umfasst Compiler-Support (GCC) für ARMv5TE-Anweisungen, einschließlich Thumb-1-Anweisungen.
- Enthält Systemheader für stabile native APIs, Dokumentation und Beispielanwendungen.