Ta strona zawiera informacje o zmianach we wszystkich wydanych stabilnych wersjach NDK. Aby pobrać najnowszą stabilną wersję NDK lub dowolną dostępną obecnie wersję beta, zapoznaj się ze stroną pobrań NDK.
Więcej informacji znajdziesz w grupie dyskusyjnej Google android-ndk-announce. Możesz też zasubskrybować powiadomienia o wersjach.
Android NDK r29 (październik 2025 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
Android NDK r28 (luty 2025 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
Android NDK w wersji r27 LTS (lipiec 2024 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
Android NDK r26 LTS (wrzesień 2023 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Wersja KitKat (interfejsy API 19 i 20) nie jest już obsługiwana.
Android NDK r25 LTS (lipiec 2022 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Zawiera interfejsy API Androida 13.
- Zaktualizowano LLVM do clang-r450784d na podstawie wersji deweloperskiej LLVM 14.
Android NDK r24 (marzec 2022 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
GNU Assembler (GAS) został usunięty. Jeśli tworzysz aplikację za pomocą
-fno-integrated-as
, musisz usunąć to oznaczenie. Więcej informacji o dostosowywaniu kodu asemblera do LLVM znajdziesz w uwagach dotyczących migracji do Clang. - Usunięto GDB. Zamiast tego użyj LLDB. Pamiętaj, że ndk-gdb domyślnie używa LLDB, a Android Studio zawsze obsługiwało tylko LLDB.
- Jelly Bean (API 16, 17 i 18) nie jest już obsługiwany. Minimalna wersja systemu operacyjnego obsługiwana przez NDK to KitKat (poziom API 19).
- Urządzenia inne niż Neon nie są już obsługiwane. Bardzo mała liczba bardzo starych urządzeń nie obsługuje Neona, więc większość aplikacji nie zauważy różnicy poza poprawą wydajności.
- Usunęliśmy obsługę kompilacji RenderScript. RenderScript został wycofany w Androidzie 12. Jeśli nie udało Ci się jeszcze przenieść aplikacji z RenderScript, możesz użyć NDK w wersji 23 LTS.
-
GNU Assembler (GAS) został usunięty. Jeśli tworzysz aplikację za pomocą
Android NDK r23 LTS (sierpień 2021 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Usunięto GNU binutils, z wyjątkiem asemblera GNU (GAS). GAS zostanie usunięty w kolejnej wersji. Jeśli korzystasz z
-fno-integrated-as
, zgłoś błędy, jeśli coś uniemożliwia usunięcie tej flagi. -
Obsługa GDB została zakończona. GDB zostanie usunięty w kolejnej wersji.
Zamiast tego użyj LLDB. Pamiętaj, że
ndk-gdb
domyślnie używa LLDB. - NDK r23 to ostatnia wersja, która będzie obsługiwać architekturę inną niż Neon. Począwszy od NDK r24, biblioteki armeabi-v7a w sysroot będą kompilowane za pomocą Neon. Bardzo mała liczba bardzo starych urządzeń nie obsługuje Neona, więc większość aplikacji nie zauważy różnicy poza poprawą wydajności.
- W kolejnej wersji NDK nie będzie obsługiwany system Jelly Bean (interfejsy API 16, 17 i 18). Minimalna wersja systemu operacyjnego obsługiwana przez NDK w przypadku wersji 24 to KitKat (poziom API 19).
-
Usunięto GNU binutils, z wyjątkiem asemblera GNU (GAS). GAS zostanie usunięty w kolejnej wersji. Jeśli korzystasz z
Android NDK r22b (marzec 2021 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
GNU binutils zostało wycofane i zostanie usunięte w przyszłej wersji NDK. Pamiętaj, że asembler GNU (
as
) jest częścią tego pakietu. Jeśli korzystasz z-fno-integrated-as
, zgłoś błędy, jeśli coś uniemożliwia usunięcie tej flagi. Jeśli używasz bezpośrednioas
, zamiast niego użyjclang
. - Domyślnym linkerem jest teraz LLD. Narzędzie ndk-build i nasz plik łańcucha narzędzi CMake również korzystają z narzędzi llvm-ar i llvm-strip.
- ndk-gdb używa teraz lldb jako debugera. gdb został wycofany i zostanie usunięty w przyszłej wersji. Aby wrócić do gdb, użyj opcji --no-lldb. Zgłoś jednak błąd, wyjaśniając, dlaczego nie udało Ci się użyć lldb.
-
Obsługa
std::filesystem
jest teraz dostępna. Istnieją 2 znane problemy:-
Problem 1258:
std::filesystem::perm_options::nofollow
może nie być obsługiwany na starszych urządzeniach. -
Problem 1260: funkcja
std::filesystem::canonical
będzie działać nieprawidłowo, gdy na starszych urządzeniach zostanie jej przekazana nieistniejąca ścieżka.
-
Problem 1258:
-
GNU binutils zostało wycofane i zostanie usunięte w przyszłej wersji NDK. Pamiętaj, że asembler GNU (
Android NDK r21e LTS (styczeń 2021 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
32-bitowa wersja systemu Windows nie jest już obsługiwana. Nie ma to wpływu na zdecydowaną większość użytkowników. Jeśli nadal musisz tworzyć aplikacje NDK w 32-bitowych wersjach Windows, używaj NDK r20.
Więcej informacji o tej zmianie w narzędziach dla deweloperów aplikacji na Androida znajdziesz w poście na blogu na ten temat.
-
LLD jest już dostępny do testowania.
AOSP domyślnie używa LLD, a NDK będzie postępować podobnie (nie wiadomo, kiedy to nastąpi). Przetestuj LLD w aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. Pamiętaj, że problem 843 wpłynie na kompilacje, które używają LLD z binutils strip i objcopy zamiast llvm-strip i llvm-objcopy. -
Ścieżki instalacji starszego łańcucha narzędzi zostaną usunięte w kolejnych wersjach. Te ścieżki są przestarzałe od wersji NDK r19 i zajmują znaczną ilość miejsca w NDK. Usuwane ścieżki to:
- platformy
- sources/cxx-stl
- sysroot
- łańcuchy narzędzi (z wyjątkiem łańcuchów narzędzi/llvm);
make_standalone_toolchain.py
(chociaż ten skrypt jest niepotrzebny od wersji r19). Informacje o migracji z starszego układu łańcucha narzędzi znajdziesz w przewodniku dla osób zarządzających systemem kompilacji w wersji NDK, której używasz. - Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Rozpocznij przenoszenie numeru już teraz, aby uniknąć niespodzianek w przyszłości. Więcej informacji znajdziesz w tym poście na blogu.
- Pakiet aplikacji na macOS, który jest podpisany i notarialnie poświadczony, jest już dostępny do pobrania z naszej wiki i naszej witryny. Pamiętaj, że tylko pakiety mogą używać ścieżek RPATH i przejść proces notarialny, więc tradycyjny pakiet NDK dla macOS nie może zostać poświadczony notarialnie. Pakiet SDK będzie nadal używać tradycyjnego pakietu, ponieważ pakiet aplikacji wymaga zmian w układzie, które spowodowałyby jego niezgodność z Androidem Studio. NDK nie jest poddawany kwarantannie, gdy jest pobierany za pomocą menedżera pakietu SDK, więc jest obecnie dozwolony przez Gatekeepera. Menedżer SDK jest obecnie najbardziej niezawodnym sposobem na uzyskanie NDK na macOS.
-
Android NDK r20b (czerwiec 2019)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
LLD jest już dostępny do testowania.
AOSP jest w trakcie przechodzenia na domyślne używanie LLD, a NDK będzie podążać za tym trendem (harmonogram nieznany). Przetestuj LLD w aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. - Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Rozpocznij przenoszenie numeru już teraz, aby uniknąć niespodzianek w przyszłości. Więcej informacji znajdziesz w tym poście na blogu.
- Dodano interfejsy API Androida Q.
-
LLD jest już dostępny do testowania.
AOSP jest w trakcie przechodzenia na domyślne używanie LLD, a NDK będzie podążać za tym trendem (harmonogram nieznany). Przetestuj LLD w aplikacji, przekazując
Android NDK r19c (styczeń 2019)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Deweloperzy powinni rozpocząć testowanie aplikacji za pomocą LLD. AOSP domyślnie używa LLD, a NDK będzie go używać domyślnie w następnej wersji. BFD i Gold zostaną usunięte, gdy LLD przejdzie cykl wydawniczy bez poważnych nierozwiązanych problemów (szacowana wersja r21). Przetestuj LLD w aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. Uwaga: lld nie obsługuje obecnie skompresowanych symboli w systemie Windows. Problem 888 Clang nie może też generować skompresowanych symboli w systemie Windows, ale może to stanowić problem podczas korzystania z artefaktów utworzonych w systemie Darwin lub Linux. - Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Rozpocznij przenoszenie numeru już teraz, aby uniknąć niespodzianek w przyszłości. Więcej informacji znajdziesz w tym poście na blogu.
-
Problem 780:
Samodzielne
zestawy narzędzi nie są już potrzebne. Clang, binutils, sysroot i inne elementy łańcucha narzędzi są teraz instalowane w folderze
$NDK/toolchains/llvm/prebuilt/<host-tag>
, a Clang automatycznie je znajdzie. Zamiast tworzyć samodzielny łańcuch narzędzi dla interfejsu API 26 ARM, wywołaj kompilator bezpośrednio z NDK: W przypadku r19 łańcuch narzędzi jest też instalowany w starej ścieżce, aby systemy kompilacji mogły dostosować się do nowego układu. Stare ścieżki zostaną usunięte w wersji 20. Skrypt$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
nie zostanie usunięty. Nie jest już potrzebny i będzie wyświetlać ostrzeżenie z powyższymi informacjami, ale skrypt pozostanie, aby zachować dotychczasowe przepływy pracy. Jeśli używasz ndk-build, CMake lub samodzielnego łańcucha narzędzi, Twój proces pracy nie powinien się zmienić. Ta zmiana jest istotna dla osób zarządzających systemami kompilacji innych firm, które powinny teraz móc usunąć część kodu związanego z Androidem. Więcej informacji znajdziesz w przewodniku Tworzenie systemu – osoby odpowiedzialne za utrzymanie. - Usunięto ndk-depends. Uważamy, że ReLinker jest lepszym rozwiązaniem problemów z ładowaniem bibliotek natywnych w starszych wersjach Androida.
- Problem 862: usunięto skrypty otoki GCC, które przekierowywały do Clang, ponieważ nie są wystarczająco funkcjonalne, aby można je było zastąpić.
-
Deweloperzy powinni rozpocząć testowanie aplikacji za pomocą LLD. AOSP domyślnie używa LLD, a NDK będzie go używać domyślnie w następnej wersji. BFD i Gold zostaną usunięte, gdy LLD przejdzie cykl wydawniczy bez poważnych nierozwiązanych problemów (szacowana wersja r21). Przetestuj LLD w aplikacji, przekazując
Android NDK r18b (wrzesień 2018 r.)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- GCC zostało usunięte.
-
LLD jest już dostępny do testowania.
AOSP jest w trakcie przechodzenia na domyślne używanie LLD, a NDK będzie podążać za tym trendem (harmonogram nieznany). Przetestuj LLD w aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. - Biblioteki gnustl, gabi++ i stlport zostały usunięte.
- Usunęliśmy obsługę ICS (Android 14 i 15). Aplikacje korzystające z plików wykonywalnych nie muszą już udostępniać plików wykonywalnych PIE i non-PIE.
- Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Rozpocznij przenoszenie numeru już teraz, aby uniknąć niespodzianek w przyszłości. Więcej informacji znajdziesz w tym poście na blogu.
Android NDK r17c (czerwiec 2018)
Dziennik zmian- Pobrane
-
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- GCC nie jest już obsługiwany. Zostanie ona usunięta w NDK r18.
-
libc++ jest teraz domyślną biblioteką STL w przypadku CMake i samodzielnych łańcuchów narzędzi. Jeśli ręcznie wybrano inny plik STL, zalecamy przejście na
libc++
. Pamiętaj, że ndk-build nadal domyślnie nie używa STL. Więcej informacji znajdziesz w tym poście na blogu. - Biblioteki gnustl i stlport zostały wycofane i zostaną usunięte w NDK r18.
- Usunęliśmy obsługę architektur ARMv5 (armeabi), MIPS i MIPS64. Próba utworzenia dowolnego z tych interfejsów ABI spowoduje wyświetlenie błędu.
- Obsługa ICS (android-14 i android-15) zostanie usunięta w wersji r18.
- Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Rozpocznij przenoszenie numeru już teraz, aby uniknąć niespodzianek w przyszłości. Więcej informacji znajdziesz w tym poście na blogu.
Android NDK r16b (grudzień 2017 r.)
Dziennik zmian- Pobrane
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Wycofane nagłówki zostały usunięte. Zunifikowane nagłówki to teraz po prostu „Nagłówki”. Wskazówki dotyczące migracji znajdziesz w uwagach dotyczących migracji ujednoliconych nagłówków.
- GCC nie jest już obsługiwany. Nie zostanie jeszcze usunięty z NDK, ale nie będzie już otrzymywać wersji wstecznych. Nie można go usunąć, dopóki biblioteka libc++ nie będzie wystarczająco stabilna, aby stać się domyślną, ponieważ niektóre części biblioteki gnustl są nadal niezgodne z kompilatorem Clang. Zostanie on usunięty, gdy w wersji 18 usunięte zostaną pozostałe pliki STL.
libc++
jest już po testach beta i jest teraz preferowaną biblioteką STL w NDK. Od wersji r17libc++
jest domyślną biblioteką STL dla CMake i samodzielnych łańcuchów narzędzi. Jeśli ręcznie wybrano inny STL, zalecamy przejście nalibc++
. Więcej informacji znajdziesz w tym poście na blogu.- Obsługa architektur ARM5 (armeabi), MIPS i MIPS64 została wycofana. Nie będą już domyślnie kompilowane za pomocą ndk-build, ale nadal można je skompilować, jeśli zostaną wyraźnie wymienione, i będą uwzględniane w przypadku opcji „all”, „all32” i „all64”. Obsługa każdego z tych elementów została usunięta w wersji 17. Zarówno CMake, jak i ndk-build wyświetlą ostrzeżenie, jeśli kierujesz reklamy na którykolwiek z tych interfejsów ABI.
- Interfejsy API
-
Dodano natywne interfejsy API dla Androida 8.1. Więcej informacji o tych interfejsach API znajdziesz w przeglądzie interfejsów API.
Więcej informacji o nowościach i zmianach w tej wersji znajdziesz w tym dzienniku zmian.
Android NDK r15c (lipiec 2017 r.)
Dziennik zmian- Pobrane
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Ujednolicone nagłówki są domyślnie włączone. Więcej informacji o korzystaniu z tych nagłówków znajdziesz w artykule Ujednolicone nagłówki.
- GCC nie jest już obsługiwany. Nie została jeszcze usunięta z NDK, ale nie otrzymuje już aktualizacji wstecznych. Nie można go usunąć, dopóki biblioteka libc++ nie będzie wystarczająco stabilna, aby stać się domyślną, ponieważ niektóre części biblioteki gnustl są nadal niezgodne z kompilatorem Clang.
- Android 2.3 (
android-9
) nie jest już obsługiwany. Minimalny docelowy poziom interfejsu API w NDK to teraz Android 4.0 (android-14
). Jeśli parametrAPP_PLATFORM
jest ustawiony na wartość niższą niżandroid-14
, zamiast niego używana jest wartośćandroid-14
. - CMake w NDK obsługuje teraz kompilowanie kodu asemblera napisanego w YASM, który będzie działać na architekturach x86 i x86-64. Więcej informacji znajdziesz w artykule Tworzenie kodu asemblera.
Uwaga: wycofane nagłówki zostaną usunięte w jednej z najbliższych wersji. Jeśli napotkasz problemy z tymi nagłówkami, zgłoś błąd.
Wskazówki dotyczące migracji znajdziesz w notatkach na temat migracji ujednoliconych nagłówków.
- Interfejsy API
-
Dodano natywne interfejsy API dla Androida 8.0. Więcej informacji o tych interfejsach API znajdziesz w omówieniu interfejsów API natywnych.
Więcej informacji o nowościach i zmianach w tej wersji znajdziesz w tym dzienniku zmian.
Android NDK r14b (marzec 2017 r.)
Dziennik zmian- Pobrane
- Pliki do pobrania dla tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Ujednolicone nagłówki: ta wersja wprowadza nagłówki platformy, które są synchronizowane i zawsze aktualne oraz zgodne z platformą Android. Poprawki błędów dotyczące tylko nagłówków mają teraz wpływ na wszystkie poziomy interfejsu API. Wprowadzenie ujednoliconych nagłówków rozwiązuje problemy z niezgodnościami w starszych wersjach NDK, takie jak:
- Nagłówki w kolumnach M i N były w rzeczywistości nagłówkami kolumny L.
- Deklaracje funkcji w plikach nagłówkowych nie pasowały prawidłowo do poziomów platformy; pliki nagłówkowe deklarowały nieistniejące funkcje lub nie deklarowały dostępnych funkcji.
- W przypadku kilku starszych poziomów API brakowało stałych lub były one nieprawidłowe, a w nowszych poziomach API były one dostępne.
Te nowe ujednolicone nagłówki nie są domyślnie włączone. Aby dowiedzieć się, jak włączyć i używać tych nagłówków, zapoznaj się z artykułem Ujednolicone nagłówki.
- Wycofanie GCC: ta wersja kończy aktywną obsługę GCC. GCC nie zostanie jeszcze usunięty z NDK, ale nie będzie już otrzymywać aktualizacji. Niektóre części gnustl są nadal niezgodne z Clangiem, więc GCC nie zostanie całkowicie usunięty, dopóki libc++ nie będzie wystarczająco stabilna, aby stać się domyślną biblioteką.
- Ujednolicone nagłówki: ta wersja wprowadza nagłówki platformy, które są synchronizowane i zawsze aktualne oraz zgodne z platformą Android. Poprawki błędów dotyczące tylko nagłówków mają teraz wpływ na wszystkie poziomy interfejsu API. Wprowadzenie ujednoliconych nagłówków rozwiązuje problemy z niezgodnościami w starszych wersjach NDK, takie jak:
Więcej informacji o nowościach i zmianach w tej wersji znajdziesz w tym dzienniku zmian.
Android NDK r13b (październik 2016 r.)
- Pobrane
- Pliki do pobrania dla tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
-
- GCC nie jest już obsługiwany. Nie zostanie jeszcze usunięty z NDK, ale nie będzie już otrzymywać wersji wstecznych. Nie można go usunąć, dopóki biblioteka libc++ nie będzie wystarczająco stabilna, aby stać się domyślną, ponieważ niektóre części biblioteki gnustl są nadal niezgodne z kompilatorem Clang. Po tym czasie prawdopodobnie zostanie usunięta.
- Dodano simpleperf, profiler CPU na Androida.
- r13b
-
-
Dodatkowe poprawki dotyczące brakujących
__cxa_bad_cast
.
-
Dodatkowe poprawki dotyczące brakujących
- NDK
-
NDK_TOOLCHAIN_VERSION
ma teraz domyślnie wartość Clang.- Biblioteka libc++ została zaktualizowana do wersji r263688.
- Zresetowaliśmy repozytorium do (prawie) czystego repozytorium nadrzędnego. Powinno to usunąć wiele błędów, ale zanim zalecimy tę bibliotekę jako domyślną, musimy jeszcze ją oczyścić.
-
make-standalone-toolchain.sh
jest teraz po prostu otoczką wersji narzędzia w języku Python. Istnieje kilka różnic w zachowaniu. Szczegółowe informacje znajdziesz w komunikacie o zatwierdzeniu. - Usunęliśmy niektóre biblioteki dla nieobsługiwanych interfejsów ABI (mips64r2, mips32r6, mips32r2 i x32). Może jeszcze ktoś się spóźni.
- Rozwiązano problemy z plikiem crtbegin_static.o, które powodowały brak funkcji atexit w czasie łączenia podczas tworzenia statycznego pliku wykonywalnego dla ARM android-21+: problem 132.
- Dodano plik łańcucha narzędzi CMake w folderze build/cmake/android.toolchain.cmake.
- Znane problemy
-
- Nie jest to pełna lista wszystkich nierozwiązanych błędów.
- Samodzielne łańcuchy narzędzi korzystające z libc++ i GCC nie działają. Wygląda na to, że jest to błąd w GCC. Więcej informacji znajdziesz w komunikacie o zatwierdzeniu.
- Nagłówki i biblioteki bioniczne dla Marshmallow i N nie są jeszcze udostępniane, mimo że w systemie jest android-24. Te platformy nadal są nagłówkami i bibliotekami Lollipop (nie jest to regresja z r11).
- Brak narzędzi RenderScript (nie jest to regresja w porównaniu z wersją 11):problem 7.
Android NDK r12b (czerwiec 2016 r.)
- Pobrane
- Pliki do pobrania dla tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
- Polecenie
ndk-build
domyślnie używa Clang w wersji r13. W kolejnej wersji usuniemy GCC. - Skrypt
make-standalone-toolchain.sh
zostanie usunięty w wersji r13. Sprawdź, czymake_standalone_toolchain.py
spełnia Twoje potrzeby. - Zgłoś problemy na GitHubie.
- Naprawiliśmy
ndk-gdb.py
. (Wydanie 118) -
Zaktualizowaliśmy
NdkCameraMetadataTags.h
, aby nie zawierał już nieprawidłowej wartości wyliczeniowej. - Naprawiono błąd w ndk-build, który powodował fałszywe ostrzeżenia dotyczące bibliotek statycznych korzystających z libc++. Więcej informacji o tej zmianie znajdziesz w komentarzach tutaj.
- Nagłówki OpenSLES zostały zaktualizowane w przypadku androida 24.
- NDK
- Usunęliśmy obsługę interfejsu ABI armeabi-v7a-hard. Więcej informacji znajdziesz w tym wyjaśnieniu.
- Usunięto wszystkie katalogi sysroot dla poziomów platformy starszych niż GB. W wersji r11 wycofaliśmy obsługę tych funkcji, ale zapomnieliśmy je usunąć.
- Obsługa wyjątków podczas korzystania z c++_shared na urządzeniach ARM32 działa już w większości przypadków. Od teraz moduł odwijania będzie połączony z każdym połączonym obiektem, a nie z biblioteką libc++. Więcej informacji o obsłudze tego wyjątku znajdziesz w sekcji Znane problemy.
- Domyślne flagi kompilatora zostały usunięte.
(wydanie 27).
- Pełne informacje o tych zmianach znajdziesz na tej liście.
- Dodano implementację samodzielnych łańcuchów narzędzi w Pythonie:
build/tools/make_standalone_toolchain.py
- Użytkownicy systemu Windows nie potrzebują już Cygwina, aby korzystać z tej funkcji.
- W wersji 13 usuniemy bash, więc już teraz przetestuj nową wersję.
-fno-limit-debug-info
jest domyślnie włączona w przypadku kompilacji debugowania Clang. Ta zmiana powinna ułatwić debugowanie za pomocą LLDB.--build-id
jest teraz domyślnie włączona.- Identyfikator kompilacji będzie teraz widoczny w raportach o awariach natywnych, dzięki czemu łatwo zidentyfikujesz wersję kodu, która była uruchomiona.
NDK_USE_CYGPATH
nie powinna już powodować problemów z biblioteką libgcc. (Android Problem 195486)- Opcje
-Wl
,--warn-shared-textrel
i-Wl,--fatal-warnings
są teraz domyślnie włączone. Jeśli masz udostępnione przeniesienia tekstu, aplikacja nie może się wczytać na Androidzie 6.0 (API na poziomie 23) ani nowszym. Przenoszenie tekstu nigdy nie było dozwolone w przypadku aplikacji 64-bitowych. - Wstępnie skompilowane nagłówki powinny działać lepiej. (numer 14 i numer 16)
- Usunięto niedostępne biblioteki STL ARM (inne niż Thumb).
- Dodano obsługę interfejsu Vulkan w Androidzie 24.
- Dodano interfejs Choreographer API do android-24.
- Dodano interfejsy API
libcamera2
dla urządzeń z Androidem w wersjiINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
lub nowszej. Więcej informacji znajdziesz w artykule Charakterystyka aparatu. - Clang
- Clang został zaktualizowany do wersji 3.8svn (r256229, kompilacja 2812033).
- Pliki wykonywalne
clang.exe
iclang++.exe
w 32-bitowym pakiecie Windows są w rzeczywistości 64-bitowe. Plik wykonywalny 32-bitowy ma nazwęclang_32.exe
.
- Pliki wykonywalne
- GCC
- Zsynchronizowano z GCC w ChromeOS @ google/gcc-4_9 r227810.
- Przeniesiona wstecz poprawka narzędzia do czyszczenia pokrycia z ToT (r231296).
- Naprawiono bibliotekę libatomic, aby nie korzystała z funkcji
ifuncs
. (Numer 31) - Binutils
- Wyciszono komunikaty informacyjne „Znaleziono i naprawiono błąd 843419”.
- Wprowadzono opcję
--long-plt
, aby naprawić wewnętrzny błąd linkera, który występuje podczas łączenia dużych plików binarnych arm32. - Usunęliśmy nieprawidłowe stuby czasu działania dla architektury AArch64. Powodowało to nieprawidłowe obliczanie adresów skoku w przypadku bardzo dużych DSO.
- Wprowadzono opcję domyślną
--no-apply-dynamic
, aby obejść błąd dynamicznego linkera w starszych wersjach Androida. - NDK r11 KI dla
dynamic_cast
nie działa z Clangiem. Naprawiliśmy błędy związane z architekturą x86,stlport_static
i optymalizacją. - GDB
- Zaktualizowano do GDB 7.11. Więcej informacji znajdziesz na stronie GDB News.
- Naprawiono niektóre błędy w
ndk-gdb.py
. - Znane problemy
- x86 ASAN nadal nie działa. Więcej informacji znajdziesz w omówieniu tej listy zmian.
- Odwijanie wyjątków za pomocą
c++_shared
nadal nie działa w przypadku architektury ARM na Androidzie 2.3 (poziom interfejsu API 9) ani Androidzie 4.0 (poziom interfejsu API 14). - Nagłówki i biblioteki Bionic dla Androida 6.0 (poziom interfejsu API 23) i Androida 7.0 (poziom interfejsu API 24) nie są jeszcze udostępniane, mimo że istnieje android-24. Są to nadal nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21) (nie jest to regresja w porównaniu z wersją 11).
- Narzędzia RenderScript nie są dostępne (nie jest to regresja w porównaniu z wersją r11). (Problem 7)
- Ta lista zmian nie jest wyczerpującym spisem wszystkich nierozwiązanych błędów.
__thread
tym razem powinno działać.
Android NDK r12 (czerwiec 2016 r.)
- Pobrane
- Pliki do pobrania dla tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
- W przyszłej wersji polecenie
ndk-build
będzie domyślnie używać kompilatora Clang. GCC zostanie usunięty w jednej z kolejnych wersji. - Skrypt
make-standalone-toolchain.sh
zostanie usunięty w kolejnej wersji. Jeśli używasz tego skryptu, jak najszybciej zaplanuj migrację domake_standalone_toolchain.py
. - NDK
- Usunięto obsługę interfejsu ABI armeabi-v7a-hard. Wyjaśnienie znajdziesz w dokumentacji.
- Usunięto wszystkie katalogi sysroot dla poziomów platformy starszych niż Android 2.3 (poziom API 9). Wycofaliśmy je w NDK r11, ale zapomnieliśmy je usunąć.
- Zaktualizowano obsługę wyjątków podczas korzystania z c++_shared na urządzeniach ARM32, aby w większości przypadków działała prawidłowo (patrz Znane problemy). Odwijanie stosu jest teraz połączone z każdym połączonym obiektem, a nie z samą biblioteką libc++.
- Usunięto domyślne flagi kompilatora (NDK Issue 27). Szczegóły tej aktualizacji znajdziesz w zmianie 207721.
- W
build/tools/make_standalone_toolchain.py
dodaliśmy implementację w Pythonie samodzielnych łańcuchów narzędzi. W systemie Windows nie musisz już korzystać z Cygwina, aby używać tej funkcji. Pamiętaj, że w przyszłej wersji zostanie usunięta wersja bash, więc przetestuj nową już teraz. - Skonfigurowano kompilacje debugowania Clang, aby domyślnie włączać opcję
-fno-limit-debug-info
. Ta zmiana umożliwia lepsze debugowanie za pomocą LLDB. - Włączono
--build-id
jako opcję domyślną. Ta opcja powoduje, że w raportach o awariach natywnych wyświetlany jest identyfikator, dzięki czemu możesz łatwo określić, która wersja kodu była uruchomiona. - Rozwiązaliśmy problem z
NDK_USE_CYGPATH
, który powodował problemy z biblioteką libgcc (problem 195486). - Domyślnie włączone są te opcje:
-Wl,--warn-shared-textrel
i-Wl,--fatal-warnings
. Jeśli masz przeniesienia tekstu udostępnionego, aplikacja nie będzie się wczytywać na Androidzie 6.0 (poziom interfejsu API 23) i nowszych wersjach. Pamiętaj, że ta konfiguracja nigdy nie była dozwolona w przypadku aplikacji 64-bitowych. - Rozwiązaliśmy kilka problemów, aby wstępnie skompilowane nagłówki działały lepiej (NDK Issue 14, NDK Issue 16).
- Usunięto niedostępne biblioteki STL ARM (inne niż Thumb).
- Dodano obsługę interfejsu Vulkan w Androidzie 24.
- Dodano interfejs Choreographer API do android-24.
- Dodano interfejsy API libcamera2 dla urządzeń, które obsługują poziom funkcji
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
lub wyższy. Więcej informacji znajdziesz wCameraCharacteristics
. - Clang
- Clang został zaktualizowany do wersji 3.8svn (r256229, kompilacja 2812033). Pliki wykonywalne
clang.exe
iclang++.exe
w 32-bitowym pakiecie Windows są w rzeczywistości 64-bitowe. 32-bitowy plik wykonywalny ma nazwęclang_32.exe
. - Naprawiliśmy
__thread
, więc tym razem powinno działać. - GCC
- Zsynchronizowano kompilator z ChromeOS GCC @ google/gcc-4_9 r227810.
- Przeniesiona wstecz poprawka narzędzia do czyszczenia pokrycia z ToT (r231296).
- Naprawiono
libatomic
, aby nie używać funkcji ifuncs (NDK Issue 31). - Binutils
- Wyciszono komunikaty informacyjne „Znaleziono i naprawiono erratę 843419”.
- Wprowadzono opcję
--long-plt
, aby rozwiązać wewnętrzny błąd linkera podczas łączenia dużych plików binarnych arm32. - Usunęliśmy nieprawidłowe stuby czasu działania w przypadku
AArch64
. Ten problem powodował nieprawidłowe obliczanie adresów skoku w przypadku bardzo dużych dynamicznych obiektów współdzielonych (DSO). - Wprowadzono opcję domyślną
--no-apply-dynamic
, aby obejść błąd dynamicznego linkera w starszych wersjach Androida. - Rozwiązaliśmy znany problem z NDK r11, który powodował, że
dynamic_cast
nie działało z Clang, x86, stlport_static i optymalizacją. - GDB
- Zaktualizowano do wersji GDB 7.11. Więcej informacji o tej wersji znajdziesz w GDB News.
- Naprawiliśmy kilka błędów w skrypcie
ndk-gdb.py
. - Znane problemy
- x86 Address Sanitizer (ASAN) obecnie nie działa. Więcej informacji znajdziesz w tym artykule.
- Odwijanie wyjątków za pomocą
c++_shared
nie działa w przypadku architektury ARM na Androidzie 2.3 (interfejs API na poziomie 9) ani Androidzie 4.0 (interfejs API na poziomie 14). - Nagłówki i biblioteki Bionic dla Androida 6.0 (poziom interfejsu API 23) i nowszych wersji nie są jeszcze udostępniane, mimo że jest dostępny pakiet android-24. Te platformy nadal mają nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21), co jest zgodne z NDK r11.
- Narzędzia RenderScript nie są dostępne, co jest zgodne z NDK r11. (NDK Issue 7)
- W pliku nagłówkowym
NdkCameraMetadataTags.h
wartość wyliczeniowa tagu metadanych aparatuACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
została umieszczona przez przypadek i zostanie usunięta w następnej wersji. Zamiast tego użyj wartościACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (marzec 2016)
- Zmiany
- Zastosowano dodatkowe poprawki w
ndk-gdb.py
skrypcie. - Dodano opcjonalny argument nazwy pakietu do opcji polecenia
ndk-gdb
--attach
. (Problem 13) - Naprawiono nieprawidłowe ścieżki łańcucha narzędzi dla 32-bitowej platformy Windows. (Wydanie 45)
- Naprawiono ścieżkę względną polecenia
ndk-which
. (Wydanie 29) - Naprawiono użycie cygpath w kompilatorze libgcc. (Android Issue 195486)
Android NDK r11b (marzec 2016)
- NDK
-
- Ważne ogłoszenia
- Przenieśliśmy narzędzie do śledzenia błędów na GitHub.
- Zmiany
- Problem z
ndk-gdb.py
został rozwiązany. W wersji 11 całkowicie się cofnął. ndk-gdb
na Macu został naprawiony.- Dodaliśmy więcej skrótów najwyższego poziomu do narzędzi wiersza poleceń:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. To polecenie było całkowicie nieobecne w poprzednich wersjach.
- Naprawiliśmy samodzielne łańcuchy narzędzi dla libc++, których brakowało
__cxxabi_config.h
. - Poprawiliśmy dokumentację pomocy dotyczącą
--toolchain
wmake-standalone-toolchain.sh
.
- Problem z
- Ważne ogłoszenia
- Clang
-
- Errata
- W przeciwieństwie do tego, co podaliśmy w informacjach o wersji r11, funkcja
__thread
nie działa. Dzieje się tak, ponieważ w wersji Clang, którą dostarczamy, brakuje poprawki błędu dotyczącego emulowanej obsługi TLS.
Android NDK r11 (marzec 2016)
- Clang
-
- Ważne ogłoszenia
- Zdecydowanie zalecamy przejście na Clang.
- Jeśli masz problemy z Clangiem, zgłoś błędy tutaj. Dotyczy to problemów związanych z Clangiem w NDK. W przypadku bardziej ogólnych problemów z Clangiem zgłaszaj błędy, postępując zgodnie z instrukcjami na tej stronie.
- Clang został zaktualizowany do wersji 3.8svn (r243773, kompilacja 2481030).
- Ta wersja jest niemal czystą wersją Clang.
- Pakiet NDK do pobrania dla 64-bitowego systemu Windows zawiera 32-bitową wersję Clang.
- Zdecydowanie zalecamy przejście na Clang.
- Dodatki
- Kompilator Clang obsługuje teraz emulowany protokół TLS.
- Kompilator obsługuje teraz
__thread
, emulując ELF TLS za pomocą danych specyficznych dla wątku pthread. - C++11
thread_local
działa w niektórych przypadkach, ale nie w przypadku danych z nietrywialnymi destruktorami, ponieważ wymagają one obsługi przez libc. To ograniczenie nie obowiązuje w przypadku Androida 6.0 (poziom interfejsu API 23) lub nowszego. - Emulacja TLS nie działa jeszcze w przypadku architektury Aarch64, gdy zmienne TLS są dostępne z biblioteki udostępnionej.
- Kompilator obsługuje teraz
- Kompilator Clang obsługuje teraz emulowany protokół TLS.
- Ważne ogłoszenia
- GCC
-
- Ważne ogłoszenia
- GCC w NDK zostało wycofane na rzecz Clang.
- NDK nie zostanie zaktualizowany do wersji 5.x ani nie będzie akceptować niekrytycznych wersji wstecznych.
- Obsługa błędów kompilacji i wewnętrznych błędów kompilatora w wersji 4.9 będzie rozpatrywana indywidualnie.
- Usuwanie
- Usunięto GCC 4.8. Wszystkie platformy docelowe korzystają teraz z kompilatora GCC 4.9.
- Inne zmiany
- Zsynchronizowano google/gcc-4_9 z r224707. Wcześniej była ona zsynchronizowana z wersją r214835.
- NDK
-
- Ważne ogłoszenia
- Przykłady nie są już uwzględniane w pakiecie NDK. Są one dostępne w GitHubie.
- Dokumentacja nie jest już dołączana do pakietu NDK. Znajduje się ona na stronie dla deweloperów aplikacji na Androida.
- Dodatki
- Dodano natywny interfejs API śledzenia do
android-23
. - Dodano natywny interfejs API wielu sieci do
android-23
. - Włączono biblioteki libc, m i dl, aby udostępniać symbole z wersjami, począwszy od poziomu interfejsu API 21.
- Dodano nagłówki i bibliotekę Vulkan do poziomu API N.
- Dodano natywny interfejs API śledzenia do
- Usuwanie
- Usunięto obsługę urządzenia
_WCHAR_IS_8BIT
. - Usunięto sed.
- Usunięto mclinker.
- Usunięto Perla.
- Usunięto ze wszystkich wersji bibliotek NDK libc, m i dl wszystkie symbole, których nie obsługują wersje tych bibliotek na platformie.
- Częściowo usunięto obsługę mips64r2. Pozostałe zostaną usunięte w przyszłości.
- Usunięto obsługę urządzenia
- Inne zmiany
- Zmieniono domyślne łańcuchy narzędzi ARM na arm7.
- Możesz przywrócić poprzednie działanie, przekazując opcję
-target
jakoarmv5te-linux-androideabi
.
- Możesz przywrócić poprzednie działanie, przekazując opcję
- Zmieniono system kompilacji, aby używać
-isystem
w przypadku platformy includes.- Ostrzeżenia dotyczące przyczyn bionic nie powodują już przerwania kompilacji aplikacji.
- Naprawiono błąd segmentacji, który występował, gdy plik binarny zgłaszał wyjątki za pomocą gabi++. (Problem 179410)
- Zmieniono wbudowaną przestrzeń nazw libc++ na
std::__ndk1
, aby zapobiec problemom z naruszeniem zasady jednego wystąpienia (ODR) w przypadku libc++ na platformie. - Wszystkie biblioteki libc++ są teraz tworzone za pomocą libc++abi.
- Zmieniliśmy domyślną wersję
APP_PLATFORM
na Gingerbread.- W przyszłej wersji planujemy wycofać obsługę Froyo i starszych wersji.
- Zmieniono domyślne łańcuchy narzędzi ARM na arm7.
- Zaktualizowano strukturę gabi++
_Unwind_Exception
dla 64 bitów. - Dodaliśmy te funkcje do cpufeatures:
- Wykrywanie SSE4.1 i SSE4.2.
- Wykrywanie funkcji procesora na platformie x86_64.
- Zaktualizowano libc++abi do wersji upstream r231075.
- Zaktualizowano
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
iuchar.h
z ToT Bionic. - Synchronizacja
sys/cdefs.h
na wszystkich poziomach interfejsu API. - Stała wartość
fegetenv and fesetenv
dla ramienia. - Poprawiono rozmiar/wyrównanie wskaźnika końcowego
crtend_*
dla architektur mips64 i x86_64.
- Ważne ogłoszenia
- Binutils
-
- Dodatki
- Dodaliśmy nową opcję:
--pic-veneer
.
- Dodaliśmy nową opcję:
- Usuwanie
- Pakiet dla 32-bitowego systemu Windows nie zawiera już ld.gold. Zamiast tego możesz pobrać ld.gold z pakietu dla 64-bitowego systemu Windows.
- Zmiany
- Ujednolicone źródło binutils między Androidem a ChromiumOS. Więcej informacji o tej zmianie znajdziesz w komentarzach tutaj.
- Zwiększona niezawodność Gold dla architektury aarch64. Użyj opcji
-fuse-ld=gold
podczas łączenia, aby używać gold zamiast bfd. W kolejnej wersji domyślne ustawienie prawdopodobnie ulegnie zmianie. - Skróciliśmy czas łączenia dużych plików binarnych w przypadku backendu Gold ARM (nawet o 50% w przypadku przeglądarki Chrome z możliwością debugowania).
- Dodatki
- GDB
-
- Usuwanie
- Usunięto ndk-gdb na rzecz ndk-gdb.py.
- Zmiany
- Zaktualizowano gdb do wersji 7.10.
- Ulepszone działanie.
- Ulepszone komunikaty o błędach.
- Naprawiono względne ścieżki projektu.
- Zapobiega zabijaniu serwera gdbserver działającego w tle przez naciśnięcie Ctrl-C.
- Ulepszona obsługa systemu Windows.
- Usuwanie
- YASM
-
- Zmiany
- Zaktualizowano YASM do wersji 1.3.0.
- Zmiany
- Znane problemy
-
- x86 ASAN obecnie nie działa. Więcej informacji znajdziesz w tym artykule.
- Połączenie Clang, x86, stlport_static i poziomów optymalizacji wyższych niż
-O0
powoduje niepowodzenie testów z błędemdynamic_cast
. Więcej informacji znajdziesz w komentarzach tutaj. - Obsługa wyjątków często kończy się niepowodzeniem w przypadku c++_shared na urządzeniach ARM32. Przyczyną główną jest niezgodność między modułem LLVM unwinder, którego biblioteka libc++abi używa na platformie ARM32, a biblioteką libgcc. To zachowanie nie jest regresją w porównaniu z r10e.
Android NDK r10e (maj 2015 r.)
- Pobrane
- Pliki do pobrania dla tej wersji są zarchiwizowane tutaj.
- Ważne zmiany:
-
- Zintegrowano obejście błędu Cortex-A53 Erratum 843419 z
aarch64-linux-android-4.9
linkerem. Więcej informacji o tym obejściu znajdziesz w tym artykule. - Dodano Clang 3.6;
NDK_TOOLCHAIN_VERSION=clang
domyślnie wybiera teraz tę wersję Clang. - Usunięto Clang 3.4.
- Usunięto GCC 4.6.
- Wdrożono obsługę wielowątkowości w
ld.gold
na wszystkich architekturach. Może teraz łączyć się z obsługą wielowątkowości lub bez niej. Domyślnie łączy się bez niej.- Aby skompilować kod z użyciem wielowątkowości, użyj opcji
--threads
. - Aby skompilować bez wielowątkowości, użyj opcji
--no-threads
.
- Aby skompilować kod z użyciem wielowątkowości, użyj opcji
- Uaktualniono GDB/gdbserver do wersji 7.7 na wszystkich architekturach.
- Usunięto pakiet NDK dla 32-bitowego systemu Darwin.
- Zintegrowano obejście błędu Cortex-A53 Erratum 843419 z
- Ważne poprawki błędów:
-
- Naprawiliśmy awarię, która występowała, gdy pętle OpenMP znajdowały się poza wątkiem głównym.
- Rozwiązaliśmy wewnętrzny błąd kompilatora GCC 4.9 (ICE), który występował, gdy użytkownik deklarował
#pragma GCC optimize ("O0")
, ale w wierszu poleceń podawał inny poziom optymalizacji. Zasadapragma
ma pierwszeństwo. - Naprawiono błąd, który powodował awarię z tym komunikatem:
in add_stores, at var-tracking.c:6000
- Wprowadziliśmy obejście problemu z Clang 3.5, w którym automatyczna wektoryzacja LLVM generuje instrukcję
llvm.cttz.v2i64()
, która nie ma odpowiednika w zestawie instrukcji ARM.
- Inne poprawki błędów:
-
- Wprowadzono te poprawki nagłówków i bibliotek:
- Naprawiono
PROPERTY_*
wmedia/NdkMediaDrm.h
. - Naprawiono
sys/ucontext.h
w przypadkumips64
. - Usunięto sprawdzanie wersji Clang w przypadku
__builtin_isnan
i__builtin_isinf
. - Dodano
android-21/arch-mips/usr/include/asm/reg.h
iandroid-21/arch-mips64/usr/include/asm/reg.h
. - Naprawiono fałszywe ostrzeżenie o przekroczeniu zakresu tablicy, które GCC 4.9 generował dla architektury x86, i ponownie włączono ostrzeżenie o przekroczeniu zakresu tablicy, które GCC 4.9 generował dla architektury ARM. Ostrzeżenie dotyczące ARM było wcześniej bezwarunkowo wyłączone.
- Poprawiono Clang 3.5 w przypadku
mips
imips64
, aby utworzyć sekcję.gcc_except_table
z możliwością zapisu, co odpowiada działaniu GCC. Ta zmiana pozwala uniknąć następującego ostrzeżenia linkera:.../ld: warning: creating a DT_TEXTREL in a shared object
- Wprowadziliśmy poprawkę problemów z
compiler-rt
, które powodowały awarie podczas kompilowania kodu w Clang na potrzebymips64
. Więcej informacji znajdziesz w artykule LLVM Issue 20098. - Naprawiliśmy błędy Clang 3.5, które występowały w przypadku komentarzy zawierających znaki spoza zestawu ASCII. (Problem 81440)
- Poprawiono
stlport collate::compare
, aby zwracać-1
i1
. Wcześniej zwracała ona dowolne liczby ze znakiem. - Naprawiono
ndk-gdb
w przypadku 64-bitowych interfejsów ABI. (Problem 118300) - Naprawiono błąd powodujący awarię przykładowej aplikacji HelloComputeNDK dla RenderScript na Androidzie 4.4 (poziom interfejsu API Androida 19). Więcej informacji znajdziesz na tej stronie.
- Naprawiono
libc++ __wrap_iter
w przypadku GCC. Więcej informacji znajdziesz w artykule LLVM Issue 22355. - Naprawiono obsługę
.asm
w przypadku interfejsu ABIx86_64
. - Wprowadziliśmy obejście problemu z kompilatorem GCC 4.8
stlport
. (Problem 127773) - Usunięto końcowy separator katalogu
\\
ze ścieżki projektu w systemie Windows. (Problem 160584) - Rozwiązaliśmy błąd
no rule to make target
, który występował podczas kompilowania pojedynczego pliku.c
przez wykonanie poleceniandk-build.cmd
z poziomugradle
. (Problem 66937) - Dodano biblioteki
libatomic.a
ilibgomp.a
, których brakowało w tych łańcuchach narzędzi hosta:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Inne zmiany:
-
- Dodano
ld.gold
do subskrypcjiaarch64
. Domyślny łącznik pozostajeld.bfd
. Aby włączyćld.gold
, dodaj-fuse-ld=gold
do zmiennejLOCAL_LDFLAGS
lubAPP_LDFLAGS
. - Zbudowano łańcuchy narzędzi MIPS i MIPS64 za pomocą
binutils-2.25
, co zapewnia lepszą obsługę R6. - Ustawiono
-fstandalone-debug
(pełne informacje debugowania) jako opcję domyślną dla Clang. - Zastąpiono
-fstack-protector
ciągiem-fstack-protector-strong
w przypadku łańcuchów narzędzi ARM, AArch64, X86 i X86_64 dla kompilatorów GCC 4.9, Clang 3.5 i Clang 3.6. - Dodaliśmy przełącznik wiersza poleceń
--package
do poleceniandk-gdb
, aby umożliwić systemowi kompilacji zastąpienie nazwy pakietu. (Problem 56189) - Wycofano
-mno-ldc1-stc1
dla MIPS. Ta opcja może nie działać z nowymi opcjami-fpxx
i-mno-odd-spreg
ani z interfejsem ABI FPXX. - Dodaliśmy wykrywanie MIPS MSA i R6 do
cpu-features
.
- Dodano
Android NDK r10d (grudzień 2014)
- Ważne zmiany:
-
- Ustawiono GCC 4.8 jako domyślny kompilator dla wszystkich 32-bitowych interfejsów ABI. Wycofano GCC 4.6 i w następnej wersji zostanie on usunięty. Aby przywrócić poprzednie działanie, dodaj
NDK_TOOLCHAIN_VERSION=4.6
do ndk-build lub--toolchain=arm-linux-androideabi-4.6
podczas wykonywaniamake-standalone-toolchain.sh
w wierszu poleceń. GCC 4.9 pozostaje domyślnym kompilatorem dla 64-bitowych interfejsów ABI. - Zatrzymano domyślne dodawanie
-mstackrealign
do wszystkich łańcuchów narzędzi x86[_64]. Zestaw narzędzi NDK zakłada 16-bajtowe wyrównanie stosu. Narzędzia i opcje używane domyślnie wymuszają przestrzeganie tej reguły. Użytkownik piszący kod asemblera musi zadbać o zachowanie wyrównania stosu i upewnić się, że inne kompilatory również przestrzegają tej reguły. (błąd GCC 38496) - Dodaliśmy funkcję Address Sanitizer do obsługi Clang 3.5 w przypadku interfejsów ABI ARM i x86. Więcej informacji o tej zmianie znajdziesz w projekcie Address Sanitizer.
- Wprowadziliśmy wymaganie, aby od poziomu API 21 podczas tworzenia używać
-fPIE -pie
. W przypadku poziomów interfejsu API 16 i nowszych ndk-build używa podczas kompilacjiPIE
. Ta zmiana ma wiele konsekwencji, które zostały omówione w wersji przedpremierowej dla programistów 888. Te konsekwencje nie dotyczą bibliotek udostępnionych.
- Ustawiono GCC 4.8 jako domyślny kompilator dla wszystkich 32-bitowych interfejsów ABI. Wycofano GCC 4.6 i w następnej wersji zostanie on usunięty. Aby przywrócić poprzednie działanie, dodaj
- Ważne poprawki błędów:
-
- Wprowadzono więcej poprawek związanych z
A53 Errata #835769 w linkerze aarch64-linux-android-4.9. W ramach tej zmiany GCC przekazuje nową opcję
--fix-cortex-a53-835769
, gdy określono-mfix-cortex-a53-835769
(domyślnie włączoną). Więcej informacji znajdziesz w tym komunikacie binutils i tym komunikacie binutils. - Dodano dokumentację poprawki zawieszania się biblioteki libc++
sscanf/vsscanf
, które występowało na poziomie API 21. Poprawka została wdrożona w wersji r10c. (Problem 77988) - Naprawiono awarię AutoFDO (
-fauto-profile
), która występowała w GCC 4.9, gdy określono-Os
. (Problem 77571)
- Wprowadzono więcej poprawek związanych z
A53 Errata #835769 w linkerze aarch64-linux-android-4.9. W ramach tej zmiany GCC przekazuje nową opcję
- Inne poprawki błędów:
-
- Wprowadzono te poprawki nagłówków i bibliotek:
- Dodano
posix_memalign
do poziomu API 16. Dodaliśmy też prototyp wstdlib.h
do poziomów API od 16 do 19. (Problem 77861) - Poprawiono
stdatomic.h
, aby zawierał<atomic>
tylko w przypadku C++11. - Zmodyfikowano te nagłówki do użytku samodzielnego:
sys/user.h
igl2ext.h
,dlext.h
,fts.h
,sgidefs.h
na poziomie API 21. - Zmodyfikowano
sys/user.h
, aby zmienić nazwęmxcsr_mask
namxcr_mask
, i zmienić typ danych dlau_ar0
. z - Zmieniono typ wartości zwracanej funkcji
sysconf()
zint
nalong
. - Poprawiono obsługę znaku
thumb
w przypadkuLOCAL_ARM_MODE
w narzędziu ndk-build: w wersji r10d narzędzie ndk-build domyślnie dodaje znakLOCAL_LDFLAGS+=-mthumb
, chyba że spełniony jest jeden z tych warunków: - Ustawiono
LOCAL_ARM_MODE
równearm
. - Tworzysz wersję debugowania (z ustawieniami takimi jak
APP_OPTIM=debug
iAndroidManifest.xml
zawierającymiandroid:debuggable="true"
), w której domyślnym trybem jest ARM, aby zachować zgodność ze starszymi łańcuchami narzędzi. (Problem 74040) - Poprawiono
LOCAL_SRC_FILES
w ndk-build, aby używać bezwzględnych ścieżek systemu Windows. (Problem 74333) - Usunięto kod specyficzny dla powłoki bash z narzędzia ndk-gdb. (problem 73338)
- Usunięto kod specyficzny dla powłoki Bash z
make-standalone-toolchain.sh
. (Problem 74145) - Poprawiona dokumentacja dotycząca poprawki w przypadku zależności przechodnich
System.loadLibrary()
. (Problem 41790) - Rozwiązaliśmy problem, który uniemożliwiał rozpakowywanie pakietów 64-bitowych w systemach Ubuntu 14.04 i OS X 10.10 (Yosemite). (Problem 78148)
- Rozwiązaliśmy problem z
LOCAL_PCH
, aby poprawić obsługę Clang. (Problem 77575) - Wyjaśniono ostrzeżenie „requires executable stack” (wymaga wykonywalnego stosu) z narzędzia ld.gold. (Problem 79115)
unsigned long
na struct user_regs_struct*.
Android NDK r10c (październik 2014 r.)
- Ważne zmiany:
-
- Wprowadziliśmy te zmiany w strukturze pobierania:
- Każdy pakiet zawiera teraz nagłówki, biblioteki i narzędzia 32-bitowe i 64-bitowe dla odpowiedniej platformy.
- Bibliotek STL z informacjami na potrzeby debugowania nie trzeba już pobierać osobno.
- Zmieniono wszystkie wystąpienia
Android-L
na oficjalną nazwę wersji:android-21
. - Zaktualizowano GCC 4.9 przez zmianę bazy na gałąź
google
repozytorium GCC. Główne różnice w stosunku do wersji GCC 4.9: - Opcja
-O2
włącza teraz wektoryzację bez rozwijania pętli, ale z bardziej agresywnym rozwijaniem. - Ulepszenia FDO i LIPO
- Dodaliśmy obsługę Clang 3.5 na wszystkich hostach:
NDK_TOOLCHAIN_VERSION=clang
teraz wybiera Clang 3.5. Uwaga: - W przypadku architektur ARM i x86 domyślnie używany jest zintegrowany asembler. Jeśli to powoduje problemy, użyj
-fno-integrated-as
jako obejścia. - Clang 3.5 wyświetla więcej ostrzeżeń o nieużywanych flagach, np. o opcji
-finline-functions
obsługiwanej przez GCC. - Umożliwia wejście w tryb debugowania ART podczas debugowania na urządzeniu z Androidem 5.0, które używa ART jako maszyny wirtualnej, przez określenie opcji
art-on
. Więcej informacji znajdziesz wprebuilt/common/gdb/common.setup
w katalogu zawierającym NDK. - Usunięto obsługę Clang 3.3.
- Wycofaliśmy GCC 4.6 i możemy usunąć go z przyszłych wersji.
- Zaktualizowano mclinker do wersji 2.8 z obsługą składania identycznych kodów („ICF”). Określ ICF za pomocą opcji
--icf
. - Rozszerzyliśmy
arm_neon.h
obsługę w przypadku architektur x86 i x86_64, osiągając pokrycie na poziomie ok. 93% wewnętrznych funkcji NEON. Więcej informacji o obsłudze NEON:- Otwórz Przewodnik programisty NDK (
docs/Programmers_Guide/html/
) i zapoznaj się z sekcją Architektury i procesory > Neon. - Przyjrzyj się zaktualizowanemu przykładowi
hello-neon
wsamples/
. - Zapoznaj się z przewodnikiem firmy Intel dotyczącym przenoszenia kodu z ARM NEON na Intel SSE.
- Otwórz Przewodnik programisty NDK (
- Udokumentowana obsługa
_FORTIFY_SOURCE
wheaders/libs/android-21
, która pojawiła się w wersji 10 (gdyandroid-21
nazywał się jeszczeAndroid-L
), ale nie miała dokumentacji.
Więcej informacji znajdziesz w sekcji Ważne poprawki błędów poniżej.
Podczas migracji z projektów korzystających z GCC możesz użyć
-Wno-invalid-command-line-argument
i-Wno-unused-command-line-argument
, aby zignorować nieużywane flagi, dopóki nie zdecydujesz, co z nimi zrobić w dłuższej perspektywie. - Ważne poprawki błędów:
-
- Naprawiono wewnętrzny błąd kompilatora w GCC4.9/aarch64, który powodował wyświetlanie tego komunikatu o błędzie (problem 77564):
- Naprawiono nieprawidłowe generowanie kodu z GCC4.9/arm. (Problem 77567)
- Rozwiązaliśmy wewnętrzny błąd kompilatora w GCC4.9/mips dotyczący wstawianego kodu asemblera. (Problem 77568)
- Naprawiono nieprawidłowy kod generowany przez GCC4.9/arm dla
x = (cond) ? y : x
. (Problem 77569) - Domyślnie poprawiono GCC4.9/aarch64 i Clang3.5/aarch64, aby obejść
błąd Cortex-A53 (835769). Wyłącz obejście, określając
-mno-fix-cortex-a53-835769
.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Inne poprawki błędów:
-
- Wprowadziliśmy te poprawki nagłówków i bibliotek w
android-21
:- Dodano więcej kodów klawiszy telewizora:
android/keycodes.h
- Dodaliśmy więcej stałych i 6 nowych funkcji czujnika do
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
iASensor_isWakeUpSensor
. - Poprawiono
stdatomic.h
, aby zwiększyć zgodność z GCC 4.6 i zapewnić obsługę nagłówka<atomic>
. - Dodano elementy
sys/ucontext.h
isys/user.h
do wszystkich poziomów API.signal.h
Nagłówek zawiera teraz<sys/ucontext.h>
. Możesz usunąć dowolną istniejącą definicjęstruct ucontext
. - Dodano
posix_memalign
do poziomów API 17, 18 i 19. - Dodaliśmy te funkcje do wszystkich architektur:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - Dodano wymagane uprawnienia do
native-media/AndroidManifest.xml
przykładowego kodu. (Problem 106640) - Dodano
clock_nanosleep
iclock_settime
do poziomu API 21. (Problem 77372) - Usunęliśmy te symbole ze wszystkich architektur:
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
idlmalloc
. - Usunęliśmy te funkcje z architektur 64-bitowych:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Usunęliśmy z architektur 32-bitowych tę funkcję:
__signalfd4
- W przypadku tych funkcji zmieniliśmy typ trzeciego argumentu z
size_t
naint
:strtoll_l
,strtoull_l
,wcstoll_l
iwcstoull_l
. - Przywróciliśmy te funkcje w architekturze 64-bitowej:
arc4random
,arc4random_buf
iarc4random_uniform
. - Przeniesiono
cxa_*
oraz operatorynew
idelete
z powrotem dolibstdc++.so
. Ta zmiana przywraca działanie r9d. Poprzednie wersje r10 zawierały pliki zastępcze.
- Dodano więcej kodów klawiszy telewizora:
- Przywrócono obsługę MXU w GCC 4.8 i 4.9 dla mips. Ta obsługa była niedostępna w wersjach r10 i r10b, ponieważ te wersje GCC zostały skompilowane za pomocą binutils-2.24, która nie obsługiwała MXU. Teraz tak jest.
- Naprawiono
--toolchain=
wmake-standalone-toolchain.sh
, aby prawidłowo obsługiwał sufiks określający wersję Clang. - Naprawiono funkcje libc++/armeabi
strtod()
. - Wprowadzono poprawki w dokumentacji NDK w
docs/
.
- Wprowadziliśmy te poprawki nagłówków i bibliotek w
- Inne zmiany:
-
- Ulepszona funkcja
cpu-features
wykrywania obsługi ARMv8 w przypadku tych zestawów instrukcji: AES, CRC32, SHA2, SHA1 i 64-bitowe PMULL/PMULL2. (Problem 106360) - Zmodyfikowano ndk-build, aby używać
*-gcc-ar
, które jest dostępne w GCC 4.8, GCC 4.9 i Clang. Clang określa go zamiast*-ar
. To ustawienie zapewnia lepszą obsługę LTO. - Usunięto nagłówki
include-fixed/linux/a.out.h
iinclude-fixed/linux/compiler.h
z kompilatora GCC. (Problem 73728) - Rozwiązaliśmy problem związany z
-flto
w GCC 4.8 w systemie Mac OS X. Komunikat o błędzie brzmiał: - Poprawiono błąd pisowni w
build-binary.mk.
(problem 76992).
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Ulepszona funkcja
- Ważne znane problemy:
-
- Określenie -Os (
-fauto-profile
) w GCC 4.9 może spowodować awarię. (Problem 77571)
- Określenie -Os (
Android NDK r10b (wrzesień 2014 r.)
- Ważne uwagi:
-
- Ze względu na ograniczenie rozmiaru pobieranych pakietów do 512 MB poniższe elementy 32-bitowe nie są uwzględnione w pakietach do pobrania NDK 32-bitowego. Zamiast tego znajdują się one w wersjach 64-bitowych:
- Nagłówki Androida L
- GCC 4.9
- Obecnie NDK obsługuje tylko 32-bitowy Renderscript w Androidzie 4.4 (poziom API 19). Nie możesz skompilować aplikacji HelloComputeNDK (jedyny przykład Renderscript) z żadną inną kombinacją Renderscript (32- lub 64-bitowy) i wersji Androida.
- Aby skompilować kodek natywny, musisz użyć 64-bitowego pakietu NDK, w którym znajdują się wszystkie nagłówki Androida L.
- Ważne poprawki błędów:
- Inne poprawki błędów:
-
- Usunięto
stdio.h
z katalogówinclude-fixed/
we wszystkich wersjach GCC. (Problem 73728). - Usunięto zduplikowane pliki nagłówkowe z pakietów Windows w katalogach
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (Problem 73704) - Rozwiązaliśmy problem, który uniemożliwiał Clangowi tworzenie HelloComputeNDK.
- Naprawiono atexit. (Problem 66595)
- Wprowadzono różne poprawki w dokumentach w językach
docs/
isources/third_party/googletest/README.NDK
. (Problem 74069) - W nagłówkach Androida L wprowadzono te poprawki:
- Dodano te funkcje do
ctype.h
iwchar.h
:dn_expand()
,grantpt()
,inet_nsap_addr()
,inet_nsap_ntoa()
,insque()
,nsdispatch()
,posix_openpt()
,__pthread_cleanup_pop()
,__pthread_cleanup_push()
,remque()
,setfsgid()
,setfsuid()
,splice()
,tee()
,twalk()
(problem 73719) i 42 funkcje*_l()
. - Zmieniono nazwę
cmsg_nxthdr
na__cmsg_nxthdr
. - Użytkownik
__libc_malloc_dispatch
został usunięty. - Zmieniono prototyp
ptrace()
nalong ptrace(int, ...);
. - Użytkownik
sha1.h
został usunięty. - Rozszerzony
android_dlextinfo
wandroid/dlext.h
. - Adnotacja
__NDK_FPABI__
w przypadku funkcji, które przyjmują lub zwracają wartości typu float lub double w przypadkustdlib.h
,time.h
,wchar.h
icomplex.h
.
- Usunięto
- Inne zmiany:
-
- Zaktualizowano
mipsel-linux-android-4.9
imips64el-linux-android-4.9
, wprowadzono nowy układ katalogów multilib i dodano obsługę gdb-7.7. - Ulepszone
cpu-features
, które wykrywa więcej funkcji arm64. (Lista zmian 100339).
- Zaktualizowano
Android NDK r10 (lipiec 2014)
- Ważne zmiany:
-
- Dodaliśmy 3 nowe interfejsy ABI, wszystkie 64-bitowe: arm64-v8a, x86_64 i mips64. Uwaga:
- GCC 4.9 to domyślny kompilator dla 64-bitowych interfejsów ABI. Clang ma obecnie wersję 3.4.
NDK_TOOLCHAIN_VERSION=clang
może nie działać w przypadku interfejsów arm64-v8a i mips64. - Android L to pierwszy poziom z obsługą 64-bitową. Pamiętaj, że ten poziom API jest tymczasowy i dotyczy tylko wersji L. W wersji L zostanie on zastąpiony rzeczywistym numerem poziomu interfejsu API.
- Ta wersja zawiera teraz ustawienia
all32
iall64
dlaAPP_ABI
.- Funkcja
APP_ABI=all32
jest odpowiednikiem funkcjiAPP_ABI=armeabi,armeabi-v7a,x86,mips
. - Funkcja
APP_ABI=all64
jest odpowiednikiem funkcjiAPP_ABI=arm64-v8a,x86_64,mips64
. APP_ABI=all
wybiera wszystkie interfejsy ABI.
- Funkcja
- Nowa biblioteka GNU libstdc++ w Androidzie L zawiera wszystkie
<tr1/cmath>
Zanim zdefiniujesz własną funkcję matematyczną, sprawdź_GLIBCXX_USE_C99_MATH_TR1
, czy funkcja o tej nazwie już istnieje, aby uniknąć błędów „multiple definition” (wielokrotna definicja) z linkera. - Biblioteka cpu-features została zaktualizowana pod kątem jądra ARMv8. Istniejąca biblioteka cpu-features może nie wykryć obecności NEON na platformie ARMv8. Ponownie skompiluj kod w nowej wersji.
- Dodano nowy katalog interfejsów API
platforms/android-L/
. Usługa ta obejmuje: - Zaktualizowano nagłówki Bionic, które nie zmieniły się od poziomów interfejsu API Androida 3 (Cupcake) do 19 (KitKat). Ta nowa wersja na poziomie L ma być zsynchronizowana z AOSP.
- Nowe interfejsy API do obsługi multimediów i przykładowy kod natywnego kodeka.
- Zaktualizowany nagłówek
Android.h
dla SLES/OpenSLES, który umożliwia obsługę formatu audio zmiennoprzecinkowego o pojedynczej precyzji w AudioPlayer. - GLES 3.1 i rozszerzenia AEP na urządzeniu
libGLESv3.so.
- Nagłówki GLES2 i GLES3 zostały zaktualizowane do najnowszych oficjalnych wersji Khronos.
- Dodano kompilatory GCC 4.9 do 32- i 64-bitowych interfejsów ABI. GCC 4.9 to domyślny (i jedyny) kompilator dla 64-bitowych interfejsów ABI, jak wspomnieliśmy wcześniej. W przypadku 32-bitowych interfejsów ABI musisz wyraźnie włączyć GCC 4.9, ponieważ GCC 4.6 jest nadal domyślną wersją.
- W przypadku ndk-build włącz kompilację 32-bitową za pomocą GCC 4.9, dodając
NDK_TOOLCHAIN_VERSION=4.9
doApplication.mk
lub eksportując ją jako zmienną środowiskową z poziomu wiersza poleceń. - W przypadku samodzielnego łańcucha narzędzi użyj opcji
--toolchain=
w skrypciemake-standalone-toolchain.sh
. Na przykład:--toolchain=arm-linux-androideabi-4.9.
- Uaktualniono GDB do wersji 7.6 w GCC 4.8/4.9 i x86*. Ponieważ w GCC 4.6 (domyślnej wersji dla ARM i MIPS) GDB ma nadal wersję GDB-7.3.x, musisz ustawić
NDK_TOOLCHAIN_VERSION=4.8
lub4.9
, aby włączyć ndk-gdb do wyboru GDB 7.6. - Dodaliśmy opcję kompilacji
-mssse3
, aby zapewnić obsługę SSSE3, i ustawiliśmy ją jako domyślną dla interfejsu ABI x86 (zastępując SSE3). Obraz udostępniony przez Google nie zawiera instrukcji SSSE3. - Zaktualizowano GCC z wersji 4.8 do 4.8.3.
- Ulepszona obsługa ARM libc++ EH dzięki przejściu z gabi++ na libc++abi. Szczegółowe informacje znajdziesz w sekcji „Obsługa C++” w dokumentacji. Uwaga:
- Wszystkie testy z wyjątkiem testu dotyczącego ustawień regionalnych są teraz zaliczane w przypadku kompilatorów Clang 3.4 i GCC 4.8. Więcej informacji znajdziesz w sekcji „C++ Support” (Obsługa C++) w dokumentacji.
- Biblioteki libc++ dla X86 i MIPS libc++ nadal korzystają z gabi++.
- Kompilator GCC w wersji 4.7 i nowszych może teraz używać <atomic>.
- Jeśli używasz parametru
<list>
, musisz dodać parametr-fno-strict-aliasing
, ponieważ__list_imp::_end
_ narusza reguły TBAA. (Problem 61571). - Od wersji GCC 4.6 opcja LIBCXX_FORCE_REBUILD:=true nie powoduje już ponownego kompilowania biblioteki libc++. Aby ją ponownie skompilować, należy użyć innego kompilatora. Pamiętaj, że Clang 3.3 nie został przetestowany.
- mclinker jest teraz w wersji 2.7 i obsługuje architekturę aarch64 w systemie Linux.
- Dodano obsługę wstępnie skompilowanych nagłówków dla nagłówków określonych przez
LOCAL_PCH
. (Problem 25412).
- Ważne poprawki błędów:
-
- Naprawiono bibliotekę libc++, aby kompilowała teraz
std::feof
itp. (problem 66668). - Naprawiono wywołanie biblioteki atomowej Clang 3.3/3.4, które powodowało awarie w niektórych testach libc++ dla interfejsu ABI armeabi.
- Rozwiązaliśmy problem z awariami Clang 3.4, które występowały podczas odczytywania wstępnie skompilowanych nagłówków. (Problem 66657).
- Naprawiono błąd asercji Clang 3.3/3.4
-O3
: - Usunięto awarię Clang 3.3/3.4:
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). - Naprawiono bibliotekę libc++, aby kompilowała teraz
- Inne poprawki błędów:
-
- Stałe nagłówki:
- Poprawiono wartość 32-bitową
ssize_t
, która powinna wynosićint
, a nielong int
. - Poprawiono znaki
WCHAR_MIN
iWCHAR_MAX
, aby przyjmowały odpowiednie znaki w zależności od architektury, na której działają: - X86/MIPS: podpisano.
- ARM: niepodpisany.
- Aby wymusić domyślne ustawienie X86/MIPS na wartość bez znaku, użyj
-D__WCHAR_UNSIGNED__
. - Aby wymusić 16-bitową wartość
wchar_t
, użyj-fshort-wchar
. - Usunięto nieistniejące symbole z 32-bitowego
libc.so
i dodanopread64
,pwrite64
,ftruncate64
dla Androida API na poziomie 12 i wyższym. (Problem 69319). Więcej informacji znajdziesz w komentarzu do listy zmian w AOSP 94137. - Naprawiliśmy ostrzeżenie GCC dotyczące ponownej definicji
putchar
. Komunikat ostrzegawczy: - Poprawiono
make-standalone-toolchain.sh --stl=libc++
, aby: - Kopie
cxxabi.h
. (Problem 68001). - Działa w katalogach innych niż katalog instalacyjny NDK. (Problemy 67690 i 68647).
- Rozwiązaliśmy problem z GCC/Windows, który powodował, że argumenty były umieszczane w cudzysłowie tylko wtedy, gdy było to konieczne do tworzenia procesów w programach zewnętrznych. Ta zmiana zmniejsza prawdopodobieństwo przekroczenia limitu 32 tys. znaków.
- Rozwiązaliśmy problem, który uniemożliwiał dostosowanie zmiennej środowiskowej
APP_PLATFORM
. - Poprawiono implementację
IsSystemLibrary()
w crazy_linker, aby używałastrrchr()
zamiaststrchr()
do znajdowania prawdziwej nazwy podstawowej ścieżki biblioteki. - Naprawiono problem z niemożnością tworzenia w trybie debugowania w przypadku komponentu native-audio.
- Naprawiono problem z niemożnością drukowania ekstremalnych liczb zmiennoprzecinkowych w gdb. (Problem 69203).
- Rozwiązaliśmy problem z niemożnością kompilacji w Clang 3.4 z użyciem
-Wl,-shared
(w przeciwieństwie do-shared
, w przypadku którego nie występowały problemy z kompilacją). Problem polegał na tym, że Clang dodawał-pie
w przypadku platform Android, jeśli nie istniały ani-shared
, ani-static
. To nieprawidłowe zachowanie powodowało, że linker zgłaszał, że-shared
i-pie
nie mogą współistnieć.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Lista zmian 91185). - Inne zmiany:
-
- Dodano
arm_neon.h
do łańcucha narzędzi x86, dzięki czemu emuluje on teraz około 47% Neon. Obecnie nie są obsługiwane typy 64-bitowe. Więcej informacji znajdziesz w sekcji dotyczącej obsługi funkcji wewnętrznych ARM Neon w dokumentacji x86. - Przeniesiono optymalizację ARM/GOT_PREL (występującą w GCC 4.6 utworzonym z gałęzi GCC google) do ARM GCC 4.8/4.9. Ta optymalizacja czasami zmniejsza liczbę instrukcji podczas uzyskiwania dostępu do zmiennych globalnych. Przykład znajdziesz w skrypcie build.sh w
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - Dodano wersję ARM dla bibliotek STL gabi++, stlport i libc++. Mają one teraz tryb ARM i Thumb.
- Teraz można wywołać skrypt make-standalone-toolchain.sh za pomocą polecenia
--toolchain=x86_64-linux-android-4.9
, które jest równoważne poleceniu--toolchain=x86_64-4.9
.
- Dodano
Android NDK r9d (marzec 2014 r.)
- Ważne zmiany:
-
- Dodaliśmy obsługę kompilatora Clang 3.4. Opcja
NDK_TOOLCHAIN_VERSION=clang
wybiera teraz Clang 3.4. GCC 4.6 nadal jest domyślnym kompilatorem. - Dodano
APP_ABI=armeabi-v7a-hard
z dodatkową opcją multilib-mfloat-abi=hard
. Te opcje są przeznaczone do użycia z kompilatorami ARM GCC 4.6/4.8 i Clang 3.3/3.4 (które używają asemblera, linkera i bibliotek w wersji 4.8). Podczas korzystania z tych opcji pamiętaj o tych zmianach: - Podczas wykonywania skryptu
ndk-build
dodaj te opcje dla platformy armeabi-v7a: Zbudowana biblioteka zostanie skopiowana doTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
. Aby polecenie make działało zgodnie z oczekiwaniami, nie możesz określić zarównoarmeabi-v7a
, jak iarmeabi-v7a-hard
jako celów polecenia make (tzn. w wierszu APP_ABI=). Spowoduje to zignorowanie jednego z nich. Pamiętaj, żeAPP_ABI=all
jest nadal równoznaczne zarmeabi armeabi-v7a x86 mips
. - Skrypt
make-standalone-toolchain.sh
kopiuje dodatkowe biblioteki do katalogów/hard
. Dodaj powyższeCFLAGS
iLFLAGS
do pliku makefile, aby umożliwić kompilatorom GCC lub Clang łączenie z bibliotekami w/hard
. - Dodano asembler yasm oraz flagi
LOCAL_ASMFLAGS
iEXPORT_ASMFLAGS
dla platformy x86. Skryptndk-build
używaprebuilts/*/bin/yasm*
do tworzeniaLOCAL_SRC_FILES
, które mają rozszerzenie.asm
. - Zaktualizowano MClinker do wersji 2.6.0, która dodaje obsługę
-gc-sections
. - Dodano eksperymentalną obsługę biblioteki libc++ (upstream r201101). Aby skorzystać z tej nowej funkcji, wykonaj te czynności:
- Dodaj
APP_STL := c++_static
lubAPP_STL := c++_shared
wApplication.mk
. Możesz ponownie utworzyć aplikację ze źródła za pomocąLIBCXX_FORCE_REBUILD := true
- Wykonaj polecenie
make-standalone-toolchain.sh --stl=libc++
, aby utworzyć samodzielny łańcuch narzędzi z plikami nagłówkowymi i biblioteką libc++.
CPLUSPLUS-SUPPORT.html
. (Problem 36496) - Dodaj
- Dodaliśmy obsługę kompilatora Clang 3.4. Opcja
- Ważne poprawki błędów:
-
- Naprawiono nieobsłużony wyjątek z nieoczekiwanego obsługi wyjątków w przypadku GCC 4.6/4.8 ARM EABI. (GCC Issue 59392)
- Poprawiono GCC 4.8, aby poprawnie rozwiązywał częściową specjalizację szablonu z zależnym argumentem szablonu, który nie jest typem. (Problem GCC 59052)
- Dodano więcej modułów do wstępnie skompilowanego języka Python (problem 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
i_curses_panel
- Mac OS X:
- Naprawiono serwer gdbserver x86 i MIPS.
event_getmsg_helper
- Rozwiązaliśmy wiele problemów w zestawie narzędzi RenderScript NDK, w tym problemy ze zgodnością na starszych urządzeniach i z odbiciem C++.
- Inne poprawki błędów:
-
- Poprawki nagłówka:
- Naprawiono brakujący element
#include <sys/types.h>
wandroid/asset_manager.h
w przypadku interfejsu API Androida na poziomie 13 i wyższym. (Problem 64988) - Usunięto brakujący znak
#include
wandroid/rect_manager.h
w przypadku Androida na poziomie interfejsu API 14 i wyższym. - Dodano:
JNICALL
do listyJNI_OnLoad
iJNI_OnUnload
wjni.h
. Pamiętaj, żeJNICALL
jest zdefiniowane jako__NDK_FPABI__
Więcej informacji znajdziesz w sekcjisys/cdefs.h
. - Zaktualizowaliśmy te nagłówki, aby można było je uwzględniać bez konieczności ręcznego dodawania zależności (problem 64679):
- Dodano
sys/cachectl.h
dla wszystkich architektur. Deweloperzy MIPS mogą teraz uwzględnić ten nagłówek zamiast pisać#ifdef __mips__
. - Naprawiono
platforms/android-18/include/android/input.h
przez dodanie__NDK_FPABI__
do funkcji przyjmujących lub zwracających wartości zmiennoprzecinkowe lub podwójnej precyzji. - Poprawiono MIPS
struct stat
, który był nieprawidłowo ustawiony na 64-bitowy odpowiednik w przypadku interfejsu API Androida na poziomie 12 i nowszych. To nieprawidłowe ustawienie było regresją wprowadzoną w wersji r9c. - Zdefiniowano
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, i__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
dla interfejsu API Androida na poziomie 9 i niższym. - Dodano
scalbln
,scalblnf
iscalblnl
do x86libm.so
w przypadku interfejsów API w wersji 18 i nowszych. - Poprawiono błąd w
sources/android/support/include/iconv.h
. (Problem 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Naprawiono brakujący element
- Poprawiono gabi++
std::unexpected()
, aby wywoływaćstd::terminate()
, dzięki czemu procedura obsługi zdefiniowana przez użytkownikastd::terminate()
ma szansę się uruchomić. - Poprawiono gabi++, aby wyłapywać
std::nullptr
. - Przykłady stałe Teapot i MoreTeapots:
- Rozwiązano problem z chipami Tegra 2 i 3 przez zmianę zmiennych odbicia lustrzanego na średnią precyzję. Wartości mocy odbicia lustrzanego mogą być teraz mniejsze niż 1,0.
- Zmieniliśmy przykłady tak, aby naciśnięcie przycisku głośności przywracało tryb pełnoekranowy i unieważniało
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. Obrót ekranu nie powoduje wywołaniaonSystemUiVisibilityChange
, a tym samym nie przywraca trybu pełnoekranowego.
- Poprawiono skrypt
ndk-build
, aby dodać-rpath-link=$SYSROOT/usr/lib
i-rpath-link=$TARGET_OUT
w celu użyciald.bfd
do łączenia plików wykonywalnych. (Problem 64266) - Usunięto
-Bsymbolic
ze wszystkich kompilacji STL. - Naprawiono
ndk-gdb-py.cmd
przez ustawienieSHELL
jako zmiennej środowiskowej zamiast przekazywania jej dopython.exe
, które ignoruje to ustawienie. (Problem 63054) - Poprawiono skrypt
make-standalone-toolchain.sh
, aby opcja--stl=stlport
kopiowała nagłówki gabi++ zamiast tworzyć do nich linki symboliczne. Powłokicmd.exe
i MinGW nie rozumieją linków symbolicznych utworzonych przez cygwin.
- Poprawki nagłówka:
- Inne zmiany:
-
- Zastosowano uprawnienia do wykonywania wszystkich skryptów
*cmd
, które wcześniej były przeznaczone do używania tylko w powłocecmd.exe
, na wypadek gdyby deweloperzy woleli używaćndk-build.cmd
w cygwin zamiast zalecanego skryptundk-build
. - Zwiększyliśmy szybkość skryptu
make-standalone-toolchain.sh
przez przenoszenie zamiast kopiowania, jeśli określony katalog docelowy nie istnieje.
- Zastosowano uprawnienia do wykonywania wszystkich skryptów
Android NDK r9c (grudzień 2013 r.)
Jest to wersja zawierająca tylko poprawki błędów.
- Ważne poprawki błędów:
-
- Rozwiązaliśmy problem z kompilatorem GCC 4.8 ARM, w którym wskaźnik stosu był przywracany zbyt wcześnie. Ten problem uniemożliwiał wskaźnikowi ramki niezawodny dostęp do zmiennej w ramce stosu. (Problem GCC 58854)
- Rozwiązaliśmy problem z biblioteką libstdc++ w kompilatorze GCC 4.8, w którym błąd w funkcji std::nth_element powodował generowanie kodu, który wywoływał losowy błąd segmentacji. (Problem 62910)
- Naprawiliśmy błąd ICE w GCC 4.8 w cc1/cc1plus z
-fuse-ld=mcld
, dzięki czemu ten błąd nie występuje już:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Naprawiono obsługę
-mhard-float
__builtin
funkcji matematycznych. Aktualne informacje o poprawkach dotyczących-mhard-float
w STL znajdziesz w zgłoszeniu 61784.
- Inne poprawki błędów:
-
- Poprawki nagłówka:
- Zmieniono prototyp
poll
napoll(struct pollfd *, nfds_t, int);
wpoll.h
. - Dodano
utimensat
dolibc.so
na Androidzie w przypadku poziomów API 12 i 19. Te biblioteki są teraz dostępne dla wszystkich poziomów interfejsu API Androida od 12 do 19. - Wprowadzono
futimens
dolibc.so
na Androida API w wersji 19. - Dodano brakujące
clock_settime()
iclock_nanosleep()
dotime.h
na Androidzie w wersji 8 lub nowszej. - Dodano
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
iCLOCK_BOOTTIME_ALARM
wtime.h.
- Usunięto przestarzałe elementy
CLOCK_REALTIME_HR
iCLOCK_MONOTONIC_HR.
- Zmieniono prototyp
- W przykładach Teapot, MoreTeapots i
source/android/ndk_helper
:- Zmieniliśmy je tak, aby w przypadku architektury armeabi-v7a używały interfejsu ABI z płynną precyzją.
- Zaktualizowaliśmy je, aby korzystały z trybu pełnoekranowego na Androidzie w wersji API 19 i nowszej.
- Rozwiązaliśmy problem z
Check_ReleaseStringUTFChars
w/system/lib/libdvm.so
, który powodował awarie na urządzeniach x86.
- Rozwiązaliśmy problem z błędami
ndk-build
w Cygwin, które występowały, gdy pakiet NDK był przywoływany za pomocą dowiązania symbolicznego. - Naprawiono błędy
ndk-build.cmd
, które występowały w systemie Windowscmd.exe
, gdyLOCAL_SRC_FILES
zawierało ścieżki bezwzględne. (Problem 69992) - Poprawiliśmy skrypt
ndk-stack
, aby działał nawet wtedy, gdy nie może przeanalizować ramki z powodu niemożności znalezienia procedury, nazwy pliku lub numeru wiersza. W każdym z tych przypadków drukuje się znak??
. - Naprawiono stos
ndk-stack
w przypadku platform windows-x64_64, aby nie dopasowywał już błędnie wiersza ramki do wiersza w sekcjistack:
, który nie zawierapc
,eip
aniip
. Na przykład:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Poprawiono gabi++, aby:
- Nie używa funkcji malloc() do przydzielania obiektów C++ thread-local.
- Zapobiega zakleszczeniom w gabi++ w przypadkach, gdy libc.debug.malloc ma wartość niezerową w kompilacjach platformy Android w wersji userdebug/eng.
- Poprawki nagłówka:
- Inne zmiany:
-
- Dodano
LOCAL_EXPORT_LDFLAGS
. - Wprowadzono ustawienie
NDK_PROJECT_PATH=null
do użycia w zintegrowanym systemie kompilacji, w którym opcje są jawnie przekazywane dondk-build
. Gdy to ustawienie jest włączone,ndk-build
nie próbuje wyszukiwaćNDK_PROJECT_PATH.
. To ustawienie uniemożliwia też zmiennym uzyskiwanie ustawień domyślnych z NDK_PROJECT_PATH. W związku z tym należy teraz wyraźnie określić te zmienne (z ich wartościami domyślnymi, jeśli takie istnieją):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(opcjonalnie, domyślnie 0) i inne zmienneAPP_*
zawarte wApplication.mk
. APP_ABI
można teraz podać na liście rozdzielonej przecinkami. Przykład:APP_ABI := "armeabi,armeabi-v7a"
- Umożliwia odbudowanie całej biblioteki STL z informacjami do debugowania w opcjonalnym, oddzielnym pakiecie o nazwie
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
za pomocą opcji-g
. Ta opcja pomaga skryptowindk-stack
lepiej dostarczać zrzut stosu w STL. Ta zmiana nie powinna mieć wpływu na kod ani rozmiar ostatecznego, oczyszczonego pliku. - Ulepszone próbki
hello-jni
do raportowaniaAPP_ABI
podczas kompilacji. - używać narzędzia
ar
w trybie deterministycznym (opcja-D
) do tworzenia bibliotek statycznych; (Problem 60705)
- Dodano
Android NDK r9b (październik 2013 r.)
- Ważne zmiany:
-
- Zaktualizowaliśmy
include/android/*h
imath.h
dla wszystkich poziomów API Androida do 18, w tym dodaliśmy poziomy 13, 15, 16 i 17. Informacje o dodanych interfejsach API znajdziesz w komunikatach o zmianach 68012 i 68014. (Problemy 47150, 58528 i 38423) - Dodano obsługę interfejsu API Androida na poziomie 19, w tym powiązanie Renderscript.
- Dodaliśmy obsługę
-mhard-float
w istniejącym interfejsie ABI armeabi-v7a. Więcej informacji i aktualne ograniczenia dotyczące Clang znajdziesz wtests/device/hard-float/jni/Android.mk
. - Przeniesiono z GNU Compiler Collection (GCC) 4.8 na 4.8.2 i dodano obsługę kolorów diagnostycznych. Aby włączyć kolory diagnostyczne, ustaw
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
lub wyeksportujGCC_COLORS
w sposób pokazany poniżej: Więcej informacji znajdziesz w artykule GCC Language Independent Options.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- Dodano 2 nowe przykłady prezentujące funkcje OpenGL ES 3.0: Teapot i MoreTeapots. Przykłady te działają na urządzeniach z Androidem 4.1 (poziom interfejsu API 16) i nowszym.
- Wycofano obsługę GCC 4.7 i Clang 3.2, która zostanie usunięta w następnej wersji.
- Zaktualizowaliśmy
- Ważne poprawki błędów:
-
- Rozwiązaliśmy problem z kompilatorem ARM GCC 4.6
thumb2
, który powodował, że nie generował on 16-bitowych tabel skoków względnych. (Problem z GCC) - Naprawiono wewnętrzny błąd kompilatora GCC 4.8 (ICE) na urządzeniach
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Zmiana 62770, problem z GCC) - Rozwiązaliśmy problem z nieudanym uruchamianiem plików wykonywalnych
*-gdb.exe
w 32-bitowym systemie Windows. (Problem 58975) - Naprawiono błąd wewnętrzny kompilatora GCC 4.8 podczas tworzenia biblioteki bullet. Komunikat o błędzie:
(Problem 58916, Problem z GCC)internal compiler error: verify_flow_info failed
- Zmodyfikowana wersja GDB/ARM, która pomija dane
ARM.exidx
na potrzeby rozwijania stosu w kodzie prologu, oraz dodane polecenie (set arm exidx-unwinding
) do sterowania rozwijaniem stosu na podstawie exidx. (Problem 55826) - Rozwiązaliśmy problem z kompilatorem Clang 3.3 MIPS, który powodował nieprawidłowe ponowne używanie rejestrów HI i LO.
- Rozwiązaliśmy problem z MIPS 4.7 ICE w
dbx_reg_number
. Komunikat o błędzie jest następujący: (GCC Patch)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Rozwiązaliśmy problem z kompilatorem ARM GCC 4.6
- Inne poprawki błędów:
-
- Poprawki nagłówka
- Poprawiono wartości ARM
WCHAR_MIN
iWCHAR_MAX
, aby były niepodpisane zgodnie ze specyfikacją (wersje X86/MIPS są podpisane). Zdefiniuj_WCHAR_IS_ALWAYS_SIGNED
, aby przywrócić stare działanie. (Problem 57749) - Poprawiono
include/netinet/tcp.h
, aby zawierał wyliczenie stanuTCP_INFO
. (Problem 38881) - Poprawiono makro
cdefs_elh.h
_C_LABEL_STRING
, aby nie generowało ostrzeżeń w zestawie narzędzi GCC 4.8 w trybie c++11. (Problem 58135, Problem 58652) - Usunięto z nagłówka nieistniejące funkcje
imaxabs
iimaxdiv
.inttypes.h
- Rozwiązaliśmy problem z wartościami zwracanymi
pthread_exit()
ipthread_self()
. (Problem 60686) - Dodano brakującą funkcję
mkdtemp()
, która już istnieje w nagłówkubionic
stdlib.h
.
- Poprawiono wartości ARM
- Rozwiązanie problemu z kompilacją
samples/gles3jni
za pomocą Clang na Androidzie API w wersji 11. - Poprawiono MCLinker, aby zezwalał na wielokrotne występowanie tych opcji:
-gc-sections
i--eh-frame-hdr
. - Poprawiono MCLinker, aby akceptował opcję
--no-warn-mismatch
. - Zmodyfikowano opcję
cpu-features
, aby nie zakładać, że wszystkie urządzenia VFPv4 obsługują IDIV. Teraz ta opcja dodaje IDIV tylko do urządzeń z białej listy, w tym do Nexusa 4. (Problem 57637) - Rozwiązaliśmy problem z błędnym rejestrowaniem błędów w przypadku operacji poprzedzających wysyłanie zdarzeń.
android_native_app_glue.c
- Naprawiono wszystkie operacje na
gabi++
terminate i unexpected_handler, aby były bezpieczne dla wątków. - Naprawiono kilka problemów z opcją Clang
-integrated-as
, aby można było przeprowadzić testyssax-instructions
ifenv
. - Poprawiono kompilator GCC 4.6/4.7/4.8, aby przekazywał opcję linkera
--eh-frame-hdr
nawet w przypadku statycznych plików wykonywalnych. Więcej informacji znajdziesz w artykule GCC patch (w języku angielskim). - Usunięto dodatkowy apostrof w komórce
CPU-ARCH-ABIS.html
. Więcej informacji znajdziesz w sekcjiNDK-DEPENDS.html
. (Problem 60142) - Rozwiązaliśmy problem z dodatkowymi cudzysłowami w danych wyjściowych ndk-build w systemie Windows. (Problem 60649)
- Naprawiono Clang 3.3, aby kompilował wbudowane operacje atomowe ARM, takie jak
__atomic_fetch_add
,__atomic_fetch_sub
i__atomic_fetch_or
. - Naprawiono błąd wewnętrzny kompilatora Clang 3.3 w przypadku dostosowanego parametru
vfprintf
. (Problem z Clangiem)
- Poprawki nagłówka
- Inne zmiany:
-
- Włączono OpenMP we wszystkich kompilacjach GCC. Aby korzystać z tej funkcji, dodaj do ustawień kompilacji te flagi:
Przykłady kodu znajdziesz w sekcjiLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
- Znacznie zmniejszyliśmy rozmiar
ld.mcld
(1,5 MB w porównaniu zld.bfd
3,5 MB ild.gold
7,5 MB), co spowodowało wzrost szybkości o około 20%. - Dodano symbole
LOCAL_CONLYFLAGS
iAPP_CONLYFLAGS
, aby określić opcje mające zastosowanie tylko do języka C, ale nie do C++. Istniejące symboleLOCAL_CFLAGS
iAPP_CFLAGS
są też używane do kompilacji w C++ (aby uniknąć konieczności określania większości opcji 2 razy), więc opcje takie jak-std=gnu99
mogą powodować błędy w kompilacjach g++ z ostrzeżeniem i w kompilacjach clang++ z błędem. - Dodano funkcje pomocnicze tablicy
gabi++
. - Zmodyfikowano kompilacje GCC, aby wszystkie pliki
libgcc.a
były kompilowane za pomocą-funwind-tables
, co umożliwia rozwijanie stosu poza wcześniej zablokowane punkty, takie jak__aeabi_idiv0
. - Dodano obsługę Ingenic MXU w MIPS GCC4.6/4.7/4.8 z nową opcją
-mmxu
. - Rozszerzone MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
do sterowania ldxc1/sdxc1 - Dodano szalony linker. Więcej informacji znajdziesz w sekcji
sources/android/crazy_linker/README.TXT
. - Poprawiono
bitmap-plasma
, aby rysować na pełnym ekranie, a nie w obszarze o wymiarach 200 × 200 pikseli. - Zmniejszyliśmy rozmiar łańcucha narzędzi dla systemów Linux i Darwin o 25% dzięki utworzeniu dowiązań symbolicznych do identycznych plików.
- Włączono OpenMP we wszystkich kompilacjach GCC. Aby korzystać z tej funkcji, dodaj do ustawień kompilacji te flagi:
Android NDK r9 (lipiec 2013 r.)
- Ważne zmiany:
-
- Dodano obsługę Androida 4.3 (API na poziomie 18). Więcej informacji znajdziesz w
STABLE-APIS.html
oraz w nowych przykładach kodu wsamples/gles3jni/README
. - Dodano pliki nagłówkowe i biblioteki dla OpenGL ES 3.0, który jest obsługiwany przez Androida 4.3 (poziom interfejsu API 18) i nowsze wersje.
- Dodaliśmy do NDK kompilator GNU Compiler Collection (GCC) 4.8. Ponieważ GCC 4.6 jest nadal domyślną wersją, musisz wyraźnie włączyć tę opcję:
- W przypadku kompilacji
ndk-build
wyeksportujNDK_TOOLCHAIN_VERSION=4.8
lub dodaj go wApplication.mk
. - W przypadku samodzielnych kompilacji użyj opcji
--toolchain=
wmake-standalone-toolchain.sh
, na przykład:
--toolchain=arm-linux-androideabi-4.8
Uwaga: opcja
-Wunused-local-typedefs
jest włączona przez-Wall
. Pamiętaj, aby dodać__attribute__((unused))
, jeśli używasz asercji czasu kompilacji, takich jaksources/cxx-stl/stlport/stlport/stl/config/features.h
, wiersz 311. Więcej informacji znajdziesz w sekcji Zmiana numeru 55460.Uwaga: w GCC w wersji 4.7 i nowszych kompilatory ARM domyślnie generują kod dostępu do nieuporządkowanych danych dla docelowych wersji ARMv6 i nowszych. Podczas kompilowania jąder, które nie obsługują tej funkcji, może być konieczne dodanie opcji kompilacji
-mno-unaligned-access
. - W przypadku kompilacji
- Dodano obsługę Clang 3.3. Opcja
NDK_TOOLCHAIN_VERSION=clang
kompilacji domyślnie wybiera teraz Clang 3.3.Uwaga: zarówno GCC 4.4.3, jak i Clang 3.1 zostały wycofane i zostaną usunięte z następnej wersji NDK.
- Zaktualizowaliśmy debugger GNU Project Debugger (GDB), aby obsługiwał język Python 2.7.5.
- Dodaliśmy MCLinker, aby obsługiwać hosty Windows.
ld.gold
jest domyślnym miejscem docelowym, jeśli jest dostępne, więc aby włączyć MCLinker, musisz dodać-fuse-ld=mcld
wLOCAL_LDFLAGS
lubAPP_LDFLAGS
. - Dodano narzędzie
ndk-depends
, które wyświetla zależności biblioteki ELF. Więcej informacji znajdziesz tutaj:NDK-DEPENDS.html
. (Problem 53486)
- Dodano obsługę Androida 4.3 (API na poziomie 18). Więcej informacji znajdziesz w
- Ważne poprawki błędów:
-
- Rozwiązaliśmy potencjalny problem z obsługą zdarzeń w
android_native_app_glue
. (Problem 41755) - Poprawiono kompilację ARM/GCC-4.7, aby generować wystarczające wyrównanie dla instrukcji wczytywania i zapisywania NEON VST i VLD. (GCC Issue 57271)
- Rozwiązaliśmy wewnętrzny błąd kompilatora GCC 4.4.3/4.6/4.7 (ICE) dotyczący stałej wartości indeksu ujemnego w literale ciągu znaków. (Problem 54623)
- Rozwiązaliśmy problem z błędem segmentacji w GCC 4.7 podczas inicjowania stałej za pomocą adresu obiektu. (Problem 56508)
- Rozwiązaliśmy problem z błędem segmentacji GCC 4.6 ARM dla wartości
-O
podczas korzystania z Boost 1.52.0. (Problem 42891) - Poprawiono funkcje
libc.so
ilibc.a
, aby obsługiwały funkcjęwait4()
. (Problem 19854) - Zaktualizowano pliki x86 libc.so i libc.a, aby zawierały funkcję
clone()
. - Usunęliśmy błąd
LOCAL_SHORT_COMMANDS
, który powodował, żelinker.list
plik był pusty lub nie był używany. - Naprawiliśmy kompilację GCC MIPS w systemie Mac OS, aby używać dyrektyw CFI, bez których
ld.mcld --eh-frame-hdr
często się nie udaje. - Naprawiono wewnętrzny błąd kompilatora Clang 3.2 X86/MIPS w
llvm/lib/VMCore/Value.cpp
. (Zmiana 59021) - Naprawiono błąd asemblera GCC 4.7 w 64-bitowym systemie Windows. (Błąd:
out of memory allocating 4294967280 bytes
). - Zaktualizowano skrypt
ndk-gdb
, aby działania--start
lub--launch
czekały teraz na serwer debugowania GNU, dzięki czemu można bardziej niezawodnie osiągać punkty przerwania ustawione na początku ścieżki wykonania (np. punkty przerwania w kodzie JNI). (Problem 41278)Uwaga: ta funkcja wymaga jdb i wyświetla ostrzeżenie o oczekujących punktach przerwania. Aby przywrócić poprzednie działanie, wybierz opcję
--nowait
. - Rozwiązaliśmy problem z awarią GDB, gdy lista bibliotek jest pusta.
- Naprawiono błąd GDB, który występował podczas używania polecenia
stepi
po instrukcjibx pc
lubblx pc
Thumb. (Problem 56962,problem 36149) - Poprawiono MIPS
gdbserver
, aby szukaćDT_MIPS_RLD_MAP
zamiastDT_DEBUG
. (Problem 56586) - Naprawiono zależność cykliczną w skrypcie ndk-build, np. jeśli A->B i B->B, to B było pomijane w kompilacji. (Problem 56690)
- Rozwiązaliśmy potencjalny problem z obsługą zdarzeń w
- Inne poprawki błędów:
-
- Poprawiliśmy skrypt
ndk-build
, aby umożliwić określenie wersji Clang jako opcji wiersza poleceń (np.NDK_TOOLCHAIN_VERSION=clang3.2
). Wcześniej działało tylko określanie wersji jako zmiennej środowiskowej. - Poprawiono rozmiar gabi++ z
_Unwind_Exception
na 24 w przypadku platform docelowych MIPS podczas korzystania z kompilatora Clang. (Zmiana 54141) - Poprawiliśmy skrypt
ndk-build
, aby mieć pewność, że skompilowane biblioteki są rzeczywiście usuwane z projektów, które zawierają wstępnie skompilowane biblioteki statyczne, gdy używasz poleceniandk-build clean
. (Zmiana 54461, Zmiana 54480) - Zmodyfikowano opcję
NDK_ANALYZE=1
, aby była mniej rozwlekła. - Poprawiono
gnu-libstdc++/Android.mk
, aby uwzględniać ścieżkębackward/
w przypadku kompilacji, które korzystają ze zgodności wstecznej. (Problem 53404) - Rozwiązaliśmy problem, który powodował, że funkcja
stlport new
czasami zwracała losowe wartości. - Poprawiono
ndk-gdb
, aby pasowało do kolejnościCPU_ABIS
, a nieAPP_ABIS
. (Problem 54033) - Rozwiązaliśmy problem polegający na tym, że kompilacja 64-bitowa NDK w systemie MacOSX wybierała nieprawidłową ścieżkę kompilatora. (Problem 53769)
- Poprawiliśmy skrypty kompilacji, aby wykrywały 64-bitową wersję systemu Windows Vista. (Problem 54485)
- Naprawiono błąd x86
ntonl/swap32
:invalid 'asm': operand number out of range
. (Problem 54465, Zmiana 57242) - Naprawiono
ld.gold
, aby scalić literały ciągów znaków. - Poprawiliśmy działanie znaku
ld.gold
w przypadku wyrównania dużych symboli. - Zaktualizowano
ld.gold
, aby włączyć opcję--sort-section=name
. - W kompilatorach GCC 4.4.3, 4.6 i 4.7 wyłączono opcję
-export-dynamic
w przypadku programów połączonych statycznie. GCC nie dodaje już sekcji.interp
w przypadku programów połączonych statycznie. - Naprawiono błąd kompilacji GCC 4.4.3 dotyczący niespójności
stlport
wtypedef
_Unwind_Control_Block
. (Problem 54426) - Poprawiliśmy skrypty
awk
, aby obsługiwały plikiAndroidManifest.xml
utworzone w systemie Windows, które mogą zawierać końcowe znaki\r
i powodować błędy kompilacji. (Problem 42548) - Poprawiono
make-standalone-toolchain.sh
, aby sprawdzać katalogprebuilts/
i wykrywać, czy host jest 32-bitowy czy 64-bitowy. - Naprawiono opcję Clang 3.2
-integrated-as
. - Naprawiono dane obsługi modeli kompaktowych Clang 3.2 ARM EHABI
pr1
ipr2
. - Dodano opcję Clang
-mllvm -arm-enable-ehabi
, aby naprawić ten błąd Clang:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Rozwiązanie problemu z błędem kompilacji, który występował, gdy w pliku manifestu aplikacji nie było elementu
uses-sdk
. (Problem 57015)
- Poprawiliśmy skrypt
- Inne zmiany:
-
- Poprawki nagłówka
- Zmodyfikowano nagłówki, aby funkcja
__set_errno
była funkcją wbudowaną, ponieważ funkcja__set_errno
werrno.h
jest przestarzała, alibc.so
nie eksportuje jej już. - Zmodyfikowano
elf.h
, aby uwzględnićstdint.h
. (Problem 55443) - Naprawiono
sys/un.h
, aby był uwzględniany niezależnie od innych nagłówków. (Problem 53646) - Poprawiliśmy wszystkie interfejsy API z rodziny
MotionEvent_getHistorical
, aby przyjmowały wartośćconst AInputEvent* motion_event
. (Problem 55873) - Stała
malloc_usable_size
, aby otrzymaćconst void*
. (Problem 55725) - Poprawiono plik stdint.h, aby był bardziej zgodny ze standardem C99. (Zmień 46821)
- Zmodyfikowano
wchar.h
, aby nie redefiniowaćWCHAR_MAX
iWCHAR_MIN
- Poprawiono deklarację
<inttypes.h>
dla makrPRI
iSCN
związanych z wskaźnikami. (Problem 57218) - Zmieniono nagłówek
sys/cdefs.h
, tak aby__WCHAR_TYPE__
miał 32 bity w przypadku poziomów interfejsu API niższych niż 9, co oznacza, żewchat_t
ma 32 bity na wszystkich poziomach interfejsu API. Aby przywrócić poprzednie działanie, zdefiniuj zmienną logiczną_WCHAR_IS_8BIT
. (Problem 57267)
- Zmodyfikowano nagłówki, aby funkcja
- Dodaliśmy więcej formatowania w NDK
docs/
i wprowadziliśmy różne poprawki w dokumentacji. - Dodaliśmy obsługę techniki cienkiego archiwum podczas tworzenia bibliotek statycznych. (Problem 40303)
- Zaktualizowaliśmy skrypt
make-standalone-toolchain.sh
, aby obsługiwał bibliotekęstlport
oprócz bibliotekignustl
, gdy określisz opcję--stl=stlport
. Więcej informacji znajdziesz tutaj:STANDALONE-TOOLCHAIN.html
. - Zaktualizowano skrypt
make-standalone-toolchain.sh
, aby opcja--llvm-version=
tworzyła skrypty$TOOLCHAIN_PREFIX-clang
i$TOOLCHAIN_PREFIX-clang++
oprócz skryptówclang
iclang++
. Pozwoli to uniknąć przypadkowego użycia definicji clang i clang++ hosta. - Dodaliśmy 2 flagi, aby ponownie włączyć 2 optymalizacje w Clang, które zostały wyłączone w NDK w celu zapewnienia lepszej zgodności z kodem skompilowanym przez GCC:
- Dodano flagę
-fcxx-missing-return-semantics
, aby ponownie włączyć semantykę brakującego zwracania wartości w Clang 3.2+. Zwykle wszystkie ścieżki powinny kończyć się instrukcją zwracania wartości w przypadku funkcji zwracającej wartość. Jeśli tak nie jest, clang wstawia na ścieżce bez instrukcji return instrukcję niezdefiniowaną (lub pułapkę w trybie debugowania). Jeśli masz pewność, że kod jest prawidłowy, użyj tego flagi, aby umożliwić optymalizatorowi korzystanie z niezdefiniowanego zachowania. Jeśli nie masz pewności, nie używaj tej flagi. Dzwoniący może nadal otrzymać losową nieprawidłową wartość, ale optymalizator nie będzie jej wykorzystywać, co ułatwi debugowanie kodu. - Dodano flagę
-fglobal-ctor-const-promotion
, która ponownie włącza promowanie zmiennych globalnych z konstruktorem statycznym do stałych. Dzięki tej fladze etap optymalizacji zmiennych globalnych w LLVM próbuje ocenić zmienne globalne ze statycznymi konstruktorami i przekształcić je w stałe globalne. Chociaż ta optymalizacja jest prawidłowa, może powodować pewną niezgodność z kodem skompilowanym przez GCC. Na przykład kod możeconst_cast
, aby przekształcić stałą w zmienną i ją zmodyfikować. W GCC zmienna jest w trybie odczytu i zapisu, a kod jest uruchamiany przypadkowo. W kompilatorze Clang zmienna const znajduje się w pamięci tylko do odczytu, co może spowodować awarię aplikacji.
- Dodano flagę
- Dodano
-mldc1-sdc1
do kompilatorów MIPS GCC i Clang. Domyślnie kompilatory prawidłowo wyrównują obiekty 8-bajtowe i emitują instrukcjeldc1
isdc1
, aby je przenosić. Jeśli aplikacja korzysta z niestandardowego alokatora, który nie zawsze jest zgodny z 8-bajtową granicą nowego obiektu w taki sam sposób jak domyślny alokator, może się zawieszać z powodu operacjildc1
isdc1
na nieuporządkowanej pamięci. W takim przypadku użyj flagi-mno-ldc1-sdc1
, aby obejść ten problem. - Obniżyliśmy poziom ważności zdarzenia z ostrzeżenia do informacji, jeśli wartość
APP_PLATFORM_LEVEL
jest większa niżAPP_MIN_PLATFORM_LEVEL
. WartośćAPP_PLATFORM_LEVEL
może być niższa niżAPP_PLATFORM
wjni/Application.mk
, ponieważ NDK nie zawiera nagłówków dla wszystkich poziomów. W takim przypadku rzeczywisty poziom jest przesunięty w dół. WartośćAPP_MIN_PLATFORM_LEVEL
jest określana przez wartośćandroid:minSdkVersion
w pliku manifestu aplikacji. (Problem 39752) - Dodano metody
android_getCpuIdArm()
iandroid_setCpuArm()
do klasycpu-features.c
. Ułatwia to pobieranie informacji o identyfikatorze CPUID procesora ARM. (Problem 53689) - Zmodyfikowano
ndk-build
, aby używaćas/ld
GCC 4.7 do kompilacji Clang.Uwaga: w GCC 4.7 nazwy parametrów
monotonic_clock
iis_monotonic
zostały zmienione odpowiednio nasteady_clock
iis_steady
. - Dodaliśmy te nowe ostrzeżenia do skryptu
ndk-build
:- Dodaliśmy ostrzeżenia, jeśli w modułach biblioteki statycznej używane są
LOCAL_LDLIBS/LDFLAGS
. - Dodano ostrzeżenie, jeśli konfiguracja nie ma modułu do utworzenia.
- Dodaliśmy ostrzeżenie o używaniu bibliotek niesystemowych w
LOCAL_LDLIBS/LDFLAGS
biblioteki udostępnionej lub modułów wykonywalnych.
- Dodaliśmy ostrzeżenia, jeśli w modułach biblioteki statycznej używane są
- Zaktualizowano skrypty kompilacji, tak aby w przypadku braku definicji
APP_MODULES
i wymienienia wAndroid.mk
tylko bibliotek statycznych skrypt wymuszał kompilację wszystkich tych bibliotek. (Problem 53502) - Zaktualizowano
ndk-build
, aby obsługiwać ścieżki bezwzględne wLOCAL_SRC_FILES
. - Usunięto pliki wykonywalne
*-gdbtui
, które są duplikatami plików wykonywalnych*-gdb
z włączoną opcją-tui
. - Zaktualizowano skrypty kompilacji, aby ostrzegać, gdy interfejs kompilatora Edison Design Group (EDG) ponownie włącza
_STLP_HAS_INCLUDE_NEXT
. (Problem 53646) - Dodano zmienną środowiskową
NDK_LIBS_OUT
, która umożliwia zastąpienie ścieżkilibraries/gdbserver
domyślną ścieżką$PROJECT/libs
. Więcej informacji znajdziesz tutaj:OVERVIEW.html
. - Zmieniono domyślne ustawienia skryptu ndk-build, aby kompilować kod z ochroną ciągu formatującego
-Wformat -Werror=format-security
. Możesz ustawićLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
, aby wyłączyć tę funkcję. Więcej informacji znajdziesz w artykuleANDROID-MK.html
. - Dodano obsługę ładnego drukowania STL w
ndk-gdb-py
. Więcej informacji znajdziesz w sekcjiNDK-GDB.html
. - Dodano testy oparte na platformach googletest.
- Dodano powiadomienie do skryptu kompilacji łańcucha narzędzi, które ostrzega, jeśli bieżąca powłoka nie jest
bash
.
- Poprawki nagłówka
Android NDK r8e (marzec 2013)
- Ważne zmiany:
-
- Dodano 64-bitowy zestaw narzędzi hosta (nazwa pakietu z sufiksem
*-x86_64.*
). Więcej informacji znajdziesz wCHANGES.HTML
iNDK-BUILD.html
. - Dodano kompilator Clang 3.2. Domyślną wersją pozostaje GCC 4.6. Informacje o korzystaniu z kompilatora Clang znajdziesz w
CHANGES.HTML
. - Dodaliśmy statyczny analizator kodu dla hostów z systemem Linux/MacOSX. Informacje o korzystaniu z analizatora znajdziesz w
CHANGES.HTML
. - Dodano MCLinker dla hostów Linux/MacOSX jako funkcję eksperymentalną.
ld.gold
Łączenie jest domyślnie włączone, jeśli jest dostępne, więc musisz je jawnie włączyć. Więcej informacji znajdziesz w sekcjiCHANGES.HTML
. - Zaktualizowano ndk-build, aby używać sortowania topologicznego w przypadku zależności modułów, co oznacza, że kompilacja automatycznie sortuje kolejność bibliotek określonych w
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
iLOCAL_SHARED_LIBRARIES
. Więcej informacji znajdziesz tutaj:CHANGES.HTML
. (Problem 39378)
- Dodano 64-bitowy zestaw narzędzi hosta (nazwa pakietu z sufiksem
- Ważne poprawki błędów:
-
- Poprawiono skrypt kompilacji, aby kompilować wszystkie łańcuchy narzędzi w
-O2
. Łańcuchy narzędzi w poprzednich wersjach były nieprawidłowo tworzone bez optymalizacji. - Naprawiliśmy skrypt kompilacji, który bezwarunkowo kompiluje Clang/llvm dla systemu MacOSX w wersji 64-bitowej.
- Naprawiono wewnętrzny błąd kompilatora GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Problem 52732) - Rozwiązaliśmy problem z kompilacją, który powodował, że kompilatory GCC/ARM w wersjach 4.6 i 4.7 nie mogły łączyć kodu przy użyciu 64-bitowych wbudowanych funkcji atomowych. (Problem 41297)
- Rozwiązaliśmy problemy z niezgodnością użycia dyrektywy DIV w linkerze GCC 4.7. (Problem z oprogramowaniem)
- Naprawiono wewnętrzny błąd kompilatora GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - Naprawiono wewnętrzny błąd kompilatora GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (Problem 52909) - Naprawiono błąd segmentacji w kompilatorze GCC 4.7. (Problem z GCC)
- Poprawiono
<chrono>
rozdzielczość zegara i włączonosteady_clock
. (Problem 39680) - Poprawiono łańcuch narzędzi, aby włączyć
_GLIBCXX_HAS_GTHREADS
dla biblioteki libstdc++ w GCC 4.7. (Problem 41770, Problem 41859) - Rozwiązaliśmy problem z nieudanym łączeniem kodu X86 MXX/SSE z powodu braku
posix_memalign
. (Zmiana 51872) - Naprawiono błąd segmentacji GCC4.7/X86 w
i386.c
, funkcjadistance_non_agu_define_in_bb()
. (Zmień 50383) - Naprawiono GCC4.7/X86, aby przywrócić wcześniejsze działanie
cmov
. (Problem z GCC) - Poprawiono obsługę wartości NULL zwracanej przez funkcję
setlocale()
w libstdc++/GCC4.7. (Problem 46718) - Naprawiono
ld.gold
nieokreślone odwołanie do__exidx_start
i__exidx_start_end
w czasie wykonywania. (Zmiana 52134) - Rozwiązaliśmy wewnętrzny błąd kompilatora Clang 3.1 podczas korzystania z biblioteki Eigen. (Problem 41246)
- Naprawiono wewnętrzny błąd kompilatora Clang 3.1, w tym
<chrono>
w trybie C++11. (Problem 39600) - Naprawiono wewnętrzny błąd kompilatora Clang 3.1 podczas generowania kodu obiektu dla wywołania metody
rvalue
zainicjowanej w jednolity sposób. (Problem 41387) - Poprawiono wyrównanie stosu w przypadku Clang 3.1/X86. (Zmiana 52154)
- Rozwiązaliśmy problem z sygnałem SIGILL w debuggerze GNU (GDB) podczas debugowania na Androidzie 4.1.2. (Problem 40941)
- Rozwiązaliśmy problem polegający na tym, że GDB nie może ustawiać punktów przerwania
source:line
, gdy symbole zawierają długie, pośrednie ścieżki do plików. (Problem 42448) - Naprawiono GDB
read_program_header
w przypadku plików wykonywalnych PIE MIPS. (Zmiana 49592) - Naprawiliśmy błąd segmentacji
STLport
wuncaught_exception()
. (Zmień 50236) - Naprawiono błąd magistrali
STLport
w obsłudze wyjątków spowodowany nieprawidłowym dostępem doDW_EH_PE_udata2
,DW_EH_PE_udata4
iDW_EH_PE_udata8
. - Rozwiązaliśmy problem z nieskończoną rekurencją Gabi++ w przypadku operatora
nothrow new[]
. (Problem 52833) - Naprawiono nieprawidłowe przesunięcie wskaźnika do procedury obsługi wyjątków w Gabi++. (Zmień 53446)
- Usunięto zbędny obiekt Gabi++ free on exception (Zmiana 53447)
- Poprawiono skrypt kompilacji, aby kompilować wszystkie łańcuchy narzędzi w
- Inne poprawki błędów:
-
- Stałe nagłówki NDK:
- Usunięto zbędne definicje
size_t
,ssize_t
iptrdiff_t
. - Poprawiony nagłówek MIPS i ARM
fenv.h
. - Poprawiono
stddef.h
, aby nie redefiniowaćoffsetof
, ponieważ ten element już istnieje w łańcuchu narzędzi. - Poprawiono
elf.h
, aby zawierałElf32_auxv_t
iElf64_auxv_t
. (Problem 38441) - Poprawiliśmy definicje
#ifdef
C++ w pliku nagłówkowymOpenSLES_AndroidConfiguration.h
. (Problem 53163)
- Usunięto zbędne definicje
- Poprawiono działanie funkcji
STLport
, która po wystąpieniu błędu braku pamięci przerywa działanie zamiast cicho się zamykać. - Poprawiliśmy nagłówki systemowe i Gabi++, aby można było je kompilować na poziomie API 8 i niższym.
- Poprawiono
cpufeatures
, aby nie analizować/proc/self/auxv
. (Problem 43055) - Naprawiono
ld.gold
, aby nie zależał od biblioteki hosta libstdc++ i na platformach Windows, aby nie zależał od bibliotekilibgcc_sjlj_1.dll
. - Rozwiązaliśmy problem z kompilatorem Clang 3.1, który generował niespójną listę rejestrów w
.vsave
i powodował błędy asemblera. (Zmiana 49930) - Poprawiono Clang 3.1, aby można było kompilować libgabi++ i przechodzić
test-stlport
testytest-stlport
w przypadku docelowych kompilacji MIPS. (Zmień 51961) - Poprawiono Clang 3.1, aby domyślnie włączać wyjątki tylko w przypadku języka C++, a nie C.
- Rozwiązaliśmy kilka problemów w Clang 3.1, aby przejść większość testów wyjątków GNU.
- Poprawiono skrypty
clang
iclang++
w samodzielnym kompilatorze NDK, aby wykrywać-cc1
i nie określać-target
, gdy zostanie znaleziony. - Ustawiono
ndk-build
na obserwacjęNDK_APP_OUT
wApplication.mk
. - Naprawiono funkcje X86
libc.so
ilib.a
, w których brakowało funkcjisigsetjmp
isiglongjmp
zadeklarowanych już wsetjmp.h
. (Problem 19851) - Poprawiono GCC 4.4.3/4.6/4.7 libstdc++, aby działał z Clang w C++ 11. (Problem z Clangiem)
- Naprawiono ścieżkę cygwin w argumencie przekazanym do
HOST_AWK
. - Naprawiono ostrzeżenie skryptu
ndk-build
w oknach podczas uruchamiania z katalogu JNI projektu. (Problem 40192) - Rozwiązaliśmy problem polegający na tym, że skrypt
ndk-build
nie jest kompilowany, jeśli plik makefile zawiera białe znaki na końcu definicjiLOCAL_PATH
. (Problem 42841)
- Stałe nagłówki NDK:
- Inne zmiany:
-
- Włączono obsługę wątków w łańcuchu narzędzi GCC/MIPS.
- Zaktualizowano funkcje pomocnicze obsługi wyjątków GCC
__cxa_begin_cleanup
i__cxa_type_match
, aby miały widoczność domyślną zamiast widoczności ukrytej w GNU libstdc++. Więcej informacji znajdziesz wCHANGES.HTML
. - Zaktualizowano skrypty kompilacji, aby statyczne biblioteki Gabi++ i STLport były teraz kompilowane z ukrytą widocznością, z wyjątkiem funkcji pomocniczych obsługi wyjątków.
- Zaktualizowano kompilację, aby
STLport
była kompilowana dla architektury ARM w trybie Thumb. - Dodaliśmy obsługę właściwości
std::set_new_handler
w Gabi++. (Problem 52805) - Włączone wywołanie systemowe
FUTEX
w bibliotece GNU libstdc++. - Zaktualizowano
ndk-build
, aby nie kopiował już wstępnie skompilowanej biblioteki statycznej do kataloguobj/local/<abi>/
projektu. (Problem 40302) - Usunięto
__ARM_ARCH_5*__
ze skryptu ARMtoolchains/*/setup.mk
. (Problem 21132) - Dodano biblioteki GNU libstdc++ w architekturze Thumb dla ARM.
- Włączono instrukcje zmiennoprzecinkowe MIPS
madd/msub/nmadd/nmsub/recip/rsqrt
z 32-bitowym procesorem FPU. - Włączono optymalizator pętli Graphite w GCC 4.6 i 4.7, aby umożliwić więcej optymalizacji:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
i-ftree-loop-linear
. (informacje) - Włączona
polly
w przypadku Clang 3.1 na 32-bitowych hostach z systemem Linux i Max OS X, która analizuje i optymalizuje dostęp do pamięci. (informacje) - Włączono
-flto
w GCC 4.7, 4.6, Clang 3.2 i Clang 3.1 w systemie Linux (Clang LTO via LLVMgold.so). Docelowe kompilatory MIPS nie są obsługiwane, ponieważld.gold
jest niedostępny. - Włączono funkcje
--plugin
i--plugin-opt
dlald.gold
w GCC 4.6/4.7. - Włączono
--text-reorder
dlald.gold
w GCC 4.7. - Skonfigurowano bibliotekę GNU libstdc++ za pomocą
_GLIBCXX_USE_C99_MATH
, co powoduje usunięcie definicji skryptuisinf
w nagłówku bionic. Więcej informacji znajdziesz w sekcjiCHANGES.html
. - Dodano
APP_LDFLAGS
do skryptów kompilacji. Więcej informacji znajdziesz w sekcjiANDROID-MK.html
. - Zaktualizowano skrypty kompilacji, aby umożliwić
NDK_LOG=0
wyłączenieNDK_LOG
. - Zaktualizowano skrypty kompilacji, aby umożliwić
NDK_HOST_32BIT=0
wyłączenie 32-bitowego łańcucha narzędzi środowiska programistycznego hosta. - Zmieniono domyślne flagi GCC/X86
-march=
i-mtune=
zpentiumpro
igeneric
nai686
iatom
. - Ulepszone skrypty kompilacji łańcucha narzędzi:
- Usunięto wyścig w
build-gcc.sh
w przypadku typu kompilacjimingw
, który uniemożliwiał przetwarzanie znacznej liczby kompilacji równoległych. - Zaktualizowano
build-gabi++.sh
ibuild-stlport.sh
, aby można było je uruchamiać z pakietu NDK. (Problem 52835) - Naprawiono
run-tests.sh
w kolekcji narzędziMSys
. - Ulepszona 64-bitowa platforma narzędzi hosta i obsługa kompilacji Canadian Cross.
- Zaktualizowano skrypt
build-mingw64-toolchain.sh
do nowszej wersji. - Dodano opcję tworzenia
libgnustl_static.a
istlport_static.a
bez ukrytej widoczności.
- Usunięto wyścig w
Android NDK r8d (grudzień 2012)
- Ważne zmiany:
-
- Dodano do NDK kompilator GNU Compiler Collection (GCC) 4.7. Kompilator GCC 4.6 jest nadal domyślny, więc musisz wyraźnie włączyć nową wersję w ten sposób:
- W przypadku
ndk-build
wyeksportuj zmiennąNDK_TOOLCHAIN_VERSION=4.7
lub dodaj ją doApplication.mk
. - W przypadku samodzielnych kompilacji dodaj opcję
--toolchain=
domake-standalone-toolchain.sh
, na przykład:--toolchain=arm-linux-androideabi-4.7
Uwaga: ta funkcja jest eksperymentalna. Wypróbuj ją i zgłoś ewentualne problemy.
- W przypadku
- Dodano obsługę wyjątków
stlport
za pomocą gabi++. Pamiętaj, że nowy gabi++ zależy oddlopen
i powiązanego kodu, co oznacza, że:- Nie możesz już tworzyć statycznych plików wykonywalnych za pomocą opcji
-static
ani uwzględniaćlibstlport_static.a
za pomocąAPP_STL := stlport_static
. (Nadal możesz używać opcji-static
z samodzielnym łańcuchem narzędzi). Kompilowanie dynamicznego pliku wykonywalnego za pomocąinclude $(BUILD_EXECUTABLE)
nadal działa, ponieważ kompilator automatycznie dodaje opcję-ldl
. - Jeśli projekt jest łączony za pomocą opcji
-nostdlib
i {-Wl,--no-undefined}, musisz ręcznie dodać opcję-ldl
.
CPLUSPLUS-SUPPORT.html
.Uwaga: ta funkcja jest eksperymentalna i działa lepiej w przypadku kompilatorów GCC 4.6/4.7 niż w przypadku kompilatorów GCC 4.4.3 lub Clang 3.1. Wypróbuj ją i zgłoś ewentualne problemy.
- Nie możesz już tworzyć statycznych plików wykonywalnych za pomocą opcji
- Dodaliśmy
-mstack-protector-guard=
opcję dla x86, która pozwala wybrać między globalną ścieżką domyślną zgodną ze starszą biblioteką C na Androida (bionic) a nową ścieżką tls (%gs:20) dla-fstack-protector
,-fstack-protector-all
i-fstack-protector-strong
przy użyciu kompilatorów GCC w wersji 4.6 i nowszych.Uwaga: samo ustawienie
-mstack-protector-guard
nie włącza żadnych opcji-fstack-protector*
. - Dodano funkcję
android_setCpu()
dosources/android/cpufeatures/cpu-features.c
do użycia, gdy automatyczne wykrywanie za pomocą/proc
nie jest możliwe w Androidzie 4.1 i nowszych. (Problem w Chromium 164154)
- Dodano do NDK kompilator GNU Compiler Collection (GCC) 4.7. Kompilator GCC 4.6 jest nadal domyślny, więc musisz wyraźnie włączyć nową wersję w ten sposób:
- Ważne poprawki błędów:
-
- Rozwiązaliśmy problem z niepotrzebnym ponownym tworzeniem plików obiektów podczas korzystania ze skryptu
ndk-build
. (Problem 39810) - Naprawiono błąd linkera w NDK 8c w przypadku systemu Mac OS X 10.6.x, który powodował ten błąd:
Ten problem był spowodowany kompilacją w systemie Mac OS X 10.7, która generowała pliki binarne niezgodne z systemem Mac OS 10.6.x i NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Usunęliśmy opcje
-x c++
ze skryptu samodzielnej kompilacji Clang++. (Problem 39089) - Rozwiązaliśmy problemy z używaniem opcji
NDK_TOOLCHAIN_VERSION=clang3.1
w Cygwin. (Problem 39585) - Poprawiono
make-standalone-toolchain.sh
skrypt, aby umożliwić generowanie samodzielnego łańcucha narzędzi w środowiskach Cygwin lub MinGW. Powstały łańcuch narzędzi może być używany w środowiskach Cygwin, MingGW lub CMD.exe. (Problem 39915,problem 39585) - Dodano brakującą opcję
SL_IID_ANDROIDBUFFERQUEUESOURCE
w kompilacjach androida 14 dla architektur ARM i X86. (Problem 40625) - Poprawiono wykrywanie procesora x86 w przypadku funkcji
ANDROID_CPU_X86_FEATURE_MOVBE
. (Problem 39317) - Rozwiązaliśmy problem, który uniemożliwiał bibliotece STL (Standard Template Library) używanie źródeł C++ bez rozszerzenia
.cpp
. - Naprawiono wewnętrzny błąd kompilatora GCC 4.6 ARM w pliku reload1.c:1061. (Problem 20862)
- Naprawiono wewnętrzny błąd kompilatora GCC 4.4.3 ARM w emit-rtl.c:1954. (Problem 22336)
- Naprawiono wewnętrzny błąd kompilatora GCC 4.4.3 ARM w pliku postreload.c:396. (Problem 22345)
- Naprawiono problem z pomijaniem funkcji lambda w kompilatorach GCC 4.6 i 4.7. (Problem 35933)
- Rozwiązaliśmy problem z niepotrzebnym ponownym tworzeniem plików obiektów podczas korzystania ze skryptu
- Inne poprawki błędów:
-
- Poprawki w plikach nagłówkowych NDK:
- Poprawiono typy atrybutów
__WINT_TYPE__
iwint_t
, aby były takie same. - Poprawiono błąd w
android/bitmap.h
. (Problem 15134) - Poprawiono błąd w
errno.h
. - Dodano sprawdzanie obecności
__STDC_VERSION__
wsys/cdefs.h
. (Problem 14627) - Zmieniliśmy kolejność nagłówków w sekcjach
byteswap.h
idirent.h
. - Poprawiono
limits.h
, aby uwzględnićpage.h
, które zawiera ustawieniaPAGE_SIZE
. (Problem 39983) - Poprawiono typ zwracany
glGetAttribLocation()
iglGetUniformLocation()
zint
naGLint
. - Stała
__BYTE_ORDER
dla kompilacji x86. (Problem 39824)
- Poprawiono typy atrybutów
- Poprawiono skrypt
ndk-build
, aby nie zastępował-Os
wartością-O2
w przypadku kompilacji ARM. - Naprawiliśmy skrypty kompilacji, aby umożliwić zastępowanie ustawień
HOST_AWK
,HOST_SED
iHOST_MAKE
. - Rozwiązaliśmy problem z
ld.gold
w kompilacjachfsck_msdos
, który dotyczył łączenia obiektów skompilowanych za pomocą kompilatora Intel C/C++ (ICC). - Naprawiono obsługę stałego interfejsu ARM EHABI w kompilatorze Clang, aby był zgodny ze specyfikacjami.
- Naprawiliśmy debuger GNU (GDB), aby skrócić czas potrzebny na przechodzenie po mapie linków procesu docelowego podczas zdarzeń
solib
. (Problem 38402) - Rozwiązano problem z brakiem pliku
libgcc.a
podczas łączenia bibliotek udostępnionych.
- Poprawki w plikach nagłówkowych NDK:
- Inne zmiany:
-
- Przeniesiono wstecznie 64-bitowe wbudowane funkcje atomowe dla architektury ARM do kompilatora GCC 4.6.
- Dodaliśmy dokumentację dotyczącą opóźnienia wyjścia audio oraz inne dokumenty i poprawki.
- Poprawiono kompilacje debugowania za pomocą Clang, tak aby funkcje inne niż void zgłaszały teraz sygnał
SIGILL
w przypadku ścieżek bez instrukcji return. - Zaktualizowano
make-standalone-toolchain.sh
, aby akceptować sufiks-clang3.1
, co jest równoznaczne z dodaniem--llvm-version=3.1
do łańcucha narzędzi GCC 4.6. - Zaktualizowano adres URL raportu o błędzie GCC i Clang na:https://source.android.com/source/report-bug s.html
- Dodaliśmy obsługę formatu ARM ELF do narzędzia
llvm-objdump
. - Wyłączono ostrzeżenie treating c input as c++ w przypadku kompilacji Clang.
- Zaktualizowaliśmy kompilację, aby tworzona była tylko 32-bitowa wersja
libiberty.a
, która jest umieszczana w folderzelib32/
.
Android NDK r8c (listopad 2012)
- Ważne zmiany:
-
- Dodano kompilator Clang 3.1 do NDK. Kompilator GNU Compiler Collection (GCC) 4.6 jest nadal domyślny, więc musisz jawnie włączyć opcję kompilatora Clang w ten sposób:
- W przypadku
ndk-build
wyeksportujNDK_TOOLCHAIN_VERSION=clang3.1
lub dodaj to ustawienie zmiennej środowiskowej doApplication.mk
. - W przypadku samodzielnych kompilacji dodaj
--llvm-version=3.1
domake-standalone-toolchain.sh
i zastąpCC
orazCXX
w pliku makefile kodami<tool-path>/bin/clang
i<tool-path>/bin/clang++
. Więcej informacji znajdziesz w sekcjiSTANDALONE-TOOLCHAIN.html
.
Uwaga: ta funkcja jest eksperymentalna. Wypróbuj ją i zgłoś ewentualne problemy.
- W przypadku
- Dodano linker Gold
ld.gold
dla łańcucha narzędzi Windows. Gold linker jest też domyślnym linkerem dla ARM i X86 na wszystkich hostach. Możesz go zastąpić, aby używać linkerald.bfd
, dodającLOCAL_LDFLAGS += -fuse-ld=bfd
doAndroid.mk
lub przekazując-fuse-ld=bfd
do wiersza poleceń g++/clang++, który wykonuje łączenie. - Dodano sprawdzanie spacji w ścieżce NDK w skryptach
ndk-build[.cmd]
indk-gdb
, aby zapobiegać trudnym do zdiagnozowania błędom kompilacji. - Wprowadziliśmy te zmiany w obsłudze poziomu interfejsu API:
- Zmodyfikowano logikę kompilacji, aby projekty, które określają
android-10
przezandroid-13
wAPP_PLATFORM
,project.properties
lubdefault.properties
, były łączone zandroid-9
zamiast zandroid-14
. - Zaktualizowana kompilacja, dzięki której pliki wykonywalne korzystające z Androida 16 (Jelly Bean) lub nowszego są kompilowane z opcją
-fPIE
dla plików wykonywalnych niezależnych od pozycji (PIE). Nowa opcjaAPP_PIE
umożliwia kontrolowanie tego działania. Więcej informacji znajdziesz w sekcjiAPPLICATION-MK.html
.Uwaga: wszystkie poziomy interfejsu API powyżej 14 nadal są połączone z
platforms/android-14
i nie dodano żadnych nowychplatforms/android-N
. - Zmodyfikowano
ndk-build
, aby wyświetlać ostrzeżenia, jeśli dostosowany poziom interfejsu API jest większy niżandroid:minSdkVersion
wAndroidManifest.xml
projektu.
- Zmodyfikowano logikę kompilacji, aby projekty, które określają
- Zaktualizowaliśmy bibliotekę pomocniczą
cpu-features
, aby uwzględnić więcej funkcji specyficznych dla architektury ARM. Więcej informacji znajdziesz w sekcjisources/android/cpufeatures/cpu-features.h
. - Zmodyfikowano typ long double na platformie X86, aby miał 8 bajtów. Ten typ danych ma teraz taki sam rozmiar jak typ double, ale nadal jest traktowany jako odrębny typ.
- Zaktualizowana kompilacja dla
APP_ABI=armeabi-v7a
:- Zmodyfikowano ten typ kompilacji, aby przekazywać parametr
-march=armv7-a
do linkera. Ta zmiana zapewnia prawidłowe połączenie bibliotek icrt*.o
w wersji 7. - Dodano
-mfpu=vfpv3-d16
dondk-build
zamiast opcji-mfpu=vfp
używanej w poprzednich wersjach.
- Zmodyfikowano ten typ kompilacji, aby przekazywać parametr
- Dodano kompilator Clang 3.1 do NDK. Kompilator GNU Compiler Collection (GCC) 4.6 jest nadal domyślny, więc musisz jawnie włączyć opcję kompilatora Clang w ten sposób:
- Ważne poprawki błędów:
-
- Rozwiązaliśmy problem, który powodował, że uruchomienie
make-standalone-toolchain.sh
z uprawnieniami roota uniemożliwiało niektórym użytkownikom dostęp do samodzielnego łańcucha narzędzi. (Problem 35279)- Wszystkie pliki i pliki wykonywalne w pakiecie NDK mają uprawnienia do odczytu i wykonywania dla wszystkich użytkowników.
- Własność lub grupa
libstdc++.a
jest teraz zachowywana podczas kopiowania.
- Usunięto zbędny element
\r
z wstępnie utworzonego elementuecho.exe
w systemie Windows. Nadmiarowy znak\r
spowodował niepowodzenie działania funkcjigdb.setup
w debuggerze GNU (GDB), ponieważ został nieprawidłowo włączony do ścieżki. (Problem 36054) - Rozwiązaliśmy problem z równoległymi kompilacjami w systemie Windows, które czasami kończyły się niepowodzeniem z powodu problemów z czasem w implementacji
host-mkdir
. (Problem 25875) - Poprawiono GCC 4.4.3 GNU, aby domyślnie nie scalać nazw
typeinfo
.libstdc++
Więcej informacji znajdziesz w sekcjitoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Problem 22165) - Rozwiązaliśmy problem z kontekstem
null
w GCC 4.6cp/mangle.c::write_unscoped_name
, który mógł powodować awarię GCC, gdy kontekst byłnull
i odwoływano się do niego wTREE_CODE
. - Naprawiono błędy GCC 4.4.3 w definicjach typów specyficznych dla ARM NEON w przypadku liczb zmiennoprzecinkowych. (Problem 34613)
- Naprawiliśmy wewnętrzną implementację
STLport
_IteWrapper::operator*()
, w której zwracana była nieaktualna lokalizacja stosu zawierająca wartość dereferencji, co powodowało awarie w czasie działania. (Problem 38630) - Poprawki dotyczące ARM:
- Naprawiono ARM GCC 4.4.3/4.6
g++
, aby nie ostrzegać, że mangling of <va_list> został zmieniony w GCC 4.4. Obejście polegające na użyciu przełącznika-Wno-psabi
w celu uniknięcia tego ostrzeżenia nie jest już wymagane. - Rozwiązaliśmy problem, który występował, gdy projekt z sufiksami
.arm
lub.neon
wLOCAL_SRC_FILES
używał teżAPP_STL
. SkryptAPP_STL
ndk-build
wyszukuje pliki C++ wLOCAL_SRC_FILES
przed dodaniem ścieżek STLheader/lib
do kompilacji. Zmodyfikowanondk-build
, aby przed wyszukiwaniem odfiltrowywać sufiksy.arm
i.neon
. W przeciwnym razie elementy wLOCAL_SRC_FILES
, np.myfile.cpp.arm.neon
, nie zostaną skompilowane jako kod C++. - Poprawiono
binutils-2.21/ld.bfd
, aby można było łączyć obiekty ze starszych wersji narzędzi binutils beztag_FP_arch
, co powodowało wyświetlanie komunikatów o błędach assertion fail w GNU Binutils. (Problem 35209) - Usunięto ostrzeżenie Unknown EABI object attribute 44 (Nieznany atrybut obiektu EABI 44), gdy
binutils-2.19/ld
łączy wstępnie skompilowany obiekt z nowszą wersjąbinutils-2.21
- Rozwiązaliśmy problem z kompilacją GNU
stdc++
z użyciem zarówno-mthumb
, jak i-march=armv7-a
, modyfikującmake-standalone-toolchain.sh
w celu wypełnieniaheaders/libs
w podkataloguarmv7-a/thumb
. (Problem 35616) - Naprawiono błąd unresolvable R_ARM_THM_CALL relocation. (Problem 35342)
- Naprawiono wewnętrzny błąd kompilatora w lokalizacji
reload1.c:3633
, który był spowodowany tym, że back-end ARM oczekiwał nieprawidłowego typu operandu podczas rozszerzania znaku z lokalizacjichar
. (GCC Issue 50099) - Naprawiono wewnętrzny błąd kompilatora związany z ujemną wartością przesunięcia. (Problem z GCC)
- Naprawiono ARM GCC 4.4.3/4.6
- Ustalono wartość
-fstack-protector
dla architektury X86, która jest też domyślną wartością dlandk-build
interfejsu ABI x86. - Poprawki dotyczące MIPS:
- Naprawiono kolejność bajtów
STLport
, ustawiając wartość_STLP_LITTLE_ENDIAN
na 1 podczas kompilowania MIPSlibstlport_*
. - Rozwiązaliśmy problem z GCC
__builtin_unreachable
podczas kompilowania LLVM. (GCC Issue 54369) - Poprawka przeniesiona z nowszej wersji, która rozwiązuje problem z procesem kompilacji
cc1
zużywającym 100% procesora. (GCC Issue 50380)
- Naprawiono kolejność bajtów
- Poprawki dotyczące debugera GNU:
- Wyłączono obsługę Pythona w gdb-7.x podczas kompilacji, w przeciwnym razie funkcja konfiguracji gdb-7.x może wybrać dowolną wersję Pythona dostępną na hoście i skompilować
gdb
ze stałą zależnością od konkretnej wersji Pythona. (Problem 36120) - Naprawiono
ndk-gdb
, gdyAPP_ABI
zawieraall
i nie pasuje do żadnej ze znanych architektur. (Problem 35392) - Poprawiliśmy obsługę ścieżek w systemie Windows, zachowując znak
:
, jeśli wygląda na to, że może być częścią ścieżki w systemie Windows zaczynającej się od litery dysku. (GDB Issue 12843) - Naprawiono dodawanie obsługi sprzętowych punktów przerwania dla architektury ARM w
gdbserver
. (Problem z GDB) - Dodano poprawkę, która umożliwia odczytywanie tylko bieżącego parametru
solibs
, gdy łącznik jest spójny. Ta zmiana przyspiesza obsługę zdarzeńsolib
. (Problem 37677) - Dodano poprawkę, która umożliwia wielokrotne próby znalezienia punktów przerwania
solib
. GDB ponawia terazenable_break()
każdą próbę wywołania funkcjisvr4_current_sos()
, dopóki nie zakończy się ona powodzeniem. (Zmiana 43563) - Rozwiązaliśmy problem, który powodował, że
gdb
nie zatrzymywał się w punktach przerwania umieszczonych w bibliotekachdlopen-ed
. (Problem 34856) - Rozwiązanie problemu z
SIGILL
w dynamicznym linkerze podczas wywoływaniadlopen()
w systemie, w którym/system/bin/linker
jest pozbawiony symboli, artld_db_dlactivity()
jest zaimplementowany jakoThumb
, z powodu nieprawidłowego zachowaniaLSB
wsym_addr
. (Problem 37147)
- Wyłączono obsługę Pythona w gdb-7.x podczas kompilacji, w przeciwnym razie funkcja konfiguracji gdb-7.x może wybrać dowolną wersję Pythona dostępną na hoście i skompilować
- Rozwiązaliśmy problem, który powodował, że uruchomienie
- Inne poprawki błędów:
-
- Stałe nagłówki NDK:
- Naprawiono kod
arch-mips/include/asm/*
, który został nieprawidłowo usunięty z oryginalnego jądra. (Zmień 43335) - Zastąpiono dane elementu struktury
__unused
elementem__linux_unused
w plikachlinux/sysctl.h
ilinux/icmp.h
, aby uniknąć konfliktu z elementem#define __unused
w plikusys/cdefs.h
. - Naprawiono
fenv.h
w przypadku zamkniętych funkcji C z__BEGIN_DECLS
i__END_DECLS
. - Usunięto niezaimplementowane funkcje w
malloc.h
. - Poprawiona definicja
stdint.h
dlauint64_t
w kompilatorach ANSI. (Wydanie 1952) - Poprawiono makra preprocesora w
<arch>/include/machine/*
. - Zastąpiliśmy
link.h
dla MIPS nową wersją obsługującą wszystkie platformy. - Usunięto:
linux-unistd.h
- Przenieś makra specyficzne dla GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
iULONG_LONG_MAX
z<pthread.h>
do<limits.h>
.
- Naprawiono kod
- Naprawiliśmy przepełnienie bufora w
ndk-stack-parser
. - Naprawiono
_STLP_USE_EXCEPTIONS
, gdy nie jest zdefiniowany, aby pomijać wszystkie deklaracje i użycia__Named_exception
. Kompilowanie i używanie ustawień__Named_exception
następuje tylko wtedy, gdySTLport
może korzystać z wyjątków. - Naprawiono tworzenie pakietów NDK tylko dla Linuksa bez tworzenia kodu dla Windows. Aby przeprowadzić ten typ kompilacji, użyj tych ustawień:
./build/tools/make-release.sh --force --systems=linux-x86
- Naprawiono
libc.so
, aby nie eksportowaćatexit()
i__do_handler
. Te symbole są eksportowane w przypadku kompilacji ARM przez systemową wersję biblioteki C, aby obsługiwać starsze biblioteki natywne. Nie powinny one być nigdy bezpośrednio przywoływane przez kod wygenerowany przez NDK. Zamiast tego każda biblioteka współdzielona lub plik wykonywalny powinien zawierać własną wersję tych symboli dostarczoną przezcrtbegin_*.o
.Jeśli Twój projekt jest połączony z opcjami
-nostdlib -Wl,--no-undefined
, musisz podać własny__dso_handle
, ponieważ w tym przypadkucrtbegin_so.o
nie jest połączony. Zawartość__dso_handle
nie ma znaczenia, co widać w tym przykładzie kodu:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Dekoder symboli stałych dla architektury ARM używany w
objdump
w przypadku wpisówplt
, aby generować bardziej czytelną formęfunction@plt
. - Z biblioteki platformy X86
libc.so
usunęliśmy te symbole wprowadzone w GCC 4.6:libgcc.a
,__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
i__aeabi_unwind_cpp_pr2
. - Usunięto nieużywane elementy
.ctors
,.dtors
i.eh_frame
w MIPScrt*_so.S
. - Zaktualizowano
ndk-gdb
, aby przyjmował tylko ostatni wiersz danych wyjściowych w przypadkundk-build
DUMP_XXXX
. Ta zmiana sprawia, że jeśliApplication.mk
lubAndroid.mk
wydrukują coś ze składnią$(info ...)
, nie zostanie to wstawione do wynikuDUMP_XXXX
. (Więcej informacji)
- Stałe nagłówki NDK:
- Inne zmiany:
-
- Usunięto nagłówki
arch-x86
iarch-mips
zplatforms/android-[3,4,5,8]
. Te nagłówki były niekompletne, ponieważ interfejsy ABI X86 i MIPS są obsługiwane tylko w przypadku interfejsu API w wersji 9 lub nowszej. - Uproszczona ścieżka dołączania w pakietach autonomicznych, jak pokazano poniżej.
(Problem 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- Poprawiono
ndk-build
, aby domyślnie rozpoznawał więcej rozszerzeń plików C++:.cc .cp .cxx .cpp .CPP .c++ .C
. Nadal możesz używaćLOCAL_CPP_EXTENSION
, aby zastępować te ustawienia rozszerzenia. - Rozwiązaliśmy problem w
samples/san-angeles
, który powodował wyświetlanie czarnego ekranu lub zamrożenie klatki po ponownym uruchomieniu. - Zastąpiliśmy wycofane interfejsy API w przykładowych kodach NDK.
(Problem 20017)
hello-gl2
z Androida 5 na Androida 7native-activity
z Androida 9 na Androida 10native-audio
z Androida 9 na Androida 10native-plasma
z Androida 9 na Androida 10
- Dodano nowe oznaczenia plików wykonywalnych na Androida z uproszczonym schematem w sekcji
.note.android.ident
(zdefiniowanej wcrtbegin_static/dynamic.o
), aby narzędzia do debugowania mogły odpowiednio działać. Element struktury i wartości są zdefiniowane w ten sposób: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 */ }
Poprzednie opcje brandingu w sekcji
.note.ABI-tag
zostały wycofane. - Dodaliśmy nowy skrypt
run-tests-all.sh
, który wywołuje funkcjerun-tests.sh
istandalone/run.sh
z różnymi warunkami. Skryptrun-tests.sh
jest uruchamiany bez opcji--abi
i został rozszerzony, aby kompilować większość testów dla wszystkich obsługiwanych interfejsów ABI i uruchamiać je na wszystkich podłączonych urządzeniach.
- Usunięto nagłówki
Android NDK r8b (lipiec 2012)
Główne funkcje tej wersji to nowy łańcuch narzędzi GNU Compiler Collection (GCC) 4.6 i GNU Debugger (GDB) 7.3.x, który dodaje obsługę debugowania obrazu systemu Android 4.1 (poziom interfejsu API 16).
- Ważne poprawki błędów:
-
- Rozwiązano
LOCAL_SHORT_COMMANDS
problemy w środowiskach Mac OS i Windows Cygwin w przypadku bibliotek statycznych. Generowanie pliku listy jest szybsze i nie jest on ponownie generowany, aby uniknąć wielokrotnego ponownego tworzenia projektu. - Rozwiązano kilka problemów w
ndk-gdb
:- Zaktualizowaliśmy narzędzie, aby przekazywać flagi
-e
,-d
i-s
do adb w bardziej spójny sposób. - Zaktualizowaliśmy narzędzie, aby akceptowało nazwy seryjne urządzeń zawierające spacje.
- Zaktualizowane narzędzie do pobierania informacji o
/system/bin/link
, dzięki czemugdb
na hoście może ustawić punkt przerwania w__dl_rtld_db_dlactivity
i być na bieżąco z aktywnością linkera (np. ponowne skanowanie symbolisolib
po wywołaniudlopen()
).
- Zaktualizowaliśmy narzędzie, aby przekazywać flagi
- Naprawiono
ndk-build clean
w systemie Windows, które nie usuwało./libs/*/lib*.so
. - Poprawiliśmy funkcję
ndk-build.cmd
, aby zwracała wartośćERRORLEVEL
różną od zera, gdy funkcjamake
zawodzi. - Naprawiliśmy
libc.so
, aby zapobiec nieprawidłowemu eksportowaniu symboli__exidx_start
i__exidx_end
. - Rozwiązaliśmy problem z
SEGV
podczas cofania stosu poza__libc_init
w przypadku ARM i MIPS.
- Rozwiązano
- Ważne zmiany:
-
- Dodano zestaw narzędzi GCC 4.6 (
binutils
2.21 zgold
i GDB 7.3.x), który może działać równolegle z oryginalnym zestawem narzędzi GCC 4.4.3 (binutils
2.19 i GDB 6.6).- GCC 4.6 jest teraz domyślnym łańcuchem narzędzi. Możesz ustawić
NDK_TOOLCHAIN_VERSION=4.4.3
wApplication.mk
, aby wybrać oryginalną. - Obsługa linkera
gold
jest dostępna tylko w przypadku architektur ARM i x86 w systemach Linux i Mac OS. Ta funkcja jest domyślnie wyłączona. Aby włączyć tę funkcję, dodajLOCAL_LDLIBS += -fuse-ld=gold
wAndroid.mk
. - Programy skompilowane za pomocą
-fPIE
wymagają nowegoGDB
do debugowania, w tym plików binarnych w obrazach systemu Android 4.1 (poziom API 16). - Narzędzie
binutils
2.21ld
zawiera poprawki przeniesione z wersji 2.22:- Naprawiono
ld --gc-sections
, która nieprawidłowo zachowuje nieużywane odwołania do bibliotek zewnętrznych. (więcej informacji). - Poprawiono polecenie stałego ARM
strip
, aby zachować oryginalnep_align
ip_flags
w sekcjiGNU_RELRO
, jeśli są prawidłowe. Bez tej poprawki nie można debugować programów utworzonych za pomocą-fPIE
. (więcej informacji)
- Naprawiono
- Wyłączona optymalizacja
sincos()
ze względu na zgodność ze starszymi platformami.
- GCC 4.6 jest teraz domyślnym łańcuchem narzędzi. Możesz ustawić
- Zaktualizowano opcje kompilacji, aby domyślnie włączać bit Never eXecute (NX) i zabezpieczenia
relro
/bind_now
:- Dodano
--noexecstack
do asemblera i-z noexecstack
do linkera, co zapewnia ochronę NX przed atakami typu buffer overflow przez włączenie bitu NX na stosie i stercie. - Dodano atrybuty
-z relro
i-z now
do linkera, aby wzmocnić wewnętrzne sekcje danych po połączeniu i chronić przed lukami w zabezpieczeniach spowodowanymi uszkodzeniem pamięci. (więcej informacji: 1,2) - Te funkcje można wyłączyć za pomocą tych opcji:
- Wyłącz ochronę NX, ustawiając opcję
--execstack
dla asemblera i-z execstack
dla linkera. - Wyłącz wzmacnianie danych wewnętrznych, ustawiając opcje
-z norelro
i-z lazy
dla linkera. - Wyłącz te zabezpieczenia w NDK
jni/Android.mk
, ustawiając te opcje:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Więcej informacji znajdziesz w sekcji
docs/ANDROID-MK.html
. - Wyłącz ochronę NX, ustawiając opcję
- Dodano
- Dodano branding plików wykonywalnych Androida w sekcji
.note.ABI-tag
(wcrtbegin_static/dynamic.o
), aby narzędzia do debugowania mogły odpowiednio działać. Element struktury i wartości są zdefiniowane w ten sposób: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 */ }
- Dodano zestaw narzędzi GCC 4.6 (
- Inne poprawki błędów:
-
- Rozwiązaliśmy problem z obcinaniem przeniesienia
mips-linux-gnu
, aby dopasować je doR_MIPS_TLS_LDM
. (więcej informacji) - Naprawiono błąd segmentacji narzędzia
ld
podczas używania--gc-sections
. (więcej informacji) - Rozwiązaliśmy problem z liczeniem MIPS
GOT_PAGE
. (więcej informacji) - Naprawiono link do symbolu ostrzeżenia o obserwowaniu w przypadku
mips_elf_count_got_symbols
. - Naprawiono link do symbolu ostrzeżenia o obserwowaniu w przypadku
mips_elf_allocate_lazy_stub
. - Przeniesiono MIPS
.dynamic
do segmentu danych, aby można było go zapisywać. - Zastąpiliśmy zakodowane na stałe wartości symboli prawidłowymi rozmiarami segmentów dla MIPS.
- Usunięto opcję
-mno-shared
z domyślnych ustawień w zestawie narzędzi MIPS. Domyślna wartość dla łańcucha narzędzi Androida to-fPIC
(lub-fpic
, jeśli jest obsługiwana). Jeśli nie określisz wyraźnie-mshared
,-fpic
,-fPIC
,-fpie
ani-fPIE
, kompilator MIPS doda-mno-shared
, które wyłączy PIC. Poprawiono kompilator, aby w tym przypadku nie dodawał znaku-mno-shared
. - Poprawiono nieprawidłowe nazwy pakietów w przykładach
hello-jni
itwo-libs
, aby można było skompilować projekttests
.
- Rozwiązaliśmy problem z obcinaniem przeniesienia
- Inne zmiany:
-
- Zmieniono lokalizacje plików binarnych:
- Przeniesiono
gdbserver
ztoolchain/<arch-os-ver>/prebuilt/gdbserver
doprebuilt/android-<arch>/gdbserver/gdbserver
. - Zmieniono prefiks łańcucha narzędzi x86 z
i686-android-linux-
nai686-linux-android-
. - Przeniesiono
sources/cxx-stl/gnu-libstdc++/include
ilib
dosources/cxx-stl/gnu-libstdc++/4.6
podczas kompilacji za pomocą GCC 4.6 lubsources/cxx-stl/gnu-libstdc++/4.4.3
podczas kompilacji za pomocą GCC 4.4.3. - Przeniesiono
libbfd.a
ilibintl.a
zlib/
dolib32/
.
- Przeniesiono
- Dodano i ulepszono różne skrypty w narzędziu do ponownego tworzenia i testowania łańcucha narzędzi NDK:
- Dodano
build-mingw64-toolchain.sh
, aby wygenerować nowy łańcuch narzędzi hostowany w systemie Linux, który generuje pliki wykonywalne Win32 i Win64. - Zwiększono szybkość
download-toolchain-sources.sh
dzięki użyciu poleceniaclone
i używaniu tylkocheckout
w przypadku katalogów potrzebnych do utworzenia plików binarnych łańcucha narzędzi NDK. - Dodano skrypty
build-host-gcc.sh
ibuild-host-gdb.sh
. - Dodano
tests/check-release.sh
, aby sprawdzić zawartość danego katalogu instalacyjnego NDK lub istniejącego pakietu NDK. - Przeredagowaliśmy
tests/standalone/run.sh
testy samodzielne .
- Dodano
- Usunięto nagłówek
if_dl.h
ze wszystkich platform i architektur. ElementyAF_LINK
isockaddr_dl
, które opisuje, są specyficzne dla BSD (tzn. nie występują w systemie Linux).
- Zmieniono lokalizacje plików binarnych:
Android NDK r8 (maj 2012 r.)
Ta wersja NDK obsługuje interfejs MIPS ABI i zawiera kilka dodatkowych poprawek.
- Nowe funkcje:
-
- Dodano obsługę interfejsu ABI MIPS, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem opartych na architekturze MIPS. Główne funkcje MIPS obejmują łańcuchy narzędzi, nagłówki systemowe, biblioteki i obsługę debugowania specyficzne dla MIPS. Więcej informacji o obsłudze MIPS znajdziesz w
docs/CPU-MIPS.html
w pakiecie NDK.Domyślnie kod jest generowany dla urządzeń z procesorami ARM. Możesz dodać
mips
do definicjiAPP_ABI
w plikuApplication.mk
, aby utworzyć wersję na platformy MIPS. Na przykład ten wiersz polecandk-build
skompilowanie kodu dla 3 różnych interfejsów ABI:APP_ABI := armeabi armeabi-v7a mips
Jeśli nie korzystasz ze źródeł asemblera specyficznych dla architektury, takich jak kod asemblera ARM, nie musisz modyfikować plików
Android.mk
, aby utworzyć kod maszynowy MIPS. - Samodzielny łańcuch narzędzi MIPS możesz utworzyć za pomocą opcji
--arch=mips
podczas wywoływaniamake-standalone-toolchain.sh
. Więcej informacji znajdziesz w sekcjidocs/STANDALONE-TOOLCHAIN.html
.
Uwaga: aby mieć pewność, że aplikacje są dostępne dla użytkowników tylko wtedy, gdy ich urządzenia są w stanie je uruchomić, Google Play filtruje aplikacje na podstawie informacji o zestawie instrukcji zawartych w aplikacji. Aby włączyć filtrowanie, nie musisz nic robić. System Android sprawdza też aplikację w momencie instalacji i umożliwia jej kontynuowanie tylko wtedy, gdy aplikacja zawiera bibliotekę skompilowaną pod kątem architektury procesora urządzenia.
- Dodano obsługę interfejsu ABI MIPS, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem opartych na architekturze MIPS. Główne funkcje MIPS obejmują łańcuchy narzędzi, nagłówki systemowe, biblioteki i obsługę debugowania specyficzne dla MIPS. Więcej informacji o obsłudze MIPS znajdziesz w
- Ważne poprawki błędów:
-
- Naprawiono błąd w implementacji GAbi++, w którym wynik
dynamic_cast<D>(b)
obiektu klasy bazowejb
do klasy pochodnejD
jest nieprawidłowo dostosowywany w kierunku przeciwnym do klasy bazowej. (Problem 28721) - Rozwiązaliśmy problem, który powodował, że
make-standalone-toolchain.sh
nie kopiowałolibsupc++.*
.
- Naprawiono błąd w implementacji GAbi++, w którym wynik
- Inne poprawki błędów:
-
- Poprawiono
ndk-build.cmd
, aby zapewnić prawidłowe działaniendk-build.cmd
nawet wtedy, gdy użytkownik ponownie zdefiniował zmienną środowiskowąSHELL
, która może ulec zmianie podczas instalowania różnych narzędzi deweloperskich w środowiskach Windows.
- Poprawiono
Android NDK r7c (kwiecień 2012 r.)
Ta wersja NDK zawiera ważną poprawkę dla urządzeń z procesorem Tegra 2 oraz kilka dodatkowych poprawek i ulepszeń:
- Ważne poprawki błędów:
-
- Naprawiliśmy błąd, który powodował, że pliki binarne GNU STL armeabi-v7a ulegały awarii na urządzeniach bez NEON. Pliki dostarczone z NDK r7b nie były prawidłowo skonfigurowane, co powodowało awarie na urządzeniach z procesorem Tegra 2 i innych podczas próby użycia niektórych funkcji zmiennoprzecinkowych (np.
cosf
,sinf
,expf
).
- Naprawiliśmy błąd, który powodował, że pliki binarne GNU STL armeabi-v7a ulegały awarii na urządzeniach bez NEON. Pliki dostarczone z NDK r7b nie były prawidłowo skonfigurowane, co powodowało awarie na urządzeniach z procesorem Tegra 2 i innych podczas próby użycia niektórych funkcji zmiennoprzecinkowych (np.
- Ważne zmiany:
-
- Dodaliśmy obsługę niestandardowych katalogów wyjściowych za pomocą zmiennej środowiskowej
NDK_OUT
. Po zdefiniowaniu ta zmienna służy do przechowywania wszystkich wygenerowanych plików pośrednich zamiast$PROJECT_PATH/obj
. Zmienna jest też rozpoznawana przezndk-gdb
. - Dodaliśmy obsługę tworzenia modułów zawierających setki, a nawet tysiące plików źródłowych przez zdefiniowanie
LOCAL_SHORT_COMMANDS
natrue
w plikuAndroid.mk
.Ta zmiana wymusza umieszczanie przez system kompilacji NDK większości opcji linkera lub archiwizatora w plikach list, co pozwala obejść ograniczenia długości wiersza poleceń. Więcej informacji znajdziesz w sekcji
docs/ANDROID-MK.html
.
- Dodaliśmy obsługę niestandardowych katalogów wyjściowych za pomocą zmiennej środowiskowej
- Inne poprawki błędów:
-
- Poprawiono implementację
android_getCpuCount()
wcpufeatures
bibliotece pomocniczej. Na niektórych urządzeniach, na których rdzenie są włączane dynamicznie przez system, poprzednia implementacja zgłaszała łączną liczbę aktywnych rdzeni przy pierwszym wywołaniu funkcji, a nie łączną liczbę fizycznie dostępnych rdzeni.
- Poprawiono implementację
Android NDK r7b (luty 2012)
Ta wersja NDK zawiera poprawki dotyczące natywnych kompilacji w systemie Windows, Cygwin i wiele innych ulepszeń:
- Ważne poprawki błędów:
-
- Zaktualizowano
sys/atomics.h
, aby uniknąć problemów z poprawnością na niektórych urządzeniach wielordzeniowych z procesorami ARM. Ponownie skompiluj niezmodyfikowane źródła za pomocą tej wersji NDK, a problem powinien zostać całkowicie wyeliminowany. Więcej informacji znajdziesz w sekcjidocs/ANDROID-ATOMICS.html
. - Przywrócono wersję
binutils
2.19, aby rozwiązać problemy z debugowaniem, które pojawiły się w NDK r7 (przełączono na wersjębinutils
2.20.1). - Naprawiono
ndk-build
w 32-bitowym systemie Linux. Błąd w pakiecie spowodował, że 64-bitowa wersja pliku wykonywalnegoawk
w NDK r7 znalazła się w folderzeprebuilt/linux-x86/bin
. - Naprawiono natywną kompilację Windows (
ndk-build.cmd
). Inne tryby kompilacji nie zostały zmienione. Rozwiązania obejmują:- Usunięto błąd nieskończonej pętli lub przepełnienia stosu, który występował podczas próby wywołania funkcji
ndk-build.cmd
z katalogu, który nie był na początku ścieżki projektu (np. w dowolnym podkatalogu). - Rozwiązaliśmy problem polegający na tym, że automatycznie generowane pliki zależności były ignorowane. Oznaczało to, że aktualizacja pliku nagłówkowego nie powodowała ponownej kompilacji źródeł, które go zawierały.
- Rozwiązaliśmy problem polegający na tym, że znaki specjalne w plikach lub ścieżkach inne niż spacje i cudzysłowy nie były prawidłowo obsługiwane.
- Usunięto błąd nieskończonej pętli lub przepełnienia stosu, który występował podczas próby wywołania funkcji
- Naprawiliśmy samodzielny łańcuch narzędzi, aby generował prawidłowe pliki binarne podczas używania
-lstdc++
(czyli łączenia z biblioteką wykonawczą GNUlibstdc++
C++). Użyj-lgnustl_shared
, jeśli chcesz połączyć się z wersją biblioteki współdzielonej, lub-lstdc++
, jeśli chcesz połączyć się z wersją statyczną.Więcej informacji o tym rozwiązaniu znajdziesz w
docs/STANDALONE-TOOLCHAIN.html
. - Naprawiono
gnustl_shared
w Cygwinie. Linker zgłosił, że nie może znaleźć plikulibsupc++.a
, mimo że znajdował się on we właściwej lokalizacji. - Naprawiono link do Cygwin C++, gdy nie używasz żadnego konkretnego środowiska wykonawczego C++ przez
APP_STL
.
- Zaktualizowano
- Inne zmiany:
-
- Gdy aplikacja korzysta ze środowiska wykonawczego GNU
libstdc++
, kompilator nie będzie już wymuszać włączania wyjątków i RTTI. Ta zmiana powoduje zmniejszenie rozmiaru kodu.Jeśli potrzebujesz tych funkcji, musisz wykonać jedną z tych czynności:
- Włącz jawnie wyjątki lub RTTI w modułach lub
Application.mk
. (zalecane) - Określ
APP_GNUSTL_FORCE_CPP_FEATURES
,'exceptions'
,'rtti'
lub obie te opcje wApplication.mk
. Więcej informacji znajdziesz w sekcjidocs/APPLICATION-MK.html
.
- Włącz jawnie wyjątki lub RTTI w modułach lub
ndk-gdb
działa teraz prawidłowo, gdy aplikacja ma usługi prywatne działające w niezależnych procesach. Debuguje główny proces aplikacji, a nie pierwszy proces wymieniony przezps
, który zwykle jest procesem usługi.- Naprawiliśmy rzadki błąd, który powodował, że NDK r7 nie uwzględniał
LOCAL_ARM_MODE
wartości i zawsze kompilował niektóre (ale nie wszystkie) pliki źródłowe do instrukcji 32-bitowych. STLport
: odśwież źródła, aby były zgodne z wersją platformy Android. Ta aktualizacja naprawia kilka drobnych błędów:- Naprawiono tworzenie instancji niekompletnego typu
- Poprawiono drobny błąd w pisowni „==” zamiast „=”
- Użyto
memmove
zamiastmemcpy
wstring::assign
- Dodano lepszą obsługę znaków
IsNANorINF
,IsINF
,IsNegNAN
itp.
Szczegółowe informacje znajdziesz w dzienniku zatwierdzeń.
STLport
: usunięto z biblioteki 5 niepotrzebnych statycznych inicjatorów.- Biblioteki GNU libstdc++ dla architektury armeabi-v7a zostały omyłkowo skompilowane dla architektury armeabi. Ta zmiana nie miała wpływu na poprawność, ale używanie odpowiedniego interfejsu ABI powinno zapewnić nieco lepszą wydajność.
- Biblioteka pomocnicza
cpu-features
została zaktualizowana, aby raportować 3 opcjonalne funkcje procesora x86 (SSSE3
,MOVBE
iPOPCNT
). Więcej informacji znajdziesz wdocs/CPU-FEATURES.html
. - Zaktualizowano informację o tym, że zamiast
NDK_APP_APPLICATION_MK
należy wybraćNDK_APPLICATION_MK
, aby wybrać niestandardowy plikApplication.mk
.docs/NDK-BUILD.html
- Cygwin:
ndk-build
nie tworzy już pustego pliku „NUL” w bieżącym katalogu po wywołaniu. - Cygwin: dodaliśmy lepsze automatyczne wykrywanie zależności. W poprzedniej wersji nie działał prawidłowo w tych przypadkach:
- Gdy prefiks dysku Cygwin nie był
/cygdrive
. - Na przykład w przypadku używania dysków bez liter, gdy Cygwin tłumaczy
/home
na\\server\subdir
zamiast naC:\Some\Dir
.
- Gdy prefiks dysku Cygwin nie był
- Cygwin:
ndk-build
nie próbuje używać natywnych narzędzi Windows w$NDK/prebuilt/windows/bin
w przypadku niektórych wersji Cygwin lub GNU Make.
- Gdy aplikacja korzysta ze środowiska wykonawczego GNU
Android NDK r7 (listopad 2011 r.)
Ta wersja NDK zawiera nowe funkcje obsługujące platformę Android 4.0, a także wiele innych dodatków i ulepszeń:
- Nowe funkcje
-
- Dodano oficjalne interfejsy NDK API dla Androida 4.0 (poziom interfejsu API 14), które dodają do platformy te funkcje natywne:
- Dodano natywny interfejs API multimediów oparty na standardzie Khronos Group OpenMAX AL 1.0.1. Nowe nagłówki
<OMXAL/OpenMAXAL.h>
i<OMXAL/OpenMAXAL_Android.h>
umożliwiają aplikacjom korzystającym z interfejsu API na poziomie 14 bezpośrednie odtwarzanie multimediów z kodu natywnego za pomocą nowego interfejsu kolejki buforów specyficznego dla Androida. Więcej informacji znajdziesz na stronachdocs/openmaxal/index.html
i http://www.khronos.org/openmax/. - Zaktualizowano natywny interfejs API audio na podstawie standardu Khronos Group OpenSL ES 1.0.1. Na poziomie API 14 możesz teraz dekodować skompresowany dźwięk (np. MP3, AAC, Vorbis) do PCM. Więcej informacji znajdziesz na stronach
docs/opensles/index.html
i http://www.khronos.org/opensles/.
- Dodano natywny interfejs API multimediów oparty na standardzie Khronos Group OpenMAX AL 1.0.1. Nowe nagłówki
- Dodaliśmy obsługę CCache. Aby przyspieszyć duże przebudowy, zdefiniuj zmienną środowiskową
NDK_CCACHE
jakoccache
(lub ścieżkę do pliku binarnegoccache
). Po zadeklarowaniu system kompilacji NDK automatycznie używa CCache podczas kompilowania dowolnego pliku źródłowego. Na przykład:export NDK_CCACHE=ccache
Uwaga: CCache nie jest uwzględniony w wersji NDK, więc musisz go zainstalować przed użyciem. Więcej informacji o CCache znajdziesz na stronie http://ccache.samba.org.
- Dodano obsługę ustawienia
APP_ABI
naall
, aby wskazać, że chcesz utworzyć moduły NDK dla wszystkich interfejsów ABI obsługiwanych przez daną wersję NDK. Oznacza to, że w tej wersji równoważne są te 2 wiersze wApplication.mk
:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Działa to również w przypadku zdefiniowania
APP_ABI
podczas wywoływaniandk-build
z wiersza poleceń. Jest to szybki sposób na sprawdzenie, czy projekt jest kompilowany dla wszystkich obsługiwanych interfejsów ABI bez zmianyApplication.mk file
projektu. Na przykład:ndk-build APP_ABI=all
- Dodano zmienną
LOCAL_CPP_FEATURES
wAndroid.mk
, która umożliwia zadeklarowanie, z których funkcji C++ (RTTI lub Exceptions) korzysta Twój moduł. Dzięki temu końcowe łączenie będzie działać prawidłowo, jeśli masz gotowe moduły, które zależą od tych funkcji. Więcej informacji znajdziesz w sekcjachdocs/ANDROID-MK.html
idocs/CPLUSPLUS-SUPPORT.html
. - Skrócone ścieżki do plików źródłowych i obiektów używanych w poleceniach kompilacji. Podczas wywoływania
$NDK/ndk-build
ze ścieżki projektu ścieżki do plików źródłowych, obiektowych i binarnych przekazywane do poleceń kompilacji są teraz znacznie krótsze, ponieważ są przekazywane względem bieżącego katalogu. Jest to przydatne podczas tworzenia projektów z wieloma plikami źródłowymi, aby uniknąć ograniczeń maksymalnej długości wiersza poleceń obsługiwanej przez system operacyjny hosta. Działanie pozostaje bez zmian, jeśli wywołasz poleceniendk-build
z podkatalogu drzewa projektu lub jeśli zdefiniujesz zmiennąNDK_PROJECT_PATH
tak, aby wskazywała określony katalog.
- Dodano oficjalne interfejsy NDK API dla Androida 4.0 (poziom interfejsu API 14), które dodają do platformy te funkcje natywne:
- Funkcje eksperymentalne
-
Możesz teraz tworzyć pliki źródłowe NDK w systemie Windows bez Cygwina, wywołując skrypt
ndk-build.cmd
z wiersza poleceń w ścieżce projektu. Skrypt przyjmuje dokładnie te same argumenty co oryginalny skryptndk-build
. Pakiet Windows NDK zawiera własne wstępnie skompilowane pliki binarne dla GNU Make, Awk i innych narzędzi wymaganych przez kompilację. Aby uzyskać działający system kompilacji, nie musisz niczego instalować.Ważne:
ndk-gdb
nie działa w systemie Windows, więc do debugowania nadal potrzebujesz Cygwin.Ta funkcja jest nadal w fazie eksperymentalnej, więc możesz ją wypróbować i zgłosić problemy w publicznej bazie błędów lub na publicznym forum. Wszystkie przykłady i testy jednostkowe dostarczone z NDK są kompilowane bez błędów przy użyciu tej funkcji.
- Ważne poprawki błędów
-
- Zaimportowane komponenty wspólne są teraz domyślnie instalowane w miejscu docelowym (
libs/<abi>
), jeśli w plikuApplication.mk
nie zdefiniowanoAPP_MODULES
. Jeśli na przykład moduł najwyższego poziomufoo
importuje modułbar
, to zarównolibfoo.so
, jak ilibbar.so
są kopiowane do lokalizacji instalacji. Wcześniej kopiowano tylkolibfoo.so
, chyba że wAPP_MODULES
podano teżbar
. Jeśli zdefiniujeszAPP_MODULES
, działanie pozostanie bez zmian. ndk-gdb
działa teraz prawidłowo w przypadku działań z wieloma kategoriami w filtrach intencji MAIN.- Importy bibliotek statycznych są teraz prawidłowo przechodnie. Jeśli na przykład moduł najwyższego poziomu
foo
importuje bibliotekę statycznąbar
, która importuje bibliotekę statycznązoo
, modułlibfoo.so
będzie teraz połączony z bibliotekamilibbar.a
ilibzoo.a
.
- Zaimportowane komponenty wspólne są teraz domyślnie instalowane w miejscu docelowym (
- Inne zmiany
-
docs/NATIVE-ACTIVITY.HTML
: Poprawiono błąd pisowni. Minimalny poziom interfejsu API w przypadku działań natywnych powinien wynosić 9, a nie 8.docs/STABLE-APIS.html
: dodaliśmy brakującą dokumentację, w której EGL jest wymieniony jako obsługiwany stabilny interfejs API od poziomu 9.download-toolchain-sources.sh
: Zaktualizowano, aby pobierać źródła łańcucha narzędzi z android.googlesource.com, czyli nowej lokalizacji serwerów AOSP.- Dodano nowy środowisko wykonawcze obsługi C++ o nazwie
gabi++
. Więcej informacji na ten temat znajdziesz w zaktualizowanychdocs/CPLUSPLUS-SUPPORT.html
. - Dodaliśmy nowe środowisko wykonawcze obsługi C++ o nazwie
gnustl_shared
, które odpowiada wersji biblioteki współdzielonej GNU libstdc++ v3 (licencja GPLv3). Więcej informacji znajdziesz na stronie:docs/CPLUSPLUS-SUPPORT.html
- Dodaliśmy obsługę RTTI w środowiskach wykonawczych STLport C++ (bez obsługi wyjątków).
- Dodaliśmy obsługę wielu rozszerzeń plików w
LOCAL_CPP_EXTENSION
. Aby na przykład skompilować plikifoo.cpp
ibar.cxx
jako źródła C++, zadeklaruj:LOCAL_CPP_EXTENSION := .cpp .cxx
- Usunięto wiele niepotrzebnych wyeksportowanych symboli z udostępnianych w czasie łączenia bibliotek systemowych dostarczanych przez NDK. Dzięki temu kod wygenerowany za pomocą samodzielnego łańcucha narzędzi nie będzie przypadkowo zależeć od niestabilnego symbolu ABI (np.dowolnego symbolu libgcc. a, który zmienia się za każdym razem, gdy zmienia się łańcuch narzędzi używany do tworzenia platformy).
- Zaktualizowaliśmy nagłówki EGL i OpenGLES Khronos, aby obsługiwały więcej rozszerzeń. Pamiętaj, że nie zmienia to interfejsów ABI NDK dla odpowiednich bibliotek, ponieważ każda rozszerzenie musi być sprawdzane w czasie działania przez aplikację klienta.
Dostępne rozszerzenia zależą od rzeczywistego urządzenia i sterowników GPU, a nie od wersji platformy, na której działa urządzenie. Zmiany w nagłówku po prostu dodają nowe stałe i typy, aby ułatwić korzystanie z rozszerzeń po ich sprawdzeniu za pomocą
eglGetProcAddress()
lubglGetProcAddress()
. Na liście poniżej znajdziesz nowo obsługiwane rozszerzenia:- 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 (sierpień 2011)
Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją r6. Wersja r6b rozwiązuje te problemy z wersji r6:
- Ważne poprawki błędów
-
- Naprawiono kompilację, gdy w przypadku kompilacji wieloarchitekturowych użyto
APP_ABI="armeabi x86"
. - Naprawiliśmy lokalizację gotowych plików binarnych STLport w pakiecie NDK. Błąd w skrypcie pakującym spowodował umieszczenie ich w niewłaściwym miejscu.
- Stałe użycie
atexit()
w bibliotekach udostępnionych z zestawem narzędzi x86standalone. - Stała
make-standalone-toolchain.sh --arch=x86
Nie udało się skopiować odpowiednich plików binarnych GNU libstdc++ do właściwej lokalizacji. - Usunięto ostrzeżenia linkera samodzielnego łańcucha narzędzi dotyczące braku definicji i rozmiaru symbolu
__dso_handle
(tylko ARM). - Naprawiono kolejność włączenia
$(SYSROOT)/usr/include
w przypadku kompilacji x86. Więcej informacji znajdziesz w raporcie o błędzie. - Poprawiono definicje parametrów
ptrdiff_t
isize_t
w systemach x86, gdy są one używane z samodzielnym łańcuchem narzędzi x86.
- Naprawiono kompilację, gdy w przypadku kompilacji wieloarchitekturowych użyto
Android NDK r6 (lipiec 2011 r.)
Ta wersja NDK obsługuje interfejs x86 ABI i zawiera inne drobne zmiany.
Szczegółowe informacje o zmianach wprowadzonych w tej wersji znajdziesz w CHANGES.HTML
dokumencie dołączonym do pakietu NDK.
- Uwagi ogólne:
-
- Dodaje obsługę interfejsu x86 ABI, który umożliwia generowanie kodu maszynowego
działającego na zgodnych urządzeniach z Androidem z procesorem x86. Główne funkcje dla x86 obejmują łańcuchy narzędzi, nagłówki systemowe, biblioteki i obsługę debugowania. Wszystkie szczegóły dotyczące obsługi x86 znajdziesz w
docs/CPU-X86.html
w pakiecie NDK.Domyślnie kod jest generowany dla urządzeń z procesorem ARM, ale możesz dodać x86 do definicji
APP_ABI
w plikuApplication.mk
, aby tworzyć kompilacje dla platform x86. Na przykład ten wiersz polecandk-build
skompilowanie kodu dla 3 różnych interfejsów ABI:APP_ABI := armeabi armeabi-v7a x86
Jeśli nie korzystasz ze źródeł asemblera opartych na architekturze ARM, nie musisz modyfikować plików
Android.mk
, aby utworzyć kod maszynowy x86. - Samodzielny łańcuch narzędzi x86 możesz utworzyć za pomocą opcji
--toolchain=x86-4.4.3
podczas wywoływaniamake-standalone-toolchain.sh
. Więcej informacji znajdziesz w sekcjidocs/STANDALONE-TOOLCHAIN.html
. - Nowe narzędzie
ndk-stack
umożliwia tłumaczenie śladów stosu w językulogcat
generowanych przez kod natywny. Narzędzie tłumaczy adresy instrukcji na czytelny format, który zawiera takie informacje jak funkcja, plik źródłowy i numer wiersza odpowiadający każdej ramce stosu. Więcej informacji i przykład użycia znajdziesz w sekcjidocs/NDK-STACK.html
.
- Dodaje obsługę interfejsu x86 ABI, który umożliwia generowanie kodu maszynowego
działającego na zgodnych urządzeniach z Androidem z procesorem x86. Główne funkcje dla x86 obejmują łańcuchy narzędzi, nagłówki systemowe, biblioteki i obsługę debugowania. Wszystkie szczegóły dotyczące obsługi x86 znajdziesz w
- Inne zmiany:
arm-eabi-4.4.0
, która została wycofana w NDK r5, została usunięta z dystrybucji NDK.
Android NDK r5c (czerwiec 2011)
Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją r5b. Wersja r5c rozwiązuje te problemy z wersji r5b:
- Ważne poprawki błędów:
-
ndk-build
: Naprawiono rzadki błąd, który pojawiał się podczas próby równoległego tworzenia projektów z możliwością debugowania.- Naprawiliśmy błąd w pisowni, który uniemożliwiał prawidłowe działanie
LOCAL_WHOLE_STATIC_LIBRARIES
w nowym łańcuchu narzędzi, i dodaliśmy dokumentację tego elementu wdocs/ANDROID-MK.html
. - Naprawiono błąd, który powodował awarię kodu połączonego z
gnustl_static
, gdy był on uruchamiany na platformach w wersjach starszych niż poziom interfejsu API 8 (Android 2.2). ndk-gdb
: Naprawiono błąd, który powodował błąd segmentacji podczas debugowania urządzeń z Androidem 3.0 lub nowszym.<android/input.h>
: dwie funkcje wprowadzone na poziomie API 9 (Android 2.3) były nieprawidłowe i zostały poprawione. Chociaż powoduje to przerwanie działania interfejsu API źródła, interfejs binarny systemu pozostaje bez zmian. W nieprawidłowych funkcjach brakowało parametruhistory_index
, a prawidłowe definicje są podane poniżej: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);
- Zaktualizowano binarny plik ARM biblioteki C dla poziomu API 9 (Android 2.3), aby prawidłowo udostępniać w czasie łączenia nowe funkcje dodane na tym poziomie API (np.
pthread_rwlock_init
).
- Drobne ulepszenia i poprawki:
-
- Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej pojawiają się w
LOCAL_SRC_FILES
. Wcześniej tak nie było, ponieważ pliki były grupowane według rozszerzeń źródłowych. - Gdy
import-module
nie działa, wyświetla teraz listę przeszukanych katalogów. Jest to przydatne do sprawdzenia, czy definicjaNDK_MODULE_PATH
używana przez system kompilacji jest prawidłowa. - Gdy
import-module
się powiedzie, w logu zostanie wydrukowany katalog, w którym znaleziono moduł (widoczny w przypadkuNDK_LOG=1
). - Zwiększono szybkość kompilacji aplikacji z możliwością debugowania, gdy w projekcie jest bardzo duża liczba katalogów dołączanych.
ndk-gdb
: lepsze wykrywanie awariiadb shell
i ulepszone komunikaty o błędach.<pthread.h>
: poprawiono definicjęPTHREAD_RWLOCK_INITIALIZER
dla interfejsu API na poziomie 9 (Android 2.3) i wyższym.- Rozwiązaliśmy problem, który powodował, że moduł mógł importować sam siebie, co prowadziło do nieskończonej pętli w GNU Make.
- Naprawiliśmy błąd, który powodował niepowodzenie kompilacji, jeśli wartość
LOCAL_ARM_NEON
była ustawiona na true (literówka wbuild/core/build-binary.mk
). - Usunęliśmy błąd, który uniemożliwiał kompilację plików asemblera
.s
(pliki.S
działały prawidłowo).
- Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej pojawiają się w
Android NDK r5b (styczeń 2011)
Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją r5. Wersja r5b rozwiązuje następujące problemy występujące w wersji r5:
- Pliki binarne r5 wymagały glibc w wersji 2.11, ale pliki binarne r5b są generowane za pomocą specjalnego łańcucha narzędzi, który jest przeznaczony dla glibc w wersji 2.7 lub nowszej. Pliki binarne łańcucha narzędzi Linux działają teraz w systemie Ubuntu 8.04 lub nowszym.
- Naprawia błąd kompilatora w zestawie narzędzi arm-linux-androideabi-4.4.3. Poprzedni plik binarny generował nieprawidłowe sekwencje instrukcji thumb podczas pracy ze znakami ze znakiem.
- Dodaje brakującą dokumentację wartości „gnustl_static” dla APP_STL, która umożliwia łączenie ze statyczną wersją biblioteki GNU libstdc++. co
- Rozwiązano te
ndk-build
problemy:- Błąd, który powodował tworzenie niespójnych plików zależności, gdy w systemie Windows występował błąd kompilacji. Uniemożliwiało to prawidłowe skompilowanie projektu po usunięciu błędu w kodzie źródłowym.
- Błąd specyficzny dla Cygwina, w którym użycie bardzo krótkich ścieżek do instalacji Android NDK lub ścieżki projektu powodowało generowanie nieprawidłowych plików zależności. To uniemożliwiało przyrostowe kompilacje.
- Błąd w pisowni, który uniemożliwiał prawidłowe działanie biblioteki cpufeatures w nowym łańcuchu narzędzi NDK.
- Kompilacje w Cygwin są szybsze, ponieważ unikają wywołań
cygpath -m
z GNU Make dla każdego pliku źródłowego lub obiektu, co powodowało problemy w przypadku bardzo dużych drzew źródłowych. Jeśli to nie zadziała prawidłowo, zdefiniujNDK_USE_CYGPATH=1
w swoim środowisku, aby ponownie używaćcygpath -m
. - Instalator Cygwin powiadamia teraz użytkownika o nieprawidłowych ścieżkach instalacji, które zawierają spacje. Wcześniej nieprawidłowa ścieżka powodowała wyświetlanie błędu dotyczącego nieprawidłowej wersji GNU Make, nawet jeśli zainstalowana była właściwa wersja.
- Rozwiązaliśmy błąd w pisowni, który uniemożliwiał prawidłowe działanie zmiennej środowiskowej
NDK_MODULE_PATH
, gdy zawierała ona wiele katalogów oddzielonych dwukropkiem. - Skrypt
prebuilt-common.sh
zawiera poprawki, które sprawdzają kompilator pod kątem 64-bitowego kodu maszynowego, zamiast polegać na tagu hosta, co umożliwia prawidłowe ponowne kompilowanie 32-bitowego łańcucha narzędzi w systemie Snow Leopard. Skrypty ponownego kompilowania łańcucha narzędzi obsługują teraz też używanie 32-bitowego łańcucha narzędzi hosta. - Do
<netinet/in.h>
dodano brakującą deklarację dotyczącąINET_ADDRSTRLEN
. - Do domeny
<netinet/in6.h>
dodano brakujące deklaracje dotyczące domenIN6_IS_ADDR_MC_NODELOCAL
iIN6_IS_ADDR_MC_GLOBAL
. - W
<asm/byteorder.h>
zastąpiono „asm” ciągiem „__asm__”, aby umożliwić kompilację za pomocą-std=c99
.
Android NDK r5 (grudzień 2010 r.)
Ta wersja NDK zawiera wiele nowych interfejsów API, z których większość została wprowadzona, aby ułatwić tworzenie gier i podobnych aplikacji, które w dużym stopniu wykorzystują kod natywny. Dzięki interfejsom API programiści mają bezpośredni dostęp do zdarzeń, dźwięku, grafiki i zarządzania oknami, zasobów i pamięci. Deweloperzy mogą też zaimplementować cykl życia aplikacji na Androida w kodzie natywnym za pomocą nowej klasy NativeActivity
. Szczegółowe informacje o zmianach wprowadzonych w tej wersji znajdziesz w CHANGES.HTML
dokumencie dołączonym do pobranego pakietu NDK.
- Uwagi ogólne:
-
- Dodaje obsługę aktywności natywnych, co umożliwia implementację cyklu życia aplikacji na Androida w kodzie natywnym.
- Dodaje natywną obsługę tych funkcji:
- Podsystem wejściowy (np. klawiatura i ekran dotykowy)
- Dostęp do danych z czujników (akcelerometru, kompasu, żyroskopu itp.).
- interfejsy API pętli zdarzeń do oczekiwania na zdarzenia wejściowe i zdarzenia czujników;
- Podsystem okien i powierzchni
- Interfejsy API audio oparte na standardzie OpenSL ES, które obsługują odtwarzanie i nagrywanie, a także sterowanie efektami audio na platformie.
- Dostęp do komponentów spakowanych w pliku
.apk
.
- Zawiera nowy łańcuch narzędzi (oparty na GCC 4.4.3), który generuje lepszy kod i może być teraz używany jako samodzielny kompilator krzyżowy dla osób, które chcą tworzyć swoje projekty za pomocą
./configure && make
. Szczegóły znajdziesz w pliku docs/STANDALONE-TOOLCHAIN.html. Pliki binarne GCC 4.4.0 są nadal udostępniane, ale pliki binarne w wersji 4.2.1 zostały usunięte. - Dodaje obsługę wstępnie skompilowanych bibliotek statycznych i współdzielonych (docs/PREBUILTS.html) oraz eksportu i importu modułów, co znacznie ułatwia udostępnianie i ponowne wykorzystywanie modułów innych firm (wyjaśnienie znajdziesz w docs/IMPORT-MODULE.html).
- Udostępnia domyślną implementację C++ STL (opartą na STLport) jako moduł pomocniczy. Może być używana jako biblioteka statyczna lub współdzielona (szczegóły i przykłady użycia znajdziesz w pliku sources/android/stlport/README). Wstępnie skompilowane pliki binarne dla STLport (statyczne lub współdzielone) i GNU libstdc++ (tylko statyczne) są też udostępniane, jeśli zdecydujesz się skompilować je z użyciem tych bibliotek zamiast domyślnej implementacji C++ STL. Wyjątki C++ i RTTI nie są obsługiwane w domyślnej implementacji STL. Więcej informacji znajdziesz w pliku docs/CPLUSPLUS-SUPPORT.HTML.
- Zawiera ulepszenia biblioteki pomocniczej
cpufeatures
, które poprawiają raportowanie typu procesora (niektóre urządzenia wcześniej raportowały procesor ARMv7, mimo że w rzeczywistości był to procesor ARMv6). Deweloperom korzystającym z tej biblioteki zalecamy ponowne skompilowanie aplikacji, a następnie przesłanie jej do Google Play, aby mogli korzystać z wprowadzonych ulepszeń. - Dodaje bibliotekę EGL, która umożliwia tworzenie tekstur i usług OpenGL ES oraz zarządzanie nimi.
- Dodaje nowe przykładowe aplikacje
native-plasma
inative-activity
, aby pokazać, jak pisać aktywność natywną. - Zawiera wiele poprawek błędów i innych drobnych ulepszeń. Szczegółową listę zmian znajdziesz w pliku docs/CHANGES.html.
Android NDK r4b (czerwiec 2010)
- Uwagi dotyczące NDK r4b:
-
Zawiera poprawki kilku problemów w skryptach kompilacji i debugowania NDK. Jeśli używasz NDK r4, zalecamy pobranie kompilacji NDK r4b. Szczegółowe informacje o zmianach wprowadzonych w tej wersji znajdziesz w pliku CHANGES.TXT dołączonym do pobranego pakietu NDK.
- Uwagi ogólne:
-
- Udostępnia uproszczony system kompilacji za pomocą nowego polecenia
ndk-build
build. - Dodaje obsługę łatwego natywnego debugowania wygenerowanego kodu maszynowego na urządzeniach produkcyjnych za pomocą nowego polecenia
ndk-gdb
. - Dodaje nowy interfejs ABI specyficzny dla Androida w przypadku architektur procesora opartych na ARM,
armeabi-v7a
. Nowy interfejs ABI rozszerza istniejący interfejsarmeabi
ABI o te rozszerzenia zestawu instrukcji procesora:- Instrukcje Thumb-2
- Instrukcje sprzętowego procesora zmiennoprzecinkowego VFP (VFPv3-D16)
- Opcjonalna obsługa funkcji wewnętrznych GCC ARM Advanced SIMD (NEON) i VFPv3-D32. Obsługiwane przez urządzenia takie jak Verizon Droid by Motorola, Google Nexus One i inne.
- Dodaje nową
cpufeatures
bibliotekę statyczną (ze źródłami), która umożliwia aplikacji wykrywanie funkcji procesora urządzenia hosta w czasie działania. W szczególności aplikacje mogą sprawdzać obsługę ARMv7-A, a także VFPv3-D32 i NEON, a następnie w razie potrzeby udostępniać oddzielne ścieżki kodu. - Dodaje przykładową aplikację
hello-neon
, która pokazuje, jak używać bibliotekicpufeatures
do sprawdzania funkcji procesora, a następnie udostępniać zoptymalizowaną ścieżkę kodu z użyciem funkcji wewnętrznych NEON, jeśli procesor je obsługuje. - Umożliwia generowanie kodu maszynowego dla jednego lub obu zestawów instrukcji obsługiwanych przez NDK. Możesz na przykład tworzyć aplikacje jednocześnie dla architektur ARMv5 i ARMv7-A, a wszystkie pliki będą przechowywane w końcowym pliku
.apk
aplikacji. - Aby mieć pewność, że aplikacje są dostępne dla użytkowników tylko wtedy, gdy ich urządzenia są w stanie je uruchomić, Google Play filtruje teraz aplikacje na podstawie informacji o zestawie instrukcji zawartych w aplikacji. Aby włączyć filtrowanie, nie musisz nic robić. System Android również sprawdza aplikację w momencie instalacji i umożliwia jej kontynuowanie tylko wtedy, gdy aplikacja zawiera bibliotekę skompilowaną pod kątem architektury procesora urządzenia.
- Dodaje obsługę Androida 2.2, w tym nowy stabilny interfejs API do uzyskiwania dostępu do buforów pikseli obiektów
Bitmap
z kodu natywnego.
- Udostępnia uproszczony system kompilacji za pomocą nowego polecenia
Android NDK r3 (marzec 2010)
- Uwagi ogólne:
-
- Dodaje obsługę biblioteki natywnej OpenGL ES 2.0.
- Dodaje przykładową aplikację
hello-gl2
, która ilustruje użycie shaderów wierzchołków i fragmentów OpenGL ES 2.0. - W tej wersji odświeżono pliki binarne łańcucha narzędzi za pomocą GCC 4.4.0, co powinno generować nieco bardziej kompaktowy i wydajny kod maszynowy niż poprzednia wersja (4.2.1). Pakiet NDK nadal udostępnia też pliki binarne w wersji 4.2.1, których możesz opcjonalnie używać do tworzenia kodu maszynowego.
Android NDK r2 (wrzesień 2009 r.)
Pierwotnie wydany jako „Android 1.6 NDK, Release 1”.
- Uwagi ogólne:
-
- Dodaje obsługę biblioteki natywnej OpenGL ES 1.1.
- Dodaje przykładową aplikację
san-angeles
, która renderuje grafikę 3D za pomocą natywnych interfejsów OpenGL ES API, zarządzając cyklem życia aktywności za pomocą obiektuGLSurfaceView
.
Android NDK r1 (czerwiec 2009 r.)
Pierwotnie wydany jako „Android 1.5 NDK, Release 1”.
- Uwagi ogólne:
-
- Obejmuje obsługę kompilatora (GCC) dla instrukcji ARMv5TE, w tym instrukcji Thumb-1.
- Zawiera nagłówki systemowe dla stabilnych natywnych interfejsów API, dokumentację i przykładowe aplikacje.