Na tej stronie znajdziesz informacje o zmianach we wszystkich stabilnych wersjach pakietu NDK. Najnowszą stabilną wersję pakietu NDK lub dowolną obecnie dostępną wersję beta możesz pobrać na stronie pobierania pakietu NDK.
Więcej szczegółów znajdziesz na stronie grupy dyskusyjnej Google android-ndk-announce. Możesz też zasubskrybować powiadomienia o nowych wersjach usługi.
Android NDK r26 LTS (wrzesień 2023 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- KitKat (interfejsy API 19 i 20) nie jest już obsługiwany.
Android NDK r25 LTS (lipiec 2022 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Zawiera interfejsy API Androida 13.
- Zaktualizowano LLVM do clang-r450784d na podstawie opracowanych przez LLVM 14.
Android NDK r24 (marzec 2022 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Usunęliśmy narzędzie GNU Assembler (GAS). Jeśli używasz
-fno-integrated-as
, musisz usunąć tę flagę. Zapoznaj się z uwagami do migracji z Clang, aby dowiedzieć się, jak zapewnić zgodność montażu z LLVM. - Usługa GDB została usunięta. Użyj LLDB. Zwróć uwagę, że plik ndk-gdb domyślnie używa LLDB, a Android Studio obsługiwał dotychczas tylko ten format.
- Jelly Bean (interfejsy API 16, 17 i 18) nie jest już obsługiwane. Minimalnym systemem operacyjnym obsługiwanym przez pakiet NDK jest KitKat (poziom interfejsu API 19).
- Urządzenia inne niż Neo nie są już obsługiwane. Niewielka liczba bardzo starych urządzeń nie obsługuje neonów, więc większość aplikacji zauważy wzrost wydajności.
- Usunęliśmy obsługę kompilacji RenderScript. Metoda RenderScript została wycofana w Androidzie 12. Jeśli migracja aplikacji z RenderScript nie została zakończona, możesz użyć pakietu NDK r23 LTS.
-
Usunęliśmy narzędzie GNU Assembler (GAS). Jeśli używasz
Android NDK r23 LTS (sierpień 2021 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Plik GNU binutils z wyjątkiem narzędzia GNU Assembler (GAS) został usunięty. Usługa GAS zostanie usunięta w następnej wersji. Jeśli tworzysz kompilację z użyciem:
-fno-integrated-as
, zgłoś błędy, jeśli coś uniemożliwia Ci usunięcie tej flagi. -
Zakończyliśmy obsługę GDB. Usługa GDB zostanie usunięta z następnej wersji.
Użyj LLDB. Pamiętaj, że
ndk-gdb
domyślnie używa LLDB. - NDK r23 to ostatnia wersja, która obsługuje urządzenia inne niż neon. Począwszy od pakietu NDK r24, biblioteki armeabi-v7a w sysroot będą tworzone przy użyciu neonu. Niewielka liczba bardzo starych urządzeń nie obsługuje neonów, więc większość aplikacji zauważy wzrost wydajności.
- Jelly Bean (interfejsy API 16, 17 i 18) nie będzie obsługiwane w następnej wersji pakietu NDK. Minimalnym systemem operacyjnym, który obsługuje NDK w przypadku r24, będzie KitKat (poziom interfejsu API 19).
-
Plik GNU binutils z wyjątkiem narzędzia GNU Assembler (GAS) został usunięty. Usługa GAS zostanie usunięta w następnej wersji. Jeśli tworzysz kompilację z użyciem:
Android NDK r22b (marzec 2021 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Interfejs GNU binutils został wycofany i zostanie usunięty w kolejnej wersji pakietu NDK. Pamiętaj, że jest częścią tego narzędzia – GNU Assemrator (
as
). Jeśli tworzysz kompilację z użyciem:-fno-integrated-as
, zgłoś błędy, jeśli coś uniemożliwia Ci usunięcie tej flagi. Jeśli używasz bezpośrednioas
, zamiast tego użyjclang
. - Domyślnym tagiem łączącym jest teraz LLD. ndk-build i plik łańcucha narzędzi CMake zostały przeniesione do środowiska llvm-ar i llvm-strip.
- Narzędzie ndk-gdb używa teraz lldb jako debugera. Narzędzie gdb zostało wycofane i zostanie usunięte w przyszłej wersji. Aby wrócić do gdb, użyj opcji --no-lldb. Zgłoś błąd, wyjaśniając, dlaczego nie możesz użyć lldb.
-
Pomoc na poziomie
std::filesystem
jest teraz dostępna. Istnieją 2 znane problemy:-
Problem 1258:
std::filesystem::perm_options::nofollow
może nie być uwzględniany na starych urządzeniach. -
Problem 1260:
std::filesystem::canonical
może nieprawidłowo działać po przekazaniu nieistniejącej ścieżki na starych urządzeniach.
-
Problem 1258:
-
Interfejs GNU binutils został wycofany i zostanie usunięty w kolejnej wersji pakietu NDK. Pamiętaj, że jest częścią tego narzędzia – GNU Assemrator (
Android NDK r21e LTS (styczeń 2021 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
32-bitowy system Windows nie jest już obsługiwany. Nie dotyczy to większości użytkowników. Jeśli nadal musisz tworzyć aplikacje NDK w 32-bitowych wersjach systemu Windows, kontynuuj korzystanie z pakietu NDK r20.
Więcej informacji na temat tej zmiany w narzędziach dla programistów aplikacji na Androida znajdziesz w tym poście na blogu.
-
Narzędzie LLD jest teraz dostępne do testowania.
AOSP domyślnie przełączyło się na używanie LLD i NDK będzie wyświetlać się automatycznie (oś czasu nieznana). Przetestuj LLD w swojej aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. Problem 843 będzie miał wpływ na kompilacje korzystające z LLD ze paskiem narzędzi binutils i objcopy, a nie 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 czasu NDK r19 i zajmują sporo miejsca w NDK. Usunięte ścieżki:
- platformy
- Źródła/cxx-stl
- Sysroot
- łańcuch narzędzi (z wyjątkiem łańcuchów narzędzi i LLvm),
make_standalone_toolchain.py
(chociaż od r19 ten skrypt jest zbędny). Informacje o przejściu ze starszego układu łańcucha narzędzi znajdziesz w Przewodniku dla właścicieli systemów kompilacji (w języku angielskim) dotyczącego używanej wersji NDK. - Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Zacznij przenosić dane już teraz, aby uniknąć niespodzianek w tym momencie. Więcej informacji znajdziesz w tym poście na blogu.
- Podpisany i poświadczony notarialnie pakiet aplikacji na system macOS jest już dostępny do pobrania z naszej strony wiki i naszej strony internetowej. Tylko pakiety mogą korzystać z plików RPATH i potwierdzania notarialnej weryfikacji, dlatego tradycyjnego pakietu NDK dla systemu macOS nie można uzyskać notarialnie. Pakiet SDK będzie nadal korzystać z tradycyjnego pakietu, ponieważ wymaga zmian w układzie, co sprawi, że będzie on niezgodny z Androidem Studio. Pakiet NDK nie jest poddawany kwarantannie, gdy jest pobierany za pomocą menedżera pakietów SDK, dlatego jest obecnie dozwolony przez Gatekeeper. Obecnie najbardziej niezawodny sposób pobierania pakietu NDK dla systemu macOS to najbardziej niezawodny menedżer pakietów SDK.
-
Android NDK r20b (czerwiec 2019 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Narzędzie LLD jest teraz dostępne do testowania.
Trwa proces przełączania AOSP na korzystanie domyślnie z LLD i NDK (nieznana oś czasu). Przetestuj LLD w swojej 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. Zacznij przenosić dane już teraz, aby uniknąć niespodzianek w tym momencie. Więcej informacji znajdziesz w tym poście na blogu.
- Dodano interfejsy API Androida Q.
-
Narzędzie LLD jest teraz dostępne do testowania.
Trwa proces przełączania AOSP na korzystanie domyślnie z LLD i NDK (nieznana oś czasu). Przetestuj LLD w swojej aplikacji, przekazując
Android NDK r19c (styczeń 2019 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
-
Deweloperzy powinni zacząć testować swoje aplikacje w wersji LLD. AOSP przełączyło się domyślnie na używanie LLD, a NDK będzie z niego korzystać domyślnie w następnej wersji. Pozycje BFD i Gold zostaną usunięte po zakończeniu cyklu wersji LLD bez wyraźnych nierozwiązanych problemów (szacunkowo r21). Przetestuj LLD w swojej aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. Uwaga: plik lld nie obsługuje obecnie skompresowanych symboli w systemie Windows. Numer 888. Clang również nie może generować skompresowanych symboli w systemie Windows, ale może to powodować problemy podczas korzystania z artefaktów utworzonych w aplikacjach Darwin i Linux. - Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Zacznij przenosić dane już teraz, aby uniknąć niespodzianek w tym momencie. Więcej informacji znajdziesz w tym poście na blogu.
-
Problem 780: samodzielne łańcuchy narzędzi są teraz niepotrzebne. Clang, binutils, sysroot i inne elementy łańcucha narzędzi są teraz zainstalowane w
$NDK/toolchains/llvm/prebuilt/<host-tag>
, a Clang znajdzie je automatycznie. Zamiast tworzyć samodzielny łańcuch narzędzi dla interfejsu API 26, wywołaj kompilator bezpośrednio z NDK:$ $NDK/toolchains/llvm/prebuilt/
W przypadku r19 łańcuch narzędzi jest również zainstalowany w starej ścieżce, aby systemy kompilacji mogły dostosować się do nowego układu. Stare ścieżki zostaną usunięte w r20. Skrypt/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
nie zostanie usunięty. Nie jest to już konieczne i spowoduje wyświetlenie ostrzeżenia z powyższymi informacjami, ale skrypt pozostanie dostępny, aby zachować istniejące przepływy pracy. Jeśli korzystasz z ndk-build, CMake lub samodzielnego łańcucha narzędzi, przepływ pracy nie powinien się zmienić. Ta zmiana jest istotna dla administratorów zewnętrznych systemów kompilacji, którzy powinni mieć teraz możliwość usuwania części kodu specyficznego dla Androida. Więcej informacji znajdziesz w przewodniku obsługi systemu kompilacji. - Parametr ndk-depends został usunięty. Naszym zdaniem w starszych wersjach Androida lepszym rozwiązaniem będzie użycie narzędzia ReLinker, które pomoże w rozwiązaniu problemów z wczytywaniem bibliotek natywnych.
- Problem 862: skrypty opakowania GCC przekierowujące do Clang zostały usunięte, ponieważ ich działanie nie jest wystarczające, aby można było dodać zamienniki.
-
Deweloperzy powinni zacząć testować swoje aplikacje w wersji LLD. AOSP przełączyło się domyślnie na używanie LLD, a NDK będzie z niego korzystać domyślnie w następnej wersji. Pozycje BFD i Gold zostaną usunięte po zakończeniu cyklu wersji LLD bez wyraźnych nierozwiązanych problemów (szacunkowo r21). Przetestuj LLD w swojej aplikacji, przekazując
Android NDK r18b (wrzesień 2018 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Usunięto GCC.
-
Narzędzie LLD jest teraz dostępne do testowania.
Trwa proces przełączania AOSP na korzystanie domyślnie z LLD i NDK (nieznana oś czasu). Przetestuj LLD w swojej aplikacji, przekazując
-fuse-ld=lld
podczas łączenia. - Parametry gnustl, gabi++ i stlport zostały usunięte.
- Wyłączono obsługę ICS (android-14 i android-15). Aplikacje korzystające z plików wykonywalnych nie muszą już udostępniać zarówno pliku PIE, jak i pliku wykonywalnego innego niż PIE.
- Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Zacznij przenosić dane już teraz, aby uniknąć niespodzianek w tym momencie. Więcej informacji znajdziesz w tym poście na blogu.
Android NDK r17c (czerwiec 2018 r.)
Historia zmian- Pliki do pobrania
-
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Usługa GCC nie jest już obsługiwana. Zostanie ona usunięta w NDK r18.
-
libc++ jest teraz domyślnym dokumentem STL w CMake i samodzielnych łańcuchach narzędzi. Jeśli ręcznie wybrałeś inny format STL, zdecydowanie zalecamy przejście na
libc++
. Zwróć uwagę, że opcja ndk-build nadal domyślnie nie korzysta z STL. Więcej informacji znajdziesz w tym poście na blogu. - Ggnustl i stlport zostały wycofane i zostaną usunięte w NDK r18.
- Obsługa ARMv5 (armeabi), MIPS i MIPS64 została usunięta. Próba skompilowania któregoś z tych interfejsów ABI zakończy się błędem.
- Obsługa ICS (android-14 i android-15) zostanie wycofana z r18.
- Od sierpnia 2019 roku Sklep Play będzie wymagać obsługi 64-bitowej podczas przesyłania pliku APK. Zacznij przenosić dane już teraz, aby uniknąć niespodzianek w tym momencie. Więcej informacji znajdziesz w tym poście na blogu.
Android NDK r16b (grudzień 2017 r.)
Historia zmian- Pliki do pobrania
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Wycofane nagłówki zostały usunięte. Ujednolicone nagłówki to teraz po prostu „Nagłówki”. Wskazówki dotyczące migracji znajdziesz w artykule Informacje o migracji nagłówków ujednoliconych nagłówków.
- Usługa GCC nie jest już obsługiwana. Nie zostanie on jeszcze usunięty z NDK, ale nie będzie już otrzymywać backendów. Nie można go usunąć do czasu, gdy libc++ stanie się na tyle stabilny, aby mógł być ustawiony jako domyślny. Niektóre części gnustl są nadal niezgodne z Clang. Zostanie on usunięty po usunięciu innych STL w r18.
- Komponent
libc++
wyszedł z wersji beta i jest obecnie preferowanym formatem STL w NDK. Począwszy od r17libc++
jest domyślnym łańcuchem narzędzi CMake i samodzielnymi łańcuchami narzędzi STL. Jeśli ręcznie wybrałeś inny format STL, zdecydowanie zalecamy przejście nalibc++
. Więcej informacji znajdziesz w tym poście na blogu. - Obsługa ARM5 (armeabi), MIPS i MIPS64 została wycofana. Nie będą już domyślnie kompilowane za pomocą ndk-build, ale nadal będzie można kompilować, jeśli mają jawną nazwę. Będą one uwzględniane przez „all”, „all32” i „all64”. Wszystkie one zostały wycofane w wersji r17. Jeśli ustawisz kierowanie na którykolwiek z tych interfejsów ABI, zarówno CMake, jak i ndk-build spowoduje wyświetlenie ostrzeżenia.
- Interfejsy API
-
Dodano natywne interfejsy API na Androida 8.1. 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 tej historii zmian.
Android NDK r15c (lipiec 2017 r.)
Historia zmian- Pliki do pobrania
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Ujednolicone nagłówki są domyślnie włączone. Aby dowiedzieć się, jak korzystać z tych nagłówków, przeczytaj artykuł o ujednoliconych nagłówkach.
- Usługa GCC nie jest już obsługiwana. Nie został jeszcze usunięty z NDK, ale nie otrzymuje już backendów. Nie można go usunąć do czasu, gdy libc++ ustabilizuje się na tyle, że może być wartością domyślną. Niektóre części języka gnustl są nadal niezgodne z Clang.
- System Android 2.3 (
android-9
) nie jest już obsługiwany. Minimalny docelowy poziom interfejsu API w pakiecie NDK to teraz Android 4.0 (android-14
). JeśliAPP_PLATFORM
ma wartość niższą niżandroid-14
, zamiast tego jest używanyandroid-14
. - CMake w NDK obsługuje teraz kod asemblera napisany w YASM na potrzeby architektur x86 i x86-64. Więcej informacji znajdziesz w artykule o tworzeniu kodu asemblera.
Uwaga: wycofane nagłówki zostaną usunięte w kolejnej wersji. Jeśli napotkasz jakiekolwiek problemy z tymi nagłówkami, zgłoś błąd.
Wskazówki dotyczące migracji znajdziesz w artykule Uwagi dotyczące 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 tej historii zmian.
Android NDK r14b (marzec 2017 r.)
Historia zmian- Pliki do pobrania
- Pliki do pobrania tej wersji są dostępne tutaj.
- Ogłoszenia
-
- Ujednolicone nagłówki: w tej wersji wprowadziliśmy nagłówki platformy, które są synchronizowane oraz zawsze aktualne i dokładne z platformą Android. Poprawki błędów dotyczących tylko nagłówka wpływają teraz na wszystkie poziomy interfejsu API. Wprowadzenie ujednoliconych nagłówków rozwiązuje problem z niespójnościami we wcześniejszych wersjach pakietu NDK:
- Nagłówki M i N były tak naprawdę nagłówkami L.
- Deklaracje funkcji w nagłówkach nie były poprawnie zgodne z poziomami platformy; nagłówki zadeklarowały nieistniejące funkcje lub nie udało się zadeklarować dostępnych funkcji.
- Na kilku starych poziomach interfejsu API brakuje stałych lub były one nieprawidłowe, które występowały na nowszych poziomach.
Te ujednolicone nagłówki nie są domyślnie włączone. Aby dowiedzieć się, jak włączyć te nagłówki i ich używać, przeczytaj artykuł o ujednoliconych nagłówkach.
- Wycofanie GCC: ta wersja zakończy aktywną obsługę GCC. GCC nie zostało jeszcze usunięte z NDK, ale nie będzie już otrzymywać backendów. Ponieważ niektóre elementy GCC są nadal niezgodne z językiem Clang, GCC nie zostanie całkowicie usunięte do czasu, gdy libc++ stanie się na tyle stabilny, aby mógł być używany jako domyślny.
- Ujednolicone nagłówki: w tej wersji wprowadziliśmy nagłówki platformy, które są synchronizowane oraz zawsze aktualne i dokładne z platformą Android. Poprawki błędów dotyczących tylko nagłówka wpływają teraz na wszystkie poziomy interfejsu API. Wprowadzenie ujednoliconych nagłówków rozwiązuje problem z niespójnościami we wcześniejszych wersjach pakietu NDK:
Więcej informacji o nowościach i zmianach w tej wersji znajdziesz w tej historii zmian.
Android NDK r13b (październik 2016 r.)
- Pliki do pobrania
- Pliki do pobrania tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
-
- Usługa GCC nie jest już obsługiwana. Nie zostanie on jeszcze usunięty z NDK, ale nie będzie już otrzymywać backendów. Nie można go usunąć, dopóki libc++ nie ustabilizuje się na tyle stabilnym, że może być domyślnym. Niektóre części gnustl są nadal niezgodne z Clang. Prawdopodobnie zostanie on później usunięty.
- Dodano program simpleperf – program profilujący CPU na Androidzie.
- R13B
-
-
Dodatkowe poprawki związane z brakiem parametru
__cxa_bad_cast
.
-
Dodatkowe poprawki związane z brakiem parametru
- Zestaw NDK
-
NDK_TOOLCHAIN_VERSION
przyjmuje teraz domyślnie wartość Clang.- Biblioteka libc++ została zaktualizowana do wersji r263688.
- Przywróciliśmy (prawie) czyste dane. Powinno to spowodować usunięcie wielu błędów, ale nadal musimy wyczyścić bibliotekę libandroid_support, zanim zaproponujemy ją jako domyślną.
-
make-standalone-toolchain.sh
jest teraz po prostu otoką narzędzia w wersji Pythona. Jest kilka różnic w zachowaniu. Więcej informacji znajdziesz w komunikacie zatwierdzenia. - Niektóre biblioteki dla nieobsługiwanych interfejsów ABI (mips64r2, mips32r6, mips32r2 i x32) zostały usunięte. Nadal mogą występować powolne elementy.
- Rozwiązaliśmy problemy z plikiem crtbegin_static.o, które powodowały brak atexitu w momencie połączenia podczas tworzenia statycznego pliku wykonywalnego dla ARM w wersji 21 lub nowszej: problem 132.
- W pliku build/cmake/android.toolchain.cmake dodano plik łańcucha narzędzi CMake.
- Znane problemy
-
- Nie stworzysz pełnej listy wszystkich 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 wiadomości zatwierdzenia.
- Nagłówki i biblioteki Bionic dla wersji Marshmallow i N nie są jeszcze dostępne pomimo Androida-24. Te platformy to nadal nagłówki i biblioteki w wersji Lollipop (a nie regresja z r11).
- Brak narzędzi RenderScript (brak regresji z r11): Problem 7.
Android NDK r12b (czerwiec 2016 r.)
- Pliki do pobrania
- Pliki do pobrania tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
- W interfejsie r13 polecenie
ndk-build
używa domyślnie języka Clang. W kolejnej wersji usuniemy GCC. - Skrypt
make-standalone-toolchain.sh
zostanie usunięty w r13. Upewnij się, że ustawieniemake_standalone_toolchain.py
spełnia Twoje potrzeby. - Zgłoś problemy do GitHuba.
- Naprawiliśmy
ndk-gdb.py
. (Numer 118) -
Zaktualizowaliśmy tabelę
NdkCameraMetadataTags.h
, aby nie zawierała już nieprawidłowej wartości wyliczenia. - Naprawiono błąd w kompilacji ndk, który powodował wyświetlanie fałszywych ostrzeżeń w bibliotekach statycznych korzystających z biblioteki libc++. Więcej informacji na temat tej zmiany znajdziesz w komentarzach tutaj.
- Nagłówki OpenSLES zostały zaktualizowane dla Androida-24.
- Zestaw NDK
- Usunęliśmy obsługę interfejsu ABI Armeabi-v7a-hard. Więcej informacji znajdziesz w tym wyjaśnieniu.
- Usunięto wszystkie systemy sysroot dla poziomów platformy sprzed GB. Zrezygnowaliśmy z ich obsługi w r11, ale nie zdecydowaliśmy się na ich usunięcie.
- Obsługa wyjątków w przypadku użycia funkcji c++_shared w ARM32 działa teraz w większości przypadków. Moduł unwinder będzie teraz połączony z każdym połączonym obiektem, a nie z samym biblioteką libc++. Więcej informacji o tym, jak postępować w przypadku wyjątków, znajdziesz w artykule Znane problemy.
- Domyślne flagi kompilatora zostały przycięte.
(Problem 27).
- Szczegółowe informacje o tych zmianach znajdziesz na tej liście zmian.
- Dodaliśmy implementację samodzielnych łańcuchów narzędzi w Pythonie:
build/tools/make_standalone_toolchain.py
.- Użytkownicy systemu Windows nie muszą już używać Cygwina, aby korzystać z tej funkcji.
- Usuniemy smak bash w r13, więc już teraz przetestuj nowy.
- Oprogramowanie
-fno-limit-debug-info
jest domyślnie włączone w kompilacjach debugowania Clang. Ta zmiana powinna usprawnić debugowanie za pomocą LLDB. - Usługa
--build-id
jest teraz domyślnie włączona.- Identyfikator kompilacji będzie teraz widoczny w raportach o awariach natywnych, dzięki czemu możesz łatwo sprawdzić, która wersja kodu była uruchomiona.
- Biblioteka
NDK_USE_CYGPATH
nie powinna już powodować problemów z biblioteką libgcc. (numer 195486 Androida) - Opcje
-Wl
,--warn-shared-textrel
i-Wl,--fatal-warnings
są teraz domyślnie włączone. Jeśli korzystasz z funkcji przesuwania tekstu, Twoja aplikacja nie może wczytać się na Androidzie 6.0 (poziom interfejsu API 23) lub nowszym. W aplikacjach 64-bitowych nigdy nie można było przenosić tekstu. - Wstępnie skompilowane nagłówki powinny działać lepiej. (Problem 14 i Problem 16)
- Usunięto nieosiągalne biblioteki STL ARM.
- Dodano obsługę interfejsu Vulkan w Androidzie 24.
- Dodano interfejs Choreographer API w Androidzie 24.
- Dodano interfejsy API
libcamera2
dla urządzeń z systememINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
lub nowszym. Więcej informacji znajdziesz w sekcji Cechy kamery. - Dzbanek
- Interfejs 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 nazywa sięclang_32.exe
.
Tym razem funkcja - Pliki wykonywalne
- GCC
- Zsynchronizowano z ChromeOS GCC @ google/gcc-4_9 r227810.
- Poprawka do dezynfekcji wstecznej firmy ToT (R231296).
- Usunięto błąd libatomiczny:
ifuncs
. (Problem 31) - Binutils
- Wyciszone komunikaty „Erratum 843419 found and removed” (Znaleziono i naprawiono erratum)
- Wprowadzono opcję
--long-plt
, aby naprawić błąd wewnętrznego tagu łączącego, który występuje podczas łączenia dużych plików binarnych Arm32. - Naprawiono nieprawidłowe namiastki czasu działania w AArch64. Powodowało to nieprawidłowe obliczanie adresów zwijania w przypadku bardzo dużych platform DSO.
- Wprowadzono domyślną opcję
--no-apply-dynamic
, aby obejść błąd tagu łączącego dynamiczne we wcześniejszych wersjach Androida. - NDK r11 KI dla
dynamic_cast
nie działa z Clang. Naprawiliśmy x86,stlport_static
i optymalizację. - GDB
- Zaktualizowano GDB do wersji 7.11. Więcej informacji znajdziesz na stronie Wiadomości GDB.
- Poprawki błędów dotyczących:
ndk-gdb.py
. - Znane problemy
- ASAN x86 nadal nie działa. Więcej informacji znajdziesz w dyskusji na temat tej listy zmian.
- Wyjątek stanowiący wyjątek za pomocą funkcji
c++_shared
nadal nie działa w przypadku ARM na Androidzie 2.3 (poziom interfejsu API 9) i 4.0 (poziom API 14). - Nagłówki i biblioteki Bionic na Androida 6.0 (poziom interfejsu API 23) i Androida 7.0 (poziom interfejsu API 24) nie są jeszcze dostępne pomimo obecności Androida-24. Te platformy to nadal nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21) (nie jest to regresja z r11).
- Brak narzędzi RenderScript (brak regresji z r11). (Problem 7)
- Nie jest to wyczerpująca lista wszystkich błędów.
__thread
powinna działać w czasie rzeczywistym.
Android NDK r12 (czerwiec 2016 r.)
- Pliki do pobrania
- Pliki do pobrania tej wersji są zarchiwizowane tutaj.
- Ogłoszenia
- W następnej wersji polecenie
ndk-build
będzie domyślnie używać interfejsu Clang. Usługa GCC zostanie usunięta w kolejnej wersji. - Skrypt
make-standalone-toolchain.sh
zostanie usunięty w kolejnej wersji. Jeśli używasz tego skryptu, jak najszybciej przejdź namake_standalone_toolchain.py
. - Zestaw NDK
- Usunięto obsługę interfejsu ABI Armeabi-v7a-hard. Wyjaśnienie znajdziesz w dokumentacji.
- Usunęliśmy wszystkie komponenty sysroot na poziomach platformy starszych niż 2.3 (poziom interfejsu API 9). Zrezygnowaliśmy z ich wsparcia w NDK r11, ale nie zdecydowaliśmy się na ich usunięcie.
- Zaktualizowaliśmy obsługę wyjątków w przypadku użycia funkcji c++_shared w ARM32, tak aby działała (patrz Znane problemy). Moduł unwinder jest teraz połączony z każdym połączonym obiektem, a nie z samym biblioteką libc++.
- Usunięto domyślne flagi kompilatora (NDK Issue 27). Szczegółowe informacje o tej aktualizacji znajdziesz w zmianie 207721.
- W projekcie
build/tools/make_standalone_toolchain.py
dodaliśmy implementację samodzielnych łańcuchów narzędzi w języku Python. W systemie Windows nie musisz już używać Cygwina. Pamiętaj, że styl bash zostanie usunięty w kolejnej wersji, więc przetestuj go już teraz. - Skonfigurowano kompilacje do debugowania Clang, w których opcja
-fno-limit-debug-info
jest domyślnie włączona. Ta zmiana umożliwia lepsze debugowanie za pomocą LLDB. - Włączono:
--build-id
jako opcję domyślną. Ta opcja powoduje wyświetlanie identyfikatora w raportach o awariach natywnych, dzięki czemu możesz łatwo sprawdzić, która wersja kodu została uruchomiona. - Rozwiązaliśmy problem z biblioteką
NDK_USE_CYGPATH
, dzięki czemu nie powoduje on już problemów z biblioteką libgcc (problem 195486). - Domyślnie włączono te opcje:
-Wl,--warn-shared-textrel
i-Wl,--fatal-warnings
. Jeśli korzystasz z funkcji przenoszenia tekstu, Twoja aplikacja nie wczytuje się na Androidzie 6.0 (poziom interfejsu API 23) i nowszym. Pamiętaj, że ta konfiguracja nigdy nie była dozwolona w przypadku aplikacji 64-bitowych. - Poprawiliśmy kilka problemów, aby wstępnie skompilowane nagłówki działały lepiej (NDK Issue 14, NDK Issue 16).
- Usunięto nieosiągalne biblioteki STL ARM.
- Dodano obsługę interfejsu Vulkan w Androidzie 24.
- Dodano interfejs Choreographer API w Androidzie 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 w dokumentacjiCameraCharacteristics
. - Dzbanek
- Interfejs 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 nazywa sięclang_32.exe
. - Poprawiliśmy działanie funkcji
__thread
, aby tym razem działała w czasie rzeczywistym. - GCC
- Kompilator został zsynchronizowany z ChromeOS GCC @ google/gcc-4_9 r227810.
- Poprawka do dezynfekcji wstecznej firmy ToT (R231296).
- Naprawiliśmy
libatomic
, aby nie używać ifuncs (NDK problem 31). - Binutils
- Wyciszono komunikaty informacyjne „Erratum 843419 found and naprawied” (Znaleziono i naprawiono erratum 843419).
- Wprowadzono opcję
--long-plt
, aby naprawić błąd wewnętrznego tagu łączącego podczas łączenia dużych plików binarnych arm32. - Naprawiono nieprawidłowe namiastki czasu działania pliku
AArch64
. Powodował on nieprawidłowe obliczanie adresów skoków w przypadku bardzo dużych, dynamicznych obiektów współdzielonych (DSO). - Wprowadzono domyślną opcję
--no-apply-dynamic
, aby obejść błąd tagu łączącego dynamiczne we wcześniejszych wersjach Androida. - Rozwiązaliśmy znany problem z NDK r11, który powodował, że
dynamic_cast
nie działał z Clang, x86, stlport_static i optymalizacją. - GDB
- Zaktualizowano GDB do wersji 7.11. Więcej informacji o tej wersji znajdziesz na stronie Wiadomości GDB.
- Naprawiono kilka błędów w skrypcie
ndk-gdb.py
. - Znane problemy
- Adres Sanitizer (ASAN) x86 obecnie nie działa. Więcej informacji znajdziesz w numerze 186276.
- Wyjątek stanowiący wyjątek
c++_shared
nie działa w przypadku ARM na Androidzie 2.3 (poziom interfejsu API 9) i Androidzie 4.0 (poziom API 14). - Nagłówki i biblioteki Bionic na Androida 6.0 (poziom interfejsu API 23) i nowsze nie są jeszcze dostępne pomimo obecności Androida-24. Te platformy nadal mają nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21), zgodne z NDK r11.
- Brak narzędzi RenderScript. Jest to zgodne z normą NDK r11. (NDK nr 7)
- W pliku nagłówka
NdkCameraMetadataTags.h
wartość enum metadanych kameryACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
została przypadkowo usunięta i zostanie usunięta w następnej wersji. Zamiast niej użyj wartościACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (marzec 2016 r.)
- Zmiany
- Zastosowano dodatkowe poprawki do skryptu
ndk-gdb.py
. - Do opcji
--attach
poleceniandk-gdb
dodano opcjonalny argument nazwy pakietu. (Problem 13) - Naprawiono nieprawidłowe ścieżki pęku narzędzi dla 32-bitowej platformy Windows. (Problem 45)
- Naprawiliśmy ścieżkę względną polecenia
ndk-which
. (Problem 29) - Naprawiono użycie narzędzia cygpath na potrzeby kompilatora libgcc. (numer Androida: 195486)
Android NDK r11b (marzec 2016 r.)
- Zestaw NDK
-
- Ważne ogłoszenia
- Przenieśliśmy narzędzie do śledzenia błędów do GitHuba.
- Zmiany:
- Adres
ndk-gdb.py
został naprawiony. Wszystko powróciło całkowicie w r11. 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
. Tego polecenia w ogóle nie było w poprzednich wersjach.
- Naprawiono samodzielne łańcuchy narzędzi dla libc++, w których brakuje właściwości
__cxxabi_config.h
. - Naprawiono dokumentację pomocy dotyczącą
--toolchain
wmake-standalone-toolchain.sh
.
- Adres
- Ważne ogłoszenia
- Dzbanek
-
- Errata
- W przeciwieństwie do informacji o wersji r11
__thread
nie działa. Wynika to z faktu, że w wysyłanej przez nas wersji Clang brakuje poprawki błędu obsługi emulowanej obsługi TLS.
Android NDK r11 (marzec 2016 r.)
- Dzbanek
-
- Ważne ogłoszenia
- Zdecydowanie zalecamy przejście na Clang.
- Jeśli napotkasz problemy z Clang, zgłoś błędy tutaj dotyczące problemów specyficznych dla Clang w pakiecie NDK. W przypadku bardziej ogólnych problemów z Clang zgłoś błędy, postępując zgodnie z instrukcjami podanymi na tej stronie.
- Interfejs Clang został zaktualizowany do wersji 3.8svn (R243773, kompilacja 2481030).
- Ta wersja to niemal czysty Clang nadrzędny.
- 64-bitowy pakiet NDK dla systemu Windows zawiera 32-bitową wersję Clang.
- Zdecydowanie zalecamy przejście na Clang.
- Dodane
- Clang zapewnia teraz obsługę emulowanego protokołu TLS.
- Kompilator obsługuje teraz funkcję
__thread
przez emulację protokołu TLS ELF z danymi specyficznymi dla wątku pthread. - C++11
thread_local
działa w niektórych przypadkach, ale nie w przypadku danych z nieprostym destruktorami, ponieważ wymagają one obsługi biblioteki libc. To ograniczenie nie dotyczy Androida 6.0 (poziom interfejsu API 23) lub nowszego. - Emulowany protokół TLS nie działa jeszcze z Aarch64, gdy zmienne TLS są pobierane z biblioteki udostępnionej.
- Kompilator obsługuje teraz funkcję
- Clang zapewnia teraz obsługę emulowanego protokołu TLS.
- Ważne ogłoszenia
- GCC
-
- Ważne ogłoszenia
- Wersja GCC w pakiecie NDK została wycofana i zastąpiona Clang.
- NDK nie zostanie uaktualniona do wersji 5.x ani nie będzie akceptować niekrytycznych backendów.
- Konserwacja błędów kompilacji i wewnętrznych błędów kompilatora w wersji 4.9 będzie obsługiwana indywidualnie w każdym przypadku.
- Usunięcia:
- Usunęliśmy GCC 4.8. Wszystkie cele korzystają teraz z GCC 4.9.
- Inne zmiany
- Zsynchronizowano adres google/gcc-4_9 z r224707. Wcześniej był zsynchronizowany z r214835.
- Zestaw NDK
-
- Ważne ogłoszenia
- Próbki nie są już zawarte w pakiecie NDK. Zamiast tego znajdziesz je na GitHubie.
- Dokumentacja nie jest już częścią pakietu NDK. Znajdziesz go w witrynie dla deweloperów aplikacji na Androida.
- Dodane
- Do interfejsu
android-23
dodano interfejs API natywnego śledzenia. - Do interfejsu
android-23
dodano natywny interfejs API wielosieci. - Od poziomu interfejsu API 21 włączono libc, m i dl, aby udostępniać symbole z obsługą wersji.
- Do interfejsu API poziomu N dodano nagłówki i bibliotekę Vulkan.
- Do interfejsu
- Usunięcia:
- Usunięto obsługę języka
_WCHAR_IS_8BIT
. - Usunięto sed.
- Usunięto Mclinker.
- Usunięto język Perl.
- Usunięto ze wszystkich wersji NDK libc, m i dl wszystkie symbole, których wersje platformy nie obsługują.
- Częściowo usunięta obsługa mips64r2. Pozostałe zostaną usunięte w przyszłości.
- Usunięto obsługę języka
- Inne zmiany
- Zmieniono samodzielne łańcuchy narzędzi ARM na domyślne na arm7.
- Możesz przywrócić stare zachowanie, podając opcję
-target
jakoarmv5te-linux-androideabi
.
- Możesz przywrócić stare zachowanie, podając opcję
- Zmieniono system kompilacji na
-isystem
w przypadku elementów uwzględnionych na platformie.- Ostrzeżenia, które powodują błędy w kompilacji aplikacji, nie zakłócają już tworzenia aplikacji.
- Naprawiono błąd, który występował, gdy plik binarny zwrócił wyjątki za pomocą polecenia gabi++ (numer 179410).
- Zmieniono wbudowaną przestrzeń nazw libc++ na
std::__ndk1
, aby zapobiec problemom ODR w przypadku platformy libc++. - Wszystkie biblioteki libc++ są teraz tworzone za pomocą libc++abi.
- Przeniesiono domyślną wartość
APP_PLATFORM
do Gingerbread.- Obsługa Froyo i starszych wersji zostanie wycofana w kolejnej wersji.
- Zmieniono samodzielne łańcuchy narzędzi ARM na domyślne na arm7.
- Zaktualizowano strukturę
_Unwind_Exception
gabi++ dla 64 bitów. - Dodaliśmy te możliwości do procesorów:
- Wykrywa SSE4.1 i SSE4.2.
- Wykrywa funkcje procesora na procesorach x86_64.
- Zmieniono libc++abi na repozytorium wyższego poziomu r231075.
- Zaktualizowano
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
iuchar.h
z ToT Bionic. - Zsynchronizowano
sys/cdefs.h
na wszystkich poziomach interfejsu API. - Poprawiono ustawienie
fegetenv and fesetenv
dla grupy eksperymentalnej. - Popraw rozmiar/wyrównanie wskaźnika końcowego
crtend_*
w mips64 i x86_64.
- Ważne ogłoszenia
- Binutils
-
- Dodane
- Dodano nową opcję:
--pic-veneer
.
- Dodano nową opcję:
- Usunięcia:
- 32-bitowy pakiet Windows nie zawiera już pliku ld.gold. Zamiast tego możesz pobrać plik ld.gold z 64-bitowego pakietu systemu Windows.
- Zmiany:
- Ujednolicone źródło binutils między Androidem a Chromium OS. Więcej informacji o tej zmianie znajdziesz w komentarzach tutaj.
- Zwiększona niezawodność Gold dla aarch64. Aby używać złota zamiast bfd, w momencie połączenia używaj
-fuse-ld=gold
. Ustawienie domyślne zostanie prawdopodobnie zmienione w następnej wersji. - Krótszy czas łączenia dużych plików binarnych z backendem Gold ARM (skrócenie czasu łączenia nawet o 50% w przypadku przeglądarki Chrome z możliwością debugowania).
- Dodane
- GDB
-
- Usunięcia:
- Usunięto parametr ndk-gdb na rzecz pliku ndk-gdb.py.
- Zmiany:
- Zaktualizowano gdb do wersji 7.10.
- Ulepszone działanie.
- Ulepszyliśmy komunikaty o błędach.
- Poprawiono względne ścieżki projektów.
- Zatrzymano klawisz Ctrl+C przed zamknięciem serwera gdbserver działającego w tle.
- Ulepszona obsługa systemu Windows.
- Usunięcia:
- YASM
-
- Zmiany:
- Zaktualizowano YASM do wersji 1.3.0.
- Zmiany:
- Znane problemy
-
- ASAN x86 obecnie nie działa. Więcej informacji znajdziesz w dyskusji tutaj.
- Kombinacja Clang, x86, stlport_static i poziomów optymalizacji wyższych niż
-O0
powoduje błędy testów zdynamic_cast
. Więcej informacji znajdziesz w komentarzach tutaj. - Obsługa wyjątków często kończy się niepowodzeniem w przypadku polecenia c++_shared w ARM32. Główną przyczyną jest niezgodność między narzędziem do przewijania LLVM, którego libc++abi używa na potrzeby ARM32 i libgcc. To zachowanie nie jest wynikiem regresji z r10e.
Android NDK r10e (maj 2015 r.)
- Pliki do pobrania
- Pliki do pobrania tej wersji są zarchiwizowane tutaj.
- Ważne zmiany:
-
- Zintegrowano obejście dla Cortex-A53 Erratum 843419 z tagiem łączącym
aarch64-linux-android-4.9
. Więcej informacji o tym obejściu znajdziesz w artykule o obejściu metody cortex-a53 erratum 843419. - Dodano Clang 3.6.
NDK_TOOLCHAIN_VERSION=clang
domyślnie wybiera teraz tę wersję. - Usunęliśmy Clang 3.4.
- Usunęliśmy GCC 4.6.
- Wdrożyliśmy obsługę wielowątkowości w
ld.gold
w przypadku wszystkich architektur. Teraz może łączyć się z obsługą wielowątkowości lub bez niej. Domyślnie jest to możliwe bez.- Aby kompilować z użyciem wielowątkowości, użyj opcji
--threads
. - Aby kompilować bez wielowątkowości, użyj opcji
--no-threads
.
- Aby kompilować z użyciem wielowątkowości, użyj opcji
- Uaktualniono GDB/gdbserver do wersji 7.7 dla wszystkich architektur.
- Usunięto pakiet NDK dla 32-bitowego Darwina.
- Zintegrowano obejście dla Cortex-A53 Erratum 843419 z tagiem łączącym
- Ważne poprawki błędów:
-
- Usunięto awarię, która występowała, gdy poza wątkiem głównym występowały pętle OpenMP.
- Naprawiliśmy wewnętrzny błąd kompilatora GCC 4.9 (ICE), który występował, gdy użytkownik zadeklarował
#pragma GCC optimize ("O0")
, ale w wierszu poleceń określono inny poziom optymalizacji.pragma
ma pierwszeństwo. - Naprawiono błąd, który powodował awarię z tym komunikatem o błędzie:
in add_stores, at var-tracking.c:6000
- Wdrożyliśmy obejście problemu Clang 3.5, w którym automatyczna wektoryzacja maszyny wirtualnej LLVM generuje instrukcję
llvm.cttz.v2i64()
bez swojego odpowiednika w zestawie instrukcji ARM.
- Inne poprawki błędów:
-
- Wprowadzono następujące poprawki w nagłówku i bibliotece:
- Naprawiono
PROPERTY_*
w narzędziumedia/NdkMediaDrm.h
. - Poprawiono
sys/ucontext.h
dlamips64
. - Porzucono sprawdzanie wersji Clang dla
__builtin_isnan
i__builtin_isinf
. - Dodano
android-21/arch-mips/usr/include/asm/reg.h
iandroid-21/arch-mips64/usr/include/asm/reg.h
. - Naprawiliśmy ostrzeżenie o fałszywych granicach tablicy, które zostało wygenerowane przez GCC 4.9 na potrzeby x86, i ponownie włączyło ostrzeżenie o granicach tablicy wygenerowane przez GCC 4.9 na potrzeby ARM. Ostrzeżenie dotyczące ARM zostało wcześniej bezwarunkowo wyłączone.
- Poprawiliśmy Clang 3.5 dla
mips
imips64
, aby utworzyć sekcję.gcc_except_table
możliwą do zapisu, co pozwala na dopasowanie działania GCC. Dzięki tej zmianie możesz uniknąć tego ostrzeżenia dotyczącego kreatora linków:.../ld: warning: creating a DT_TEXTREL in a shared object
- Poprawiliśmy poprawkę dotyczącą
compiler-rt
problemów, które powodowały awarię podczas kompilacji interfejsu Clang dla językamips64
. Więcej informacji znajdziesz w artykule o problemie z maszyną wirtualną LLVM 20098. - Naprawiono awarie Clang 3.5, które występowały w komentarzach spoza zestawu ASCII. (Numer 81440)
- Poprawiliśmy działanie funkcji
stlport collate::compare
, aby zwracały wartości-1
i1
. Wcześniej zwracał dowolne podpisane liczby. - Poprawiono
ndk-gdb
dla 64-bitowych interfejsów ABI. (Numer 118300) - Naprawiliśmy awarię wywoływaną przez próbkę HelloComputeNDK dla skryptu RenderScript w Androidzie 4.4 (poziom 19 interfejsu API Androida). Więcej informacji znajdziesz na tej stronie.
- Poprawiono
libc++ __wrap_iter
w GCC. Więcej informacji znajdziesz w artykule o problemie 22355 maszyny wirtualnej LLVM. - Naprawiono obsługę interfejsu ABI
x86_64
w.asm
. - Wdrożyliśmy obejście problemu z
stlport
w GCC 4.8. (Numer 127773) - Usunięto separator katalogów na końcu
\\
ze ścieżki projektu w systemie Windows. (Numer 160584) - Usunięto błąd
no rule to make target
, który występował podczas kompilowania pojedynczego pliku.c
przez wykonanie poleceniandk-build.cmd
zgradle
. (Numer 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
dla użytkownikaaarch64
. Domyślnym tagiem łączącym jestld.bfd
. Aby jawnie włączyć funkcjęld.gold
, dodaj do zmiennejLOCAL_LDFLAGS
lubAPP_LDFLAGS
zmienną-fuse-ld=gold
. - Utworzenie łańcuchów narzędzi MIPS i MIPS64 przy użyciu dodatku
binutils-2.25
, które zapewnia lepszą obsługę R6. - Ustawienie
-fstandalone-debug
(pełne informacje debugowania) jako domyślną opcję Clang. - Zastąpiono
-fstack-protector
ciągiem-fstack-protector-strong
dla łańcuchów narzędzi ARM, AArch64, X86 i X86_64 dla łańcuchów narzędzi GCC 4.9, Clang 3.5 i Clang 3.6. - Dodano przełącznik wiersza poleceń
--package
dondk-gdb
, aby umożliwić systemowi kompilacji zastąpienie nazwy pakietu. (Numer 56189) - Wycofano
-mno-ldc1-stc1
dla MIPS. Ta opcja może nie działać z nowymi opcjami-fpxx
i-mno-odd-spreg
oraz z interfejsem ABI FPXX. - Do aplikacji
cpu-features
dodano wykrywanie MSA i R6 dla MIPS.
- Dodano:
Android NDK r10d (grudzień 2014 r.)
- Ważne zmiany:
-
- Ustawienie GCC w wersji 4.8 jako domyślnej dla wszystkich 32-bitowych interfejsów ABI. Wycofano wersję GCC 4.6 i usuniemy ją w następnej wersji. Aby przywrócić poprzednie działanie, dodaj
NDK_TOOLCHAIN_VERSION=4.6
do ndk-build lub dodaj--toolchain=arm-linux-androideabi-4.6
podczas wykonywania poleceniamake-standalone-toolchain.sh
w wierszu poleceń. W przypadku 64-bitowych interfejsów ABI domyślną wersją jest GCC 4.9. - Domyślnie zatrzymano dodawanie komponentów
-mstackrealign
przez wszystkie łańcuchy narzędzi x86[_64]. Łańcuch narzędzi NDK zakłada wyrównanie stosu 16 bajtów. Używane domyślnie narzędzia i opcje egzekwują tę regułę. Użytkownik piszący kod asemblera musi zadbać o to, by zachować zgodność ze stosem i zadbać o to, by inne kompilatory również przestrzegały tej reguły. (Błąd GCC 38496) - Dodaliśmy funkcję Address Sanitizer do obsługi Clang 3.5 dla interfejsów ARM i x86. Więcej informacji o tej zmianie znajdziesz w projekcie Address Sanitizer.
- Wprowadziliśmy wymóg używania interfejsu
-fPIE -pie
podczas tworzenia, począwszy od poziomu API 21. Na poziomach API 16 i wyższych ndk-build podczas kompilacji korzysta zPIE
. Ta zmiana niesie ze sobą wiele konsekwencji, które zostały omówione w problemie z wersją przedpremierową 888 dla programistów. Nie dotyczy to bibliotek udostępnionych.
- Ustawienie GCC w wersji 4.8 jako domyślnej dla wszystkich 32-bitowych interfejsów ABI. Wycofano wersję GCC 4.6 i usuniemy ją w następnej wersji. Aby przywrócić poprzednie działanie, dodaj
- Ważne poprawki błędów:
-
- Wprowadzono więcej poprawek związanych z
A53 Errata #835769 w tagu łączącym aarch64-linux-android-4.9. W związku z tym GCC przekazuje nową opcję
--fix-cortex-a53-835769
, jeśli określona jest wartość-mfix-cortex-a53-835769
(domyślnie włączona). Więcej informacji znajdziesz w tym komunikacie binutils i wiadomości binutils. - Zarejestrowaliśmy poprawkę dotyczącą zawieszenia
sscanf/vsscanf
libc++, która wystąpiła na poziomie API 21. Sama poprawka została wdrożona w systemie r10c. (Numer 77988) - Naprawiono awarię AutoFDO (
-fauto-profile
), która występowała w GCC 4.9, gdy określono ustawienie-Os
. (Numer 77571)
- Wprowadzono więcej poprawek związanych z
A53 Errata #835769 w tagu łączącym aarch64-linux-android-4.9. W związku z tym GCC przekazuje nową opcję
- Inne poprawki błędów:
-
- Wprowadzono następujące poprawki w nagłówku i bibliotece:
- Dodano
posix_memalign
do interfejsu API na poziomie 16. Ponadto dodaliśmy prototyp wstdlib.h
do interfejsów API na poziomach od 16 do 19. (Numer 77861) - Poprawiliśmy
stdatomic.h
, aby zawierał element<atomic>
tylko w języku C++11. - Zmodyfikowaliśmy te nagłówki do użytku niezależnego:
sys/user.h
orazgl2ext.h
,dlext.h
,fts.h
,sgidefs.h
w przypadku interfejsu API poziomu 21. - Zmodyfikowano
sys/user.h
, aby zmienić nazwęmxcsr_mask
namxcr_mask
i typ danychu_ar0
z - Zmieniono typ wartości zwracanej przez
sysconf()
zint
nalong
. - Poprawiono obsługę właściwości
thumb
przez ndk-build dla elementuLOCAL_ARM_MODE
: w kluczu r10d ndk-build domyślnie dodajeLOCAL_LDFLAGS+=-mthumb
, chyba że spełniony jest jeden z tych warunków: - Ustawiono
LOCAL_ARM_MODE
naarm
. - Wykonujesz kompilację do debugowania (z ustawieniami takimi jak
APP_OPTIM=debug
iAndroidManifest.xml
, w których wartośćandroid:debuggable="true"
jest ustawiona, aby zachować zgodność z wcześniejszymi łańcuchami narzędzi, w których domyślnym trybem jest ARM. (Numer 74040) - Naprawiono dyrektywę
LOCAL_SRC_FILES
w kompilacji ndk-build, aby można było korzystać ze ścieżek bezwzględnych Windows. (Numer 74333) - Z pliku ndk-gdb usunięto kod związany z bash. (Numer 73338)
- Z
make-standalone-toolchain.sh
usunięto kod związany z bash. (Numer 74145) - Poprawiono dokumentację dotyczącą poprawki
System.loadLibrary()
zależności przejściowej. (Numer 41790) - Rozwiązaliśmy problem, który uniemożliwiał wyodrębnienie pakietów 64-bitowych w systemach Ubuntu 14.04 i OS X 10.10 (Yosemite). (Numer 78148)
- Wyeliminowaliśmy problem z usługą
LOCAL_PCH
, aby poprawić obsługę Clang. (Numer 77575) - Wyeliminowano ostrzeżenie „wymaga stosu wykonywalnego” z ld.gold. (numer 79115)
unsigned long
na struct user_regs_struct*.
Android NDK r10c (październik 2014 r.)
- Ważne zmiany:
-
- Wprowadzono te zmiany w strukturze pobierania:
- Każdy pakiet zawiera teraz zarówno 32- i 64-bitowe nagłówki, biblioteki i narzędzia dla odpowiednich platform.
- Biblioteki STL z danymi debugowania nie trzeba już pobierać oddzielnie.
- Zmieniliśmy wszystkie nazwy, które wcześniej nazywały się
Android-L
, na oficjalne oznaczenie wersji:android-21
. - Zaktualizowano GCC 4.9 przez odesłanie do gałęzi
google
repozytorium GCC. Główne różnice w stosunku do starszej wersji GCC 4.9 to między innymi: - Opcja
-O2
włącza teraz wektoryzację bez zapętlenia, ale z intensywniejszym rozwijaniem. - Ulepszenia w FDO i LIPO
- Dodano obsługę Clang 3.5 do wszystkich hostów:
NDK_TOOLCHAIN_VERSION=clang
teraz wybiera Clang 3.5. Uwaga: - W architekturze ARM i x86 domyślnie używany jest zintegrowany komponent assemrator. Jeśli to powoduje problemy, użyj
-fno-integrated-as
jako obejścia. - Clang 3.5 wyświetla więcej ostrzeżeń dotyczących nieużywanych flag, na przykład opcję
-finline-functions
obsługiwaną przez GCC. - Umożliwiono włączanie trybu debugowania ART podczas debugowania na urządzeniu z Androidem 5.0 z użyciem ART jako maszyny wirtualnej przez określenie opcji
art-on
. Więcej informacji znajdziesz w sekcjiprebuilt/common/gdb/common.setup
w katalogu zawierającym pakiet NDK. - Usunęliśmy obsługę Clang 3.3.
- Wycofaliśmy GCC 4.6 i możemy usunąć go z kolejnych wersji.
- Zaktualizowano Muclinker do wersji 2.8, dodając obsługę identycznego zwijania kodu („ICF”). Określ ICF za pomocą opcji
--icf
. - Rozszerzono obsługę
arm_neon.h
w x86 i x86_64, uzyskując ok. 93% kryteriów wewnętrznych NEON. Więcej informacji o obsłudze NEON:- Otwórz Przewodnik dla programistów NDK (
docs/Programmers_Guide/html/
) i zapoznaj się z sekcją „Architektury i procesory” > Neon. - Sprawdź zaktualizowany próbkę (
hello-neon
) w:samples/
. - Zobacz przewodnik firmy Intel na temat przenoszenia z ARM NEON na Intel SSE.
- Otwórz Przewodnik dla programistów NDK (
- Udokumentowano obsługę funkcji
_FORTIFY_SOURCE
wheaders/libs/android-21
, która pojawiła się w r10 (kiedyandroid-21
nadal nazywała sięAndroid-L
), ale bez dokumentacji.
Szczegółowe informacje znajdziesz w sekcji Ważne poprawki błędów poniżej.
Podczas migracji z projektów przy użyciu GCC możesz używać
-Wno-invalid-command-line-argument
i-Wno-unused-command-line-argument
do ignorowania nieużywanych flag, dopóki nie zdecydujesz się, co z nimi zrobić w dłuższej perspektywie. - Ważne poprawki błędów:
-
- Naprawiono błąd wewnętrznego kompilatora w GCC4.9/aarch64, który powodował wyświetlenie tego komunikatu o błędzie (problem 77564):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Usunięto nieprawidłowe generowanie kodu z GCC4.9/arm. (Numer 77567)
- Naprawiono wewnętrzny błąd kompilatora w przypadku wystąpienia GCC4.9/mips w przypadku montażu wbudowanego. (Numer 77568)
- Usunięto nieprawidłowy kod wygenerowany przez GCC4.9/arm dla celu
x = (cond) ? y : x
. (Numer 77569)- Domyślnie naprawiono błędy GCC4.9/aarch64 i Clang3.5/aarch64, aby obejść erratum Cortex-A53 (835769). Wyłącz obejście, podając
-mno-fix-cortex-a53-835769
. - Inne poprawki błędów:
-
- Wprowadzono te poprawki w nagłówku i bibliotece w
android-21
:- Dodano więcej kodów TV:
android/keycodes.h
- Do interfejsu
android/sensor.h
dodano więcej stałych i 6 nowych funkcji czujnika:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
iASensor_isWakeUpSensor
. - Poprawiliśmy
stdatomic.h
, aby zwiększyć zgodność z GCC 4.6 i zapewnić obsługę nagłówka<atomic>
. - Dodano
sys/ucontext.h
isys/user.h
do wszystkich poziomów API. Nagłóweksignal.h
zawiera teraz<sys/ucontext.h>
. Możesz usunąć dowolną istniejącą definicję słowastruct ucontext
. - Dodano
posix_memalign
do interfejsów API na poziomach 17, 18 i 19. - Dodano te funkcje do wszystkich architektur:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - Dodano wymagane uprawnienia do próbki
native-media/AndroidManifest.xml
. (Numer 106640) - Dodano
clock_nanosleep
iclock_settime
do interfejsu API poziomu 21. (Numer 77372) - Usunięto 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
,dlmalloc
,__futex_wake
,dlmalloc
,__wait4
,__get_thread
__open
__get_tls
__getdents64
- Z architektur 64-bitowych usunęliśmy te funkcje:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Z architektur 32-bitowych usunęliśmy tę funkcję:
__signalfd4
. - Zmieniono typ trzeciego argumentu z
size_t
naint
w tych funkcjach:strtoll_l
,strtoull_l
,wcstoll_l
iwcstoull_l
. - Przywrócono te funkcje do architektury 64-bitowej:
arc4random
,arc4random_buf
iarc4random_uniform
. - Przeniesiono
cxa_*
oraz operatorynew
idelete
z powrotem dolibstdc++.so
. Ta zmiana przywraca zachowanie R9d; poprzednie wersje systemu r10 zawierały pliki zastępcze.
- Dodano więcej kodów TV:
- Przywrócono obsługę MXU w GCC 4.8 i 4.9 w przypadku mips. Takiej pomocy nie zabrakło w przypadku r10 i r10b, ponieważ te wersje GCC zostały skompilowane z biblioteką binutils-2.24, która nie obsługuje MXU. Teraz już tak.
- Poprawiliśmy dyrektywę
--toolchain=
w interfejsiemake-standalone-toolchain.sh
, dzięki czemu prawidłowo obsługuje ona użycie sufiksu wskazującego wersję Clang. - Naprawiliśmy funkcje
strtod()
libc++/armeabi. - Wprowadzono poprawki w dokumentacji NDK w
docs/
.
- Wprowadzono te poprawki w nagłówku i bibliotece w
- Inne zmiany:
-
- Ulepszona funkcja
cpu-features
do wykrywania obsługi ARMv8 w przypadku następujących zbiorów instrukcji: AES, CRC32, SHA2, SHA1 i 64-bitowy PMULL/PMULL2. (Numer sprawy 106360) - Zmodyfikowano kompilację ndk, aby używała języka
*-gcc-ar
, który jest dostępny w GCC 4.8, GCC 4.9 i Clang. Clang określa go zamiast*-ar
. To ustawienie zapewnia lepszą obsługę LTO. - Usunęliśmy nagłówki
include-fixed/linux/a.out.h
iinclude-fixed/linux/compiler.h
z kompilatora GCC. (Numer 73728) - Rozwiązaliśmy problem dotyczący usługi
-flto
z GCC 4.8 w systemie macOS X. Komunikat o błędzie brzmi:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Usunięto literówkę w adresie
build-binary.mk.
(problem 76992) - Ulepszona funkcja
- Ważne znane problemy:
-
- Określenie -Os (
-fauto-profile
) w GCC4.9 może spowodować awarię. (Numer 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 następujące 32-bitowe elementy nie znajdują się w 32-bitowych pakietach NDK. Zamiast tego mają one postać 64-bitową:
- Nagłówki Android-L
- GCC 4.9
- Obecnie jedyny typ obsługi Renderscript oferowany przez NDK to 32-bitowy Renderscript w Androidzie 4.4 (poziom interfejsu API 19). Nie można utworzyć kodu HelloComputeNDK (jedynego przykładowego skryptu Renderscript) z żadną inną kombinacją kodu Renderscript (32- lub 64-bitowego) i wersji Androida.
- Do skompilowania natywnego kodeka musisz użyć 64-bitowego pakietu NDK, w którym znajdują się wszystkie nagłówki Android-L.
- Ważne poprawki błędów:
- Inne poprawki błędów:
-
- Usunięto
stdio.h
z katalogówinclude-fixed/
wszystkich wersji GCC. (numer 73728). - Usunęliśmy zduplikowane pliki nagłówka z pakietów systemu Windows w katalogach
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (numer 73704). - Rozwiązaliśmy problem, który uniemożliwiał narzędziu Clang utworzenie HelloComputeNDK.
- Naprawiono przy wyjściu. (numer 66595).
- Wprowadzono różne poprawki w dokumentach w
docs/
isources/third_party/googletest/README.NDK
. (numer 74069). - Wprowadzono te poprawki w nagłówkach Android-L:
- Do funkcji
ctype.h
iwchar.h
dodano te funkcje: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*_l()
. - Nazwa elementu
cmsg_nxthdr
została zmieniona na__cmsg_nxthdr
. - Czcionka
__libc_malloc_dispatch
została usunięta. - Zmieniono prototyp
ptrace()
nalong ptrace(int, ...);
. - Czcionka
sha1.h
została usunięta. - Rozszerzono
android_dlextinfo
wandroid/dlext.h
. __NDK_FPABI__
z adnotacją dla funkcji odbierających lub zwracających wartości zmiennoprzecinkowe lub podwójnym wstdlib.h
,time.h
,wchar.h
icomplex.h
.
- Usunięto
- Inne zmiany:
-
- Zaktualizowano
mipsel-linux-android-4.9
imips64el-linux-android-4.9
, wdrożyliśmy nowy układ katalogów multilib i zapewniliśmy obsługę biblioteki gdb-7.7 - Ulepszono
cpu-features
, aby wykrywać więcej funkcji Arm64. (Lista zmian 100339).
- Zaktualizowano
Android NDK r10 (lipiec 2014 r.)
- Ważne zmiany:
-
- Dodano 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 jest obecnie w wersji 3.4.
NDK_TOOLCHAIN_VERSION=clang
może nie działać w przypadku Arm64-v8a i MIps64. - Android-L to pierwszy poziom z obsługą wersji 64-bitowej. Pamiętaj, że ten poziom interfejsu API jest tymczasowy i dotyczy tylko podglądu L. Rzeczywisty numer poziomu interfejsu API zastąpi go przy wersji L.
- Ta wersja zawiera teraz ustawienia
all32
iall64
dotyczące usługAPP_ABI
.APP_ABI=all32
jest odpowiednikiem funkcjiAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
jest odpowiednikiem funkcjiAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
wybiera wszystkie interfejsy ABI.
- Nowa wersja GNU libstdc++ w Androidzie-L zawiera wszystkie:
<tr1/cmath>
Zanim zdefiniujesz własną funkcję matematyczną, sprawdź_GLIBCXX_USE_C99_MATH_TR1
, aby zobaczyć, że funkcja o takiej nazwie już istnieje. Dzięki temu unikniesz błędów „wielu definicji” w tagu łączącym. - Biblioteka funkcji procesora została zaktualizowana na potrzeby jądra ARMv8. Istniejąca biblioteka funkcji procesora może nie wykryć obecności NEON na platformie ARMv8. Ponownie skompiluj kod z nową wersją.
- Dodano nowy katalog interfejsów API
platforms/android-L/
. Znajdziesz w nich m.in. te informacje: - Zaktualizowaliśmy nagłówki Bionic, które nie zmieniły się z poziomu 3 interfejsu API Androida na 19 (KitKat). Ta nowa wersja dla poziomu L ma zostać zsynchronizowana z AOSP.
- Nowe interfejsy API multimediów i przykładowy kodek natywny.
- Zaktualizowany nagłówek
Android.h
na potrzeby SLES/OpenSLES, który umożliwi obsługę jednoprecyzyjnego, zmiennoprzecinkowego formatu dźwięku w AudioPlayer. - Rozszerzenia GLES 3.1 i AEP do usługi
libGLESv3.so.
- Nagłówki GLES2 i GLES3 zostały zaktualizowane do najnowszych oficjalnych wersji Khronos.
- Do 32-/64-bitowych interfejsów ABI dodaliśmy kompilatory GCC 4.9. Jak już wspominaliśmy, GCC 4.9 to domyślny (tylko) kompilator do 64-bitowych interfejsów ABI. W przypadku 32-bitowych interfejsów ABI musisz jawnie włączyć GCC 4.9, ponieważ wersja GCC 4.6 jest nadal domyślna.
- W przypadku kompilacji ndk włącz 32-bitową kompilację GCC 4.9. Aby to zrobić, dodaj parametr
NDK_TOOLCHAIN_VERSION=4.9
do plikuApplication.mk
lub wyeksportuj go jako zmienną środowiskową z poziomu wiersza poleceń. - Aby utworzyć samodzielny łańcuch narzędzi, użyj opcji
--toolchain=
w skrypciemake-standalone-toolchain.sh
. 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 platforma GDB nadal jest w wersji GDB-7.3.x (domyślna w przypadku ARM i MIPS), musisz skonfigurować
NDK_TOOLCHAIN_VERSION=4.8
lub4.9
, aby umożliwić ndk-gdb wybór GDB 7.6. - Dodaliśmy opcję kompilacji
-mssse3
zapewniającą obsługę SSSE3 i ustawiliśmy tę opcję jako domyślną dla interfejsu ABI x86 (uaktualnianie z SSE3). Obraz udostępniony przez Google nie zawiera instrukcji SSSE3. - Zaktualizowano GCC do wersji 4.8.3.
- Ulepszona obsługa ARM libc++ EH przez przejście z gabi++ na libc++abi. Szczegółowe informacje znajdziesz w sekcji „Pomoc dotycząca C++” w dokumentacji. Uwaga:
- Wszystkie testy, z wyjątkiem wersji lokalnych, zachodzą teraz w przypadku Clang 3.4 i GCC 4.8. Więcej informacji znajdziesz w sekcji „Pomoc dotycząca C++” w dokumentacji.
- Biblioteki libc++ dla X86 i MIPS libc++ nadal używają gabi++.
- W GCC 4.7 i nowszych można teraz używać tagu <atomic>.
- Jeśli używasz
<list>
, musisz dodać-fno-strict-aliasing
, ponieważ__list_imp::_end
_ narusza reguły TBAA. (numer 61571). - Od GCC 4.6 LIBCXX_FORCE_REBUILD:=true nie odbudowuje już biblioteki libc++. Odbudowanie jej wymaga użycia innego kompilatora. Pamiętaj, że Clang 3.3 nie jest testowany.
- Narzędzie mclinker jest teraz w wersji 2.7 i obsługuje system Linux aarch64.
- Dodano wstępnie skompilowany nagłówek obsługi nagłówków określonych przez
LOCAL_PCH
. (wydanie 25412).
- Ważne poprawki błędów:
-
- Poprawiliśmy libc++, aby kompilował teraz m.in.
std::feof
(problem: 66668). - Naprawiliśmy wywołanie biblioteki atomowej Clang 3.3/3.4, które powodowało awarie w niektórych testach libc++ dla armeabi ABI.
- Usunięto awarie Clang 3.4 podczas odczytywania wstępnie skompilowanych nagłówków. (numer 66657).
- Poprawiono twierdzenie Clang 3.3/3.4
-O3
dotyczące: - Naprawiliśmy ten błąd w Clang 3.3/3.4:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(numer 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
. (66950). - Poprawiliśmy libc++, aby kompilował teraz m.in.
- Inne poprawki błędów:
-
- Stałe nagłówki:
- Poprawiono 32-bitowy
ssize_t
jakoint
zamiastlong int
. - Poprawiliśmy elementy
WCHAR_MIN
iWCHAR_MAX
, tak aby przyjmowały odpowiednie znaki w zależności od architektury, w której się wyświetlają: - X86/MIPS: podpisane.
- ARM: bez podpisu.
- Aby wymusić domyślne ustawienie braku podpisu dla X86/MIPS, użyj polecenia
-D__WCHAR_UNSIGNED__
. - Aby wymusić wartość
wchar_t
jako 16-bitową, użyj-fshort-wchar
. - Z 32-bitowej wersji
libc.so
usunięto nieistniejące symbole i dodanopread64
,pwrite64
orazftruncate64
dla interfejsu API Androida na poziomie 12 i wyższym. (wydanie 69319). Więcej informacji znajdziesz w komunikacie zatwierdzenia dołączonym do listy zmian AOSP 94137. - Naprawiliśmy ostrzeżenie GCC dotyczące ponownej definicji elementu
putchar
. Treść ostrzeżenia: - Poprawiliśmy
make-standalone-toolchain.sh --stl=libc++
, aby: - Kopie
cxxabi.h
. (numer 68001). - Uruchamia się w katalogach innych niż katalog instalacyjny NDK. (numery 67690 i 68647).
- Poprawiono cytowanie argumentów w GCC/Windows tylko wtedy, gdy jest to konieczne do wywołania procesów w programach zewnętrznych. Ta zmiana zmniejsza prawdopodobieństwo przekroczenia limitu 32 tys. długości.
- Naprawiono błąd, który uniemożliwiał dostosowanie zmiennej środowiskowej
APP_PLATFORM
. - Poprawiliśmy implementację funkcji
IsSystemLibrary()
w funkcji crazy_linker, dzięki której do znalezienia prawdziwej nazwy bazowej ścieżki biblioteki używana jeststrrchr()
zamiaststrchr()
. - Naprawiono brak możliwości utworzenia dźwięku natywnego w trybie debugowania.
- Naprawiono brak możliwości drukowania skrajnych liczb zmiennoprzecinkowych przez gdb. (numer 69203).
- Rozwiązaliśmy problem z kompilacją Clang 3.4 z interfejsem
-Wl,-shared
(w przeciwieństwie do instancji-shared
, w której nie wystąpiły problemy z kompilacją). Problem polegał na tym, że Clang dodał element-pie
w przypadku celów na Androida, jeśli nie istnieją elementy-shared
ani-static
. Takie zachowanie, które było nieprawidłowe, sprawiło, że linker stwierdził, ż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% Neonu. Obecnie nie są obsługiwane typy 64-bitowe. Więcej informacji znajdziesz w sekcji dotyczącej obsługi Wewnętrznej technologii ARM Neon w dokumentacji x86. - Przeniesienie optymalizacji ARM/GOT_PREL (dostępne w GCC 4.6 z gałęzi Google GCC) do ARM GCC 4.8/4.9. Taka optymalizacja czasami zmniejsza liczbę instrukcji przy dostępie do zmiennych globalnych. Przykładem może być skrypt build.sh w pliku
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - Dodano wersję ARM dla STL gabi++, stlport i libc++. Teraz zarówno w trybie Thumb+, jak i w trybie Thumb.
- Można teraz wywoływać skrypt Make-standalone-toolchain.sh za pomocą funkcji
--toolchain=x86_64-linux-android-4.9
, która odpowiada funkcji--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ą używane z architekturą ARM GCC 4.6/4.8 i Clang 3.3/3.4 (które korzystają z programu Assemper, narzędzia łączącego i libs w wersji 4.8). Podczas korzystania z tych opcji zwróć uwagę na następujące zmiany: - Podczas wykonywania skryptu
ndk-build
dodaj te opcje dla celu armeabi-v7a:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
Skompilowana biblioteka jest kopiowana dolibs/armeabi-v7a
. Aby marka działała zgodnie z oczekiwaniami, nie możesz określić zarównoarmeabi-v7a
, jak iarmeabi-v7a-hard
jako wartości docelowych (tj. w wierszu APP_ABI=). Jeśli to zrobisz, jeden z nich zostanie zignorowany. Pamiętaj, żeAPP_ABI=all
w dalszym ciągu jest odpowiednikiemarmeabi armeabi-v7a x86 mips
. - Skrypt
make-standalone-toolchain.sh
kopiuje dodatkowe biblioteki w katalogach/hard
. Dodaj powyższeCFLAGS
iLFLAGS
do plikumakefile, aby umożliwić GCC lub Clang tworzenie połączeń z bibliotekami w/hard
. - Dodano narzędzie yasm Asms oraz flagi
LOCAL_ASMFLAGS
iEXPORT_ASMFLAGS
dla celów x86. Skryptndk-build
korzysta z elementuprebuilts/*/bin/yasm*
do tworzenia komponentówLOCAL_SRC_FILES
z rozszerzeniem.asm
. - Zaktualizowaliśmy aplikację MClinker do wersji 2.6.0, która dodaje obsługę
-gc-sections
. - Dodano eksperymentalną obsługę libc++ (upstream r201101). Aby korzystać z tej nowej funkcji, wykonaj te czynności:
- Dodaj
APP_STL := c++_static
lubAPP_STL := c++_shared
wApplication.mk
. Możesz ponownie utworzyć kompilację ze źródła za pomocąLIBCXX_FORCE_REBUILD := true
- Uruchom polecenie
make-standalone-toolchain.sh --stl=libc++
, aby utworzyć samodzielny łańcuch narzędzi z nagłówkami libc++/lib.
CPLUSPLUS-SUPPORT.html
. (Numer 36496) - Dodaj
- Dodaliśmy obsługę kompilatora Clang 3.4. Opcja
- Ważne poprawki błędów:
-
- Usunięto nieprzechwycony rzut z nieoczekiwanego modułu obsługi wyjątków w GCC 4.6/4.8 ARM EABI. (numer GCC: 59392)
- Poprawiono GCC 4.8, dzięki czemu prawidłowo obsługuje częściową specjalizację szablonu z zależnym argumentem szablonu nietypowym. (numer GCC: 59052)
- Dodano więcej modułów do gotowego języka Python (numer 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
i_curses_panel
- Mac OS X:
- Naprawiono gdbserver x86 i MIPS
event_getmsg_helper
. - Naprawiliśmy wiele problemów w łańcuchu narzędzi RenderScript NDK, w tym problemy ze zgodnością na starszych urządzeniach i z odbiciem w C++.
- Inne poprawki błędów:
-
- Poprawki nagłówków:
- Naprawiliśmy brakujący
#include <sys/types.h>
w interfejsieandroid/asset_manager.h
dla interfejsu API Androida na poziomie 13 lub wyższym. (64988) - Naprawiliśmy brakujący
#include
w usłudzeandroid/rect_manager.h
dla interfejsu API Androida na poziomie 14 lub wyższym. - Dodano
JNICALL
do listyJNI_OnLoad
iJNI_OnUnload
w:jni.h
. Pamiętaj, że właściwośćJNICALL
jest zdefiniowana jako__NDK_FPABI__
. Więcej informacji znajdziesz tutaj:sys/cdefs.h
. - Zaktualizowano te nagłówki, aby można było je uwzględnić bez konieczności ręcznego dodawania zależności (problem 64679):
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Naprawiliśmy brakujący
- Dodano
sys/cachectl.h
w przypadku wszystkich architektur. Programiści MIPS mogą teraz dołączać ten nagłówek zamiast wpisywać#ifdef __mips__
. - Poprawiliśmy działanie funkcji
platforms/android-18/include/android/input.h
przez dodanie parametru__NDK_FPABI__
do funkcji przyjmujących lub zwracających wartości zmiennoprzecinkowe lub podwójne. - Poprawiono MIPS
struct stat
, który został nieprawidłowo ustawiony na 64-bitowy odpowiednik dla interfejsu Android API 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
na potrzeby interfejsu Android API na poziomie 9 lub niższym. - Do x86
libm.so
dodano interfejsyscalbln
,scalblnf
iscalblnl
dla interfejsów API w wersji 18 i nowszych. - Poprawiono literówkę w tekście
sources/android/support/include/iconv.h
. (63806)
- Naprawiliśmy gabi++
std::unexpected()
, aby wywoływał metodęstd::terminate()
, dzięki czemu zdefiniowany przez użytkownika moduł obsługistd::terminate()
miał szansę na uruchomienie.- Naprawiliśmy gabi++, aby wychwytywać
std::nullptr
.- Stałe próbki herbaty i MoreTeapots:
- Rozwiązanie problemu z układami Tegra 2 i 3 przez zmianę zmiennych zwierciadlanych tak, aby używały średniej precyzji. Wartości mocy zwierciadlanej mogą być teraz mniejsze niż 1,0.
- Zmieniliśmy próbki, aby naciśnięcie przycisku głośności przywracało tryb pojemny i unieważnił
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. Obrót ekranu nie uruchamia funkcjionSystemUiVisibilityChange
i nie przywraca trybu pokaźnego.
- Naprawiliśmy skrypt
ndk-build
, dodając elementy-rpath-link=$SYSROOT/usr/lib
i-rpath-link=$TARGET_OUT
, aby używaćld.bfd
do łączenia plików wykonywalnych. (Numer 64266)- Usunięto
-Bsymbolic
ze wszystkich kompilacji STL.- Poprawiliśmy
ndk-gdb-py.cmd
przez ustawienieSHELL
jako zmiennej środowiskowej zamiast przekazywania jej dopython.exe
, która ignoruje to ustawienie. (Numer 63054)- Poprawiliśmy skrypt
make-standalone-toolchain.sh
, tak aby opcja--stl=stlport
kopiowała nagłówki gabi++ zamiast ich łączenia symboli; powłokicmd.exe
i MinGW nie rozpoznają dowiązań symbolicznych tworzonych przez cygwin. - Poprawki nagłówków:
- Inne zmiany:
-
- Nadano uprawnienia do wykonywania wszystkich skryptów
*cmd
, które wcześniej były używane tylko w powłocecmd.exe
, na wypadek, gdyby deweloperzy wolą używać w cygwin metodyndk-build.cmd
zamiast zalecanego skryptundk-build
. - Przyspieszyliśmy działanie skryptu
make-standalone-toolchain.sh
przez jego przeniesienie zamiast kopiowania, jeśli podany katalog docelowy nie istnieje.
- Nadano uprawnienia do wykonywania wszystkich skryptów
Android NDK r9c (grudzień 2013 r.)
Ta wersja zawiera tylko poprawki błędów.
- Ważne poprawki błędów:
-
- Naprawiono problem z GCC 4.8 ARM, który powodował, że wskaźnik stosu był przywracany zbyt wcześnie. Ten problem uniemożliwił wskaźnikowi ramki dostęp do zmiennej w ramce stosu. (numer GCC: 58854)
- Naprawiliśmy błąd w GCC 4.8 libstdc++, w wyniku którego błąd w std::nth_element powodował generowanie kodu prowadzącego do losowego segfaultu. (Numer 62910)
- Naprawiliśmy GCC 4.8 ICE w cc1/cc1plus w
-fuse-ld=mcld
, dzięki czemu ten błąd już się nie pojawia:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Naprawiono obsługę funkcji
-mhard-float
w przypadku funkcji matematycznych__builtin
. Informacje o bieżących rozwiązaniach problemów z-mhard-float
przy użyciu STL znajdziesz w problemie 61784.
- Inne poprawki błędów:
-
- Poprawki nagłówków:
- Zmieniono prototyp jednostki
poll
napoll(struct pollfd *, nfds_t, int);
w:poll.h
. - Dodano
utimensat
do interfejsulibc.so
w przypadku poziomów 12 i 19 interfejsów API na Androida. Te biblioteki są teraz dostępne na wszystkich poziomach Android API od 12 do 19. - Wprowadzono
futimens
wlibc.so
dla Androida API na poziomie 19. - Do interfejsu
time.h
dodano brakujące elementyclock_settime()
iclock_nanosleep()
dla interfejsu API Androida na poziomie 8 lub wyższym. - Dodano
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
iCLOCK_BOOTTIME_ALARM
w:time.h.
- Usunięto przestarzałe
CLOCK_REALTIME_HR
iCLOCK_MONOTONIC_HR.
- Zmieniono prototyp jednostki
- W przykładach: Teapot, MoreTeapots i
source/android/ndk_helper
:- Zmienione tak, że do armeabi-v7a używa się twardego abi.
- Zaktualizowano je, aby można było używać trybu pojemnego w interfejsie Android API na poziomie 19 lub wyższym.
- Rozwiązaliśmy problem z
Check_ReleaseStringUTFChars
w systemie/system/lib/libdvm.so
, który powodował awarie na urządzeniach x86.
- Naprawiono błędy
ndk-build
, które występują w systemie cygwin, gdy do pakietu NDK odwołuje się do niego dowiązanie symboliczne. - Naprawiono błędy
ndk-build.cmd
występujące w oknachcmd.exe
, gdyLOCAL_SRC_FILES
zawiera ścieżki bezwzględne. (69992) - Poprawiliśmy skrypt
ndk-stack
, aby kontynuować pracę nawet wtedy, gdy nie można było przeanalizować ramki z powodu braku możliwości znalezienia procedury, nazwy pliku lub numeru wiersza. W każdym z tych przypadków drukowany jest jako??
. - Poprawiliśmy stos
ndk-stack
w przypadku celów typu Windows-x64_64, tak aby nie powtarzał się błędnie wiersz ramki z wierszem w sekcjistack:
, który nie zawiera atrybutówpc
,eip
aniip
. Przykład:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Poprawiono polecenie gabi++, dzięki czemu:
- Nie używa metody Malloc() do przydzielania obiektów lokalnych wątków C++ w języku C++.
- Unika blokad wzajemnych w gabi++ w przypadkach, gdy wartość libc.debug.malloc w kompilacjach na Androida i platformach userdebug/eng ma wartość inną niż 0.
- Poprawki nagłówków:
- Inne zmiany:
-
- Dodano
LOCAL_EXPORT_LDFLAGS
. - Wprowadziliśmy ustawienie
NDK_PROJECT_PATH=null
do użycia w zintegrowanym systemie kompilacji, w którym opcje są jawnie przekazywane dondk-build
. Przy tym ustawieniundk-build
nie próbuje wyszukać elementuNDK_PROJECT_PATH.
. To ustawienie zapobiega też pobieraniem przez zmienne 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 istnieją):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(opcjonalnie, wartość domyślna to 0) i inne zmienneAPP_*
zawarte w komponencieApplication.mk
. - Pole
APP_ABI
może być teraz rozdzielane przecinkami. Przykład:APP_ABI := "armeabi,armeabi-v7a"
- Możliwość ponownego skompilowania całego pliku STL z danymi debugowania w opcjonalnym, osobnym pakiecie o nazwie
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
przy użyciu opcji-g
. Ta opcja pomaga skryptowindk-stack
zapewnić lepszy zrzut stosu w STL. Ta zmiana nie powinna wpłynąć na kod ani rozmiar ostatecznego, usuniętego pliku. - Ulepszone próbki
hello-jni
do raportowania danychAPP_ABI
podczas kompilacji. - Użyto narzędzia
ar
w trybie deterministycznym (opcja-D
) do tworzenia bibliotek statycznych. (Numer 60705)
- Dodano
Android NDK r9b (październik 2013 r.)
- Ważne zmiany:
-
- Zaktualizowaliśmy
include/android/*h
imath.h
dla wszystkich poziomów interfejsu API Androida do 18, w tym poziomy 13, 15, 16 i 17. Informacje o dodanych interfejsach API znajdziesz w komunikatach zatwierdzenia zmian 68012 i 68014. (numery 47150, 58528 i 38423) - Dodaliśmy obsługę poziomu 19 interfejsu API Androida, w tym powiązanie Renderscript.
- Dodano obsługę
-mhard-float
w istniejącym interfejsie ABI armeabi-v7a. Więcej informacji i aktualne ograniczenia dotyczące Clang znajdziesz tutaj:tests/device/hard-float/jni/Android.mk
. - Migracja z GNU Compiler Collection (GCC) do wersji 4.8.2 i dodatkowa obsługa kolorów diagnostycznych. Aby włączyć kolory diagnostyczne, ustaw
-fdiagnostics-color=auto
lub-fdiagnostics-color=always,
lub wyeksportuj wartośćGCC_COLORS
, jak pokazano poniżej:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Więcej informacji znajdziesz w artykule Opcje niezależne od języka w GCC. - Dodaliśmy 2 nowe przykłady, aby zaprezentować funkcje OpenGL ES 3.0: Teapot i MoreTeapots. Te przykłady działają na urządzeniach z Androidem 4.1 (poziom interfejsu API 16) lub nowszym.
- Wycofana obsługa 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ązanie problemu polegającego na tym, że interfejs ARM GCC 4.6
thumb2
nie mógł wygenerować 16-bitowych względnych tabel skokowych. (Problem z GCC) - Naprawiliśmy błąd wewnętrznego kompilatora GCC 4.8 w
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Zmiana 62770, problem z GCC) - Rozwiązaliśmy problem z nieuruchamianiem się 32-bitowych plików wykonywalnych
*-gdb.exe
w systemie Windows. (Numer 58975) - Naprawiliśmy GCC 4.8 ICE podczas tworzenia biblioteki punktorów. Komunikat o błędzie:
internal compiler error: verify_flow_info failed
(Problem 58916, problem z GCC) - Zmodyfikowano kompilację GDB/ARM, aby pomijać dane
ARM.exidx
na potrzeby odpoczynku w kodzie prologu, i dodano polecenie (set arm exidx-unwinding
) kontrolujące odwijanie stosu oparte na Exidx. (Numer 55826) - Naprawiono problem z kompilatorem Clang 3.3 MIPS, który powodował nieprawidłowe wykorzystywanie rejestrów HI i LO.
- Rozwiązaliśmy problem z MIPS 4.7 ICE w systemie
dbx_reg_number
. Komunikat o błędzie jest taki:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC Patch)
- Rozwiązanie problemu polegającego na tym, że interfejs ARM GCC 4.6
- Inne poprawki błędów:
-
- Poprawki nagłówków
- Naprawiliśmy brak podpisu ARM
WCHAR_MIN
iWCHAR_MAX
zgodnie ze specyfikacją (wersje X86/MIPS są podpisane). Określ_WCHAR_IS_ALWAYS_SIGNED
, aby przywrócić stare działanie. (Numer 57749) - Naprawiliśmy element
include/netinet/tcp.h
, aby zawierał wyliczenie stanuTCP_INFO
. (Numer 38881) - Poprawiliśmy makro
cdefs_elh.h
_C_LABEL_STRING
, tak aby nie generujeło ostrzeżeń w łańcuchu narzędzi GCC 4.8 podczas korzystania z trybu C++11. (numer 58135, numer 58652) - Usunięto nieistniejące funkcje
imaxabs
iimaxdiv
z nagłówkainttypes.h
. - Rozwiązaliśmy problem z zwracanymi wartościami
pthread_exit()
i wartościąpthread_self()
. (Numer 60686) - Dodano brakującą funkcję
mkdtemp()
, która istnieje już w nagłówkubionic
stdlib.h
.
- Naprawiliśmy brak podpisu ARM
- Rozwiązaliśmy problem z kompilowaniem pliku
samples/gles3jni
za pomocą Clang w interfejsie API Androida na poziomie 11. - Naprawiliśmy w MCLinkerze możliwość wielokrotnych wystąpień tych opcji:
-gc-sections
i--eh-frame-hdr
. - Poprawiono akceptowanie opcji
--no-warn-mismatch
w MCLinker. - Zmieniono opcję
cpu-features
, aby nie zakładać, że wszystkie urządzenia VFPv4 obsługują IDIV. Teraz ta opcja powoduje dodanie IDIV do urządzeń z białej listy, w tym na Nexusie 4. (Numer 57637) - Rozwiązaliśmy problem z błędnym rejestrowaniem błędów w operacjach „predispatch” w usłudze
android_native_app_glue.c
. - Naprawiliśmy, że wszystkie operacje na gałęzi
gabi++
są wyłączane i nie można ich używać w zakresie obsługi nieoczekiwanego parametru. - Rozwiązaliśmy kilka problemów z opcją Clang
-integrated-as
, która pozwalała przejść testy zabezpieczeńssax-instructions
ifenv
. - Poprawiono kompilator GCC 4.6/4.7/4.8, który przekazuje opcję tagu łączącego
--eh-frame-hdr
nawet w przypadku statycznych plików wykonywalnych. Więcej informacji znajdziesz w poprawce do GCC. - Poprawiono dodatkowy apostrof w tekście
CPU-ARCH-ABIS.html
. Więcej informacji:NDK-DEPENDS.html
. (Numer 60142) - Poprawiono dodatkowe cudzysłowy w danych wyjściowych ndk-build w systemie Windows. (Numer 60649)
- Poprawiono działanie interfejsu Clang 3.3, aby kompilować wbudowane, atomowe operacje na procesorach ARM, takie jak
__atomic_fetch_add
,__atomic_fetch_sub
i__atomic_fetch_or
. - Naprawiono Clang 3.3 ICE z dostosowaną wartością
vfprintf
. (Problem z Clang)
- Poprawki nagłówków
- Inne zmiany:
-
- Włączono OpenMP dla wszystkich kompilacji GCC. Aby korzystać z tej funkcji, dodaj do ustawień kompilacji te flagi:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Przykłady kodu znajdziesz w sekcjitests/device/test-openmp
- Znacznie zmniejszono rozmiar pliku
ld.mcld
(1,5 MB w porównaniu zld.bfd
, 3,5 MB ild.gold
7,5 MB), co przyspiesza o około 20%. - Dodano
LOCAL_CONLYFLAGS
iAPP_CONLYFLAGS
, aby określić opcje mające zastosowanie tylko do C, ale nie C++. IstniejąceLOCAL_CFLAGS
iAPP_CFLAGS
są też używane do kompilacji C++ (co pozwala uniknąć dwukrotnego określania większości opcji), więc opcje takie jak-std=gnu99
mogą zakończyć się niepowodzeniem w kompilacjach G++ z ostrzeżeniem, a kompilacje clang++ z błędem. - Dodano funkcje pomocnicze tablicy
gabi++
. - Zmodyfikowana kompilacja GCC sprawia, że wszystkie pliki
libgcc.a
są skompilowane przy użyciu-funwind-tables
, co umożliwia przeniesienie stosu poza zablokowane wcześniej punkty, takie jak__aeabi_idiv0
. - Dodano obsługę Ingenic MXU w MIPS GCC4.6/4.7/4.8 z nową opcją
-mmxu
. - Rozszerzona obsługa MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
umożliwia również sterowanie ldxc1/sdxc1 - Dodano zwariowany kreator linków. Więcej informacji:
sources/android/crazy_linker/README.TXT
. - Poprawiliśmy
bitmap-plasma
o rysowanie na pełnym ekranie, a nie na obszarze 200 x 200 pikseli. - Zmniejszono o 25% rozmiary łańcucha narzędzi Linux i Darwin dzięki dowiązaniom symbolicznym do identycznych plików.
- Włączono OpenMP dla wszystkich kompilacji GCC. Aby korzystać z tej funkcji, dodaj do ustawień kompilacji te flagi:
Android NDK r9 (lipiec 2013 r.)
- Ważne zmiany:
-
- Dodaliśmy obsługę Androida 4.3 (poziom API 18). Więcej informacji znajdziesz w opisie
STABLE-APIS.html
oraz nowych przykładach kodu wsamples/gles3jni/README
. - Dodano nagłówki i biblioteki dla OpenGL ES 3.0, które jest obsługiwane przez Androida 4.3 (poziom interfejsu API 18) i nowsze.
- Do pakietu NDK dodano 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
ndk-build
kompilacji wyeksportuj plikNDK_TOOLCHAIN_VERSION=4.8
lub dodaj go w zadaniuApplication.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 usługę-Wall
. Pamiętaj, aby dodać__attribute__((unused))
, jeśli używasz asertów czasu kompilacji, takich jaksources/cxx-stl/stlport/stlport/stl/config/features.h
, wiersz #311. Więcej informacji znajdziesz w opisie zmiany 55460Uwaga: w GCC 4.7 i nowszych kompilatory ARM domyślnie generują niedopasowany kod dostępu w przypadku celów kompilacji ARMv6 i wyższych. Może być konieczne dodanie opcji kompilacji
-mno-unaligned-access
podczas kompilowania jąder, które nie obsługują tej funkcji. - W przypadku
- Dodano obsługę Clang 3.3. Opcja kompilacji
NDK_TOOLCHAIN_VERSION=clang
domyślnie wybiera teraz Clang 3.3.Uwaga: wersje GCC 4.4.3 i Clang 3.1 zostały wycofane i zostaną usunięte z następnej wersji NDK.
- Zaktualizowano narzędzie GNU Project Debugger (GDB) o obsługę Pythona 2.7.5.
- Dodano narzędzie MCLinker do obsługi hostów w systemie Windows.
ld.gold
jest domyślną wartością (o ile jest dostępna), więc aby włączyć MCLinker, musisz dodać-fuse-ld=mcld
w plikuLOCAL_LDFLAGS
lubAPP_LDFLAGS
. - Dodano narzędzie
ndk-depends
, które drukuje zależności biblioteki ELF. Więcej informacji:NDK-DEPENDS.html
. (Numer 53486)
- Dodaliśmy obsługę Androida 4.3 (poziom API 18). Więcej informacji znajdziesz w opisie
- Ważne poprawki błędów:
-
- Usunięto potencjalny problem z obsługą zdarzeń w komponencie
android_native_app_glue
. (Numer 41755) - Poprawiono kompilację ARM/GCC-4.7, aby zapewnić wystarczające dopasowanie pod kątem ładowania i zapisywania instrukcji VST oraz VLD NEON. (numer GCC: 57271)
- Poprawiliśmy wewnętrzny błąd kompilatora GCC 4.4.3/4.6/4.7 dotyczący stałej ujemnej wartości indeksu w literale ciągu znaków. (Numer 54623)
- Usunięto błąd podziału na segmenty w GCC 4.7 w przypadku stałego inicjowania z adresem obiektu. (Numer 56508)
- Naprawiliśmy błąd podziału na segmenty według ARM GCC 4.6 w przypadku wartości
-O
przy korzystaniu z funkcji Boost 1.52.0. (numer 42891) - Naprawiliśmy zasady
libc.so
ilibc.a
, aby obsługiwały funkcjęwait4()
. (numer 19854) - Zaktualizowaliśmy pliki x86 libc.so i libc.a, aby uwzględnić funkcję
clone()
. - Naprawiliśmy błąd
LOCAL_SHORT_COMMANDS
, który powodował, że pliklinker.list
jest pusty lub nieużywany. - Naprawiono kompilację MIPS GCC w systemie macOS, aby używała dyrektyw CFI, bez których
ld.mcld --eh-frame-hdr
często ulega awarii. - Poprawiono błąd wewnętrznego kompilatora Clang 3.2 X86/MIPS w komponencie
llvm/lib/VMCore/Value.cpp
. (Zmiana 59021) - Naprawiono awarię GCC 4.7 w wersji 64-bitowej w systemie Windows. (Błąd:
out of memory allocating 4294967280 bytes
). - Zaktualizowaliśmy skrypt
ndk-gdb
, tak aby działania--start
lub--launch
czekały na serwer debugowania GNU. Dzięki temu może działać lepiej w punktach przerwania ustawionych na początku ścieżki wykonania (np. w punktach przerwania w kodzie JNI). (Numer 41278)Uwaga: ta funkcja wymaga jdb i generuje ostrzeżenie o oczekujących punktach przerwania. Określ opcję
--nowait
, aby przywrócić poprzednie działanie. - Naprawiono awarię GDB, gdy lista bibliotek była pusta.
- Naprawiono awarię GDB podczas korzystania z polecenia
stepi
poza instrukcją kciukabx pc
lubblx pc
. (numer 56962, numer 36149) - Naprawiliśmy błąd
gdbserver
w MIPS, wyszukując obiektDT_MIPS_RLD_MAP
zamiastDT_DEBUG
. (Numer 56586) - Naprawiliśmy zależność cykliczną w skrypcie ndk-build, na przykład jeśli A->B i B->B, to usunięto B z kompilacji. (Numer 56690)
- Usunięto potencjalny problem z obsługą zdarzeń w komponencie
- Inne poprawki błędów:
-
- Naprawiliśmy skrypt
ndk-build
, aby umożliwić określenie wersji Clang jako opcji wiersza poleceń (np.NDK_TOOLCHAIN_VERSION=clang3.2
). Wcześniej wystarczyło tylko określenie wersji jako zmiennej środowiskowej. - Poprawiono rozmiar gabi++
_Unwind_Exception
w przypadku celów kompilacji MIPS na 24 w przypadku korzystania z kompilatora Clang. (Zmiana 54141) - Naprawiliśmy skrypt
ndk-build
, aby mieć pewność, że utworzone biblioteki są rzeczywiście usuwane z projektów zawierających gotowe biblioteki statyczne podczas korzystania z poleceniandk-build clean
. (Zmiana 54461, Zmiana 54480) - Zmieniono opcję
NDK_ANALYZE=1
, aby była mniej szczegółowa. - Poprawiliśmy
gnu-libstdc++/Android.mk
, aby uwzględnić ścieżkębackward/
w kompilacjach korzystających ze zgodności wstecznej. (Numer 53404) - Rozwiązaliśmy problem, który powodował, że funkcja
stlport new
czasami zwracała wartości losowe. - Poprawiliśmy wartość
ndk-gdb
w celu dopasowania do kolejnościCPU_ABIS
, a nieAPP_ABIS
. (Numer 54033) - Rozwiązaliśmy problem, który powodował, że 64-bitowa kompilacja NDK w systemie MacOSX wybiera nieprawidłową ścieżkę dla kompilatora. (Numer 53769)
- Naprawiliśmy skrypty kompilacji w celu wykrywania 64-bitowego systemu Windows Vista. (Numer 54485)
- Poprawiono błąd x86
ntonl/swap32
:invalid 'asm': operand number out of range
. (Problem 54465, zmiana 57242) - Naprawiliśmy
ld.gold
, aby scalać literały ciągu znaków. - Poprawiono obsługę wyrównania dużych symboli w
ld.gold
. - Zaktualizowano
ld.gold
, aby włączyć opcję--sort-section=name
. - Naprawiliśmy GCC 4.4.3/4.6/4.7, aby pominąć opcję
-export-dynamic
w programach połączonych statycznie. GCC nie dodaje już sekcji.interp
dla programów połączonych statycznie. - Naprawiony błąd kompilacji
stlport
w GCC 4.4.3 dotyczący niespójnościtypedef
z_Unwind_Control_Block
. (Numer 54426) - Poprawiliśmy skrypty
awk
, aby obsługiwały plikiAndroidManifest.xml
utworzone w systemie Windows. Mogą one zawierać znaki\r
na końcu i powodować błędy kompilacji. (Numer 42548) - Naprawiliśmy
make-standalone-toolchain.sh
, który sonduje katalogprebuilts/
w celu wykrycia, czy host jest 32-bitowy czy 64-bitowy. - Naprawiliśmy opcję
-integrated-as
w Clang 3.2. - Naprawiliśmy dane obsługi kompaktowego modelu
pr1
ipr2
Clang 3.2 ARM EHABI. - Dodano opcję Clang
-mllvm -arm-enable-ehabi
, aby naprawić ten błąd w Clang:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Rozwiązaliśmy problem kompilacji, który występował, gdy w pliku manifestu aplikacji nie było elementu
uses-sdk
. (Numer 57015)
- Naprawiliśmy skrypt
- Inne zmiany:
-
- Poprawki nagłówka
- Zmieniono nagłówki w celu ustawienia funkcji
__set_errno
w funkcję wbudowaną, ponieważ właściwość__set_errno
werrno.h
została wycofana ilibc.so
nie eksportuje już tej funkcji. - Zmieniono tabelę
elf.h
, aby uwzględnić elementstdint.h
. (Numer 55443) - Poprawiono umieszczanie nagłówka
sys/un.h
niezależnie od innych nagłówków. (Numer 53646) - Naprawiliśmy klasyfikację wszystkich interfejsów API
MotionEvent_getHistorical
tak, aby przyjmowałyconst AInputEvent* motion_event
. (Numer 55873) - Naprawiliśmy
malloc_usable_size
, aby uzyskaćconst void*
. (Numer 55725) - Poprawiono właściwość stdint.h, aby była bardziej zgodna z C99. (Zmiana 46821)
- Zmieniono
wchar.h
, aby nie zmieniać definicjiWCHAR_MAX
iWCHAR_MIN
- Poprawiono deklarację
<inttypes.h>
w makrachPRI
iSCN
związanych ze wskaźnikami. (Numer 57218) - Zmieniliśmy nagłówek
sys/cdefs.h
, tak aby__WCHAR_TYPE__
miał wartość 32-bitową dla poziomów interfejsu API mniejszych niż 9. Oznacza to, żewchat_t
jest 32-bitowy dla wszystkich poziomów interfejsów API. Aby przywrócić poprzednie działanie, zdefiniuj zmienną logiczną_WCHAR_IS_8BIT
. (Numer 57267)
- Zmieniono nagłówki w celu ustawienia funkcji
- Dodano więcej formatowania w pakiecie NDK
docs/
i inne poprawki w dokumentacji. - Dodaliśmy obsługę techniki „cienkiego archiwum” w przypadku tworzenia bibliotek statycznych. (Numer 40303)
- Zaktualizowano skrypt
make-standalone-toolchain.sh
, aby opróczgnustl
obsługiwał też bibliotekęstlport
, gdy została określona opcja--stl=stlport
. Więcej informacji:STANDALONE-TOOLCHAIN.html
. - Zaktualizowaliśmy skrypt
make-standalone-toolchain.sh
, tak aby opcja--llvm-version=
opróczclang
iclang++
generowała skrypty$TOOLCHAIN_PREFIX-clang
i$TOOLCHAIN_PREFIX-clang++
. Pozwoliło to uniknąć przypadkowego użycia definicji clang i clang++ hosta. - Dodaliśmy 2 flagi, aby ponownie włączyć 2 optymalizacje w Clang wychodzącym na serwer, ale wyłączone w NDK, aby zapewnić większą zgodność z kodem skompilowanym przez GCC:
- Dodano flagę
-fcxx-missing-return-semantics
, aby ponownie włączyć brakującą semantykę zwrotu w Clang 3.2 i nowszych wersjach. Normalnie wszystkie ścieżki powinny się kończyć instrukcjami zwrotnymi dla funkcji zwracającej wartość. Jeśli tak nie jest, clang wstawia niezdefiniowaną instrukcję (lub pułapkę w trybie debugowania) na ścieżce bez instrukcji zwrotnej. Jeśli masz pewność, że kod jest prawidłowy, użyj tej flagi, aby umożliwić optymalizatorowi wykorzystanie niezdefiniowanego działania. Jeśli nie masz pewności, nie używaj tej flagi. Element wywołujący może nadal otrzymywać losową, nieprawidłową wartość, ale optymalizator nie ją wykorzysta i nie utrudni debugowania kodu. - Dodano flagę
-fglobal-ctor-const-promotion
, aby ponownie umożliwić awansowanie zmiennych globalnych za pomocą konstruktora statycznego jako stałych. Za pomocą tej flagi system LLVM próbuje przeprowadzić optymalizację zmiennych globalnych za pomocą konstruktorów statycznych i awansować je do stałych globalnych. Ta optymalizacja jest prawidłowa, ale może powodować niezgodność z kodem skompilowanym przez GCC. Kod może na przykład wykonać polecenieconst_cast
, aby rzutować stałą na zmienne i ją modyfikować. W GCC zmienna ma postać do odczytu i zapisu, a kod jest uruchamiany przez przypadek. W Clang zmienna Const znajduje się w pamięci tylko do odczytu i może powodować 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 generują instrukcjeldc1
orazsdc1
, aby je przenieść. Jeśli Twoja aplikacja używa alokatora niestandardowego, który nie zawsze jest dopasowany do 8-bajtowej granicy 8 bajtów nowego obiektu w taki sam sposób jak domyślny alokator, może ona ulec awarii z powodu operacjildc1
isdc1
na niedopasowanej pamięci. W takim przypadku użyj flagi-mno-ldc1-sdc1
, aby obejść problem. - Jeśli wartość
APP_PLATFORM_LEVEL
jest większa niżAPP_MIN_PLATFORM_LEVEL
, obniżono wagę zdarzenia z ostrzeżenia na informacyjną.APP_PLATFORM_LEVEL
może mieć wartość mniejszą niżAPP_PLATFORM
wjni/Application.mk
, ponieważ pakiet NDK nie ma nagłówków dla wszystkich poziomów. W tym przypadku rzeczywisty poziom jest przesunięty w dół. ElementAPP_MIN_PLATFORM_LEVEL
jest określony przezandroid:minSdkVersion
w pliku manifestu aplikacji. (numer 39752) - Dodano metody
android_getCpuIdArm()
iandroid_setCpuArm()
do:cpu-features.c
. Ułatwia to pobieranie informacji o identyfikatorze CPUID ARM. (Numer 53689) - Zmieniono
ndk-build
, aby używać w GCC 4.7as/ld
do kompilowania Clang.Uwaga: w GCC 4.7 nazwy domen
monotonic_clock
iis_monotonic
zostały zmienione odpowiednio nasteady_clock
iis_steady
. - Do skryptu
ndk-build
dodaliśmy te nowe ostrzeżenia:- Dodaliśmy ostrzeżenia, jeśli interfejs
LOCAL_LDLIBS/LDFLAGS
jest używany w modułach biblioteki statycznej. - Dodaliśmy ostrzeżenie, jeśli w konfiguracji nie ma modułu do skompilowania.
- W zasobach wspólnych lub modułach wykonywalnych (
LOCAL_LDLIBS/LDFLAGS
) dodaliśmy ostrzeżenie dotyczące używania bibliotek innych niż systemowe.
- Dodaliśmy ostrzeżenia, jeśli interfejs
- Zaktualizowano skrypty kompilacji tak, aby jeśli
APP_MODULES
nie został zdefiniowany, a w plikuAndroid.mk
są wymienione tylko biblioteki statyczne, skrypt wymusza kompilację wszystkich. (Numer 53502) - Zaktualizowano
ndk-build
, aby obsługiwały ś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
. - Zaktualizowaliśmy skrypty kompilacji, aby ostrzegały, gdy kompilator Edison Design Group (EDG) ponownie włączy interfejs
_STLP_HAS_INCLUDE_NEXT
. (Numer 53646) - Dodano zmienną środowiskową
NDK_LIBS_OUT
, aby umożliwić zastąpienie ścieżkilibraries/gdbserver
z domyślnej wartości$PROJECT/libs
. Więcej informacji:OVERVIEW.html
. - Zmieniono domyślny skrypt ndk-build, tak aby kompilować kod z zabezpieczeniem ciągu znaków formatu
-Wformat -Werror=format-security
. Możesz ustawić zasadęLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
tak, aby ją wyłączyć. Więcej informacji:ANDROID-MK.html
- Dodano obsługę drukowania w stylu STL w
ndk-gdb-py
. Więcej informacji:NDK-GDB.html
. - Dodano testy na podstawie platform googletest.
- Do skryptu kompilacji pęku narzędzi dodaliśmy powiadomienie, które ostrzega Cię, jeśli bieżąca powłoka nie jest ustawiona na
bash
.
- Poprawki nagłówka
Android NDK r8e (marzec 2013 r.)
- Ważne zmiany:
-
- Dodano zestaw 64-bitowej łańcucha narzędzi hosta (sufiks nazwy pakietu
*-x86_64.*
). Więcej informacji znajdziesz na stronachCHANGES.HTML
iNDK-BUILD.html
. - Dodano kompilator Clang 3.2. Wersja domyślna GCC 4.6 jest nadal ustawiona. Informacje o korzystaniu z kompilatora Clang znajdziesz na stronie
CHANGES.HTML
. - Dodano statyczny analizator kodu dla hostów z systemami Linux/macOSX. Informacje o korzystaniu z niego znajdziesz tutaj:
CHANGES.HTML
. - Jako funkcję eksperymentalną dodano narzędzie MCLinker dla hostów z systemem Linux/macOSX. Tag łączący
ld.gold
jest domyślny (jeśli jest dostępny), więc musisz go ręcznie włączyć. Więcej informacji:CHANGES.HTML
. - Zaktualizowano kompilację ndk, aby w przypadku zależności modułów używała sortowania topologicznego, co oznacza, że kompilacja automatycznie sortuje biblioteki określone w atrybutach
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
iLOCAL_SHARED_LIBRARIES
. Więcej informacji:CHANGES.HTML
. (Numer 39378)
- Dodano zestaw 64-bitowej łańcucha narzędzi hosta (sufiks nazwy pakietu
- Ważne poprawki błędów:
-
- Naprawiliśmy skrypt kompilacji, który tworzy wszystkie łańcuchy narzędzi w
-O2
. Łańcuchy narzędzi w poprzednich wersjach zostały nieprawidłowo skonstruowane bez optymalizacji. - Poprawiono skrypt kompilacji, który bezwarunkowo kompiluje plik Clang/llvm dla systemu MacOSX w wersji 64-bitowej.
- Usunięto błąd wewnętrznego kompilatora GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Numer 52732) - Rozwiązaliśmy problem z kompilacją, który powodował, że GCC/ARM 4.6/4.7 nie łączy kodu za pomocą 64-bitowych, niepodzielnych funkcji wbudowanych. (Numer 41297)
- Usunięto błędy niezgodności użycia elementu DIV tagu łączącego GCC 4.7. (Problem z oprogramowaniem źródłowym)
- Naprawiliśmy błąd wewnętrznego kompilatora GCC 4.7:
build_data_member_initialization, at cp/semantics.c:5790
. - Naprawiliśmy błąd wewnętrznego kompilatora GCC 4.7:
redirect_eh_edge_1, at tree-eh.c:2214
. (Numer 52909) - Naprawiliśmy błąd segfault w GCC 4.7. (Problem z GCC)
- Poprawiono rozdzielczość zegara w usłudze
<chrono>
i włączonasteady_clock
. (Numer 39680) - Poprawiono łańcuch narzędzi, w którym włączano usługę
_GLIBCXX_HAS_GTHREADS
w GCC 4.7 libstdc++. (problem 41770, problem 41859). - Rozwiązaliśmy problem z nieudanym połączeniem kodu X86 MXX/SSE z powodu braku
posix_memalign
. (Zmiana 51872) - Usunięto błąd podziału na segmenty GCC4.7/X86 w elemencie
i386.c
, funkcjadistance_non_agu_define_in_bb()
. (Zmiana 50383) - Poprawiliśmy działanie GCC4.7/X86, aby przywrócić wcześniejsze działanie
cmov
. (Problem z GCC) - Poprawiono obsługę wartości zwracanej przez NULL w przypadku
setlocale()
w libstdc++/GCC4.7. (Numer 46718) - Naprawiono
ld.gold
niezdefiniowane odniesienie do środowiska wykonawczego__exidx_start
i__exidx_start_end
. (Zmiana 52134) - Naprawiono błąd wewnętrznego kompilatora Clang 3.1 podczas korzystania z biblioteki Eigen. (Numer 41246)
- Poprawiono wewnętrzny błąd kompilatora Clang 3.1, w tym
<chrono>
w trybie C++11. (Numer 39600) - Naprawiono wewnętrzny błąd kompilatora Clang 3.1 podczas generowania kodu obiektu dla wywołania metody do jednolitego zainicjowanego elementu
rvalue
. (Numer 41387) - Poprawiono wyrównanie stosu Clang 3.1/X86. (Zmiana 52154)
- Rozwiązano problem z funkcją GNU Debugger (GDB) SIGILL podczas debugowania na Androidzie 4.1.2. (numer 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. (Numer 42448) - Poprawiono GDB
read_program_header
dla plików wykonywalnych MIPS PIE. (Zmiana 49592) - Usunięto błąd podziału na segmenty elementu
STLport
w tabeliuncaught_exception()
. (Zmiana w wersji 50236) - Naprawiono błąd autobusu
STLport
w obsłudze wyjątków spowodowany niedopasowaniem dostępu doDW_EH_PE_udata2
,DW_EH_PE_udata4
iDW_EH_PE_udata8
. - Usunięto problem z nieskończoną rekursją w Gabi++ z operatorem
nothrow new[]
. (Numer 52833) - Poprawiono nieprawidłowe przesunięcie w Gabi++ dla wskaźnika obsługi wyjątków. (Zmiana 53446)
- Usunięto nadmiarowy kod Gabi++ w obiekcie wyjątku (zmiana 53447)
- Naprawiliśmy skrypt kompilacji, który tworzy wszystkie łańcuchy narzędzi w
- Inne poprawki błędów:
-
- Poprawiono nagłówki NDK:
- Usunęliśmy zbędne definicje
size_t
,ssize_t
iptrdiff_t
. - Poprawiono nagłówek MIPS i ARM
fenv.h
. - Poprawiliśmy element
stddef.h
, który nie może ponownie definiować elementuoffsetof
, ponieważ występuje już w łańcuchu narzędzi. - Poprawiliśmy
elf.h
, aby zawierałElf32_auxv_t
iElf64_auxv_t
. (Numer 38441) - Naprawiliśmy definicje
#ifdef
C++ w pliku nagłówkaOpenSLES_AndroidConfiguration.h
. (Numer 53163)
- Usunęliśmy zbędne definicje
- Naprawiono działanie funkcji
STLport
, które po wystąpieniu błędu zabrakło pamięci zamiast dyskretnego zamknięcia. - Poprawiono nagłówki systemu i Gabi++, które umożliwiają kompilację z interfejsem API na poziomie 8 i niższym.
- Naprawiono błąd
cpufeatures
, który nie mógł analizować elementu/proc/self/auxv
. (Numer 43055) - Poprawiono zasadę
ld.gold
, która nie korzystała z libstdc++ hosta i platform Windows ani nie korzystała z bibliotekilibgcc_sjlj_1.dll
. - Naprawiono błąd Clang 3.1, który w
.vsave
generuje niespójną listę rejestrów i utraty działania asemblera. (Zmiana 49930) - Naprawiono obsługę języka Clang 3.1, aby mógł kompilować libgabi++ i przechodzić testy
test-stlport
w przypadku celów kompilacji MIPS. (Zmiana z 51961) - Poprawiono protokół Clang 3.1, aby domyślnie włączyć wyjątek tylko w języku C++, a nie w języku C.
- Naprawiliśmy kilka problemów w Clang 3.1, aby przejść przez większość testów wyjątków GNU.
- Naprawiliśmy skrypty
clang
iclang++
w autonomicznym kompilatorze NDK, aby wykrywać-cc1
i nie określać parametru-target
po jego znalezieniu. - Naprawiliśmy
ndk-build
, aby obserwować ustawienieNDK_APP_OUT
w skaliApplication.mk
. - Poprawiono błędy X86
libc.so
ilib.a
, w których brakowało funkcjisigsetjmp
isiglongjmp
zadeklarowanych już wsetjmp.h
. (numer 19851) - Poprawka GCC 4.4.3/4.6/4.7 libstdc++ do współpracy z Clang w C++ 11. (Problem z Clang)
- Stała ścieżka cygwin w argumencie przekazywana do funkcji
HOST_AWK
. - Naprawiliśmy ostrzeżenie o skrypcie
ndk-build
wyświetlane w oknach w przypadku uruchamiania z katalogu JNI projektu. (numer 40192) - Rozwiązanie problemu polegającego na tym, że skrypt
ndk-build
nie kompilował się, jeśli w definicjiLOCAL_PATH
na końcu pliku Makefile znajdują się spacje. (Numer 42841)
- Poprawiono nagłówki NDK:
- Inne zmiany:
-
- Włączona obsługa wątków w łańcuchu narzędzi GCC/MIPS.
- Zaktualizowaliśmy elementy pomocnicze GCC
__cxa_begin_cleanup
i__cxa_type_match
, aby miały domyślną widoczność względem poprzedniej ukrytej widoczności w GNU libstdc++. Więcej informacji:CHANGES.HTML
. - Zaktualizowaliśmy skrypty kompilacji, tak aby biblioteki statyczne Gabi++ i STLport były teraz kompilowane z ukrytą widocznością oprócz pomocników do obsługi wyjątków.
- Zaktualizowano kompilację, aby
STLport
był dostosowany do technologii ARM w trybie kciuka. - Dodano obsługę języka
std::set_new_handler
w Gabi++. (problem 52805) - W GNU libstdc++ włączono wywołanie systemowe
FUTEX
. - Zaktualizowano bibliotekę
ndk-build
, tak aby nie była już kopiowana do kataloguobj/local/<abi>/
projektu. (Numer 40302) - Usunięto element
__ARM_ARCH_5*__
ze skryptu ARMtoolchains/*/setup.mk
. (Numer 21132) - Dodaliśmy gotowe biblioteki GNU libstdc++ dla ARM.
- Włączono instrukcje zmiennoprzecinkowe
madd/msub/nmadd/nmsub/recip/rsqrt
MIPS z 32-bitową FPU. - Włączono optymalizator pętli grafitowej w GCC w wersjach 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łączono
polly
dla Clang 3.1 na hostach 32-bitowych z systemem Linux i w 32-bitowych hostach Max OS X, które 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 przez LLVMgold.so). Cele kompilatora MIPS nie są obsługiwane, ponieważ zasadald.gold
jest niedostępna. - Włączono
--plugin
i--plugin-opt
dla:ld.gold
w GCC w wersji 4.6/4.7. - Włączono
--text-reorder
dlald.gold
w GCC 4.7. - Skonfigurowano GNU libstdc++ z
_GLIBCXX_USE_C99_MATH
, co powoduje brak definicji skryptuisinf
w nagłówku bionicznym. Więcej informacji:CHANGES.html
. - Do skryptów kompilacji dodano element
APP_LDFLAGS
. Więcej informacji:ANDROID-MK.html
. - Skrypty kompilacji zostały zaktualizowane, aby umożliwić
NDK_LOG=0
wyłączenieNDK_LOG
. - Zaktualizowano skrypty kompilacji, aby umożliwić
NDK_HOST_32BIT=0
wyłączenie 32-bitowej łańcucha narzędzi hosta środowiska programisty. - Zmieniono domyślne flagi GCC/X86
-march=
i-mtune=
zpentiumpro
igeneric
nai686
iatom
. - Skrypty tworzenia ulepszonego łańcucha narzędzi:
- Naprawiliśmy w
build-gcc.sh
warunek wyścigu dla typu kompilacjimingw
, który uniemożliwiał znaczną część równoległego przetwarzania kompilacji. - Zaktualizowano
build-gabi++.sh
ibuild-stlport.sh
, aby można było uruchamiać je z pakietu NDK. (Numer 52835) - Naprawiono
run-tests.sh
w kolekcji narzędziMSys
. - Ulepszona obsługa 64-bitowego łańcucha narzędzi hosta i kompilacji Canadian Cross.
- Zaktualizowano skrypt
build-mingw64-toolchain.sh
do nowszej wersji. - Dodano opcję kompilacji
libgnustl_static.a
istlport_static.a
bez ukrytej widoczności.
- Naprawiliśmy w
Android NDK r8d (grudzień 2012 r.)
- Ważne zmiany:
-
- Do pakietu NDK dodaliśmy kompilator GNU Compiler Collection (GCC) 4.7. Kompilator GCC 4.6 nadal jest domyślnym, 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 kompilacji samodzielnych dodaj do
make-standalone-toolchain.sh
opcję--toolchain=
, na przykład:--toolchain=arm-linux-androideabi-4.7
Uwaga: ta funkcja jest eksperymentalna. Wypróbuj go i zgłoś ewentualne problemy.
- W przypadku
- Dodano obsługę wyjątków
stlport
za pomocą gabi++. Pamiętaj, że nowa wersja gabi++ zależy oddlopen
i powiązanego kodu, co oznacza, że:- Nie możesz już tworzyć statycznych plików wykonywalnych przy użyciu opcji
-static
ani dodawać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 Twój projekt łączy się z użyciem uprawnień
-nostdlib
i {-Wl,--no-undefined}, musisz ręcznie uwzględnić opcję-ldl
.
CPLUSPLUS-SUPPORT.html
.Uwaga: ta funkcja jest w wersji eksperymentalnej i działa lepiej z kompilatorami GCC 4.6/4.7 niż z GCC 4.4.3 lub Clang 3.1. Wypróbuj go i zgłoś ewentualne problemy.
- Nie możesz już tworzyć statycznych plików wykonywalnych przy użyciu opcji
- Dodano opcję
-mstack-protector-guard=
w architekturze x86, która umożliwia wybór między globalną ścieżką domyślną zgodną ze starszą biblioteką Androida C (bionic) a nową ścieżką tls (%gs:20) dla systemów-fstack-protector
,-fstack-protector-all
i-fstack-protector-strong
, która korzysta z kompilatorów GCC 4.6 i wyższych.Uwaga: samo ustawienie
-mstack-protector-guard
nie włącza żadnych opcji-fstack-protector*
. - Dodano funkcję
android_setCpu()
do interfejsusources/android/cpufeatures/cpu-features.c
, która jest używana, gdy automatyczne wykrywanie przez/proc
nie jest możliwe na Androidzie 4.1 i nowszych. (numer Chromium 164154)
- Do pakietu NDK dodaliśmy kompilator GNU Compiler Collection (GCC) 4.7. Kompilator GCC 4.6 nadal jest domyślnym, więc musisz wyraźnie włączyć nową wersję w ten sposób:
- Ważne poprawki błędów:
-
- Naprawiono niepotrzebne odbudowywanie plików obiektów w przypadku korzystania ze skryptu
ndk-build
. (numer 39810) - Naprawiliśmy błąd tagu łączącego w wersji NDK 8c dla systemu Mac OS X 10.6.x, który powodował błąd:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
Przyczyną tego problemu było kompilacja plików binarnych w systemie Mac OS X 10.7, które były niezgodne z systemem Mac OS 10.6.x i NDK. - Z samodzielnego skryptu kompilacji Clang++ usunięto opcje
-x c++
. (numer 39089) - Rozwiązaliśmy problemy z używaniem opcji
NDK_TOOLCHAIN_VERSION=clang3.1
w Cygwin. (Numer 39585) - Naprawiliśmy skrypt
make-standalone-toolchain.sh
, aby umożliwić generowanie samodzielnego łańcucha narzędzi za pomocą środowisk Cygwin lub MinGW. Powstały w ten sposób łańcuch narzędzi może być używany w środowiskach Cygwin, MingGW lub CMD.exe. (numer 39915, numer 39585) - Dodano brakującą opcję
SL_IID_ANDROIDBUFFERQUEUESOURCE
w kompilacjach Androida 14 dla systemów ARM i X86. (Numer 40625) - Naprawiono wykrywanie procesora x86 w funkcji
ANDROID_CPU_X86_FEATURE_MOVBE
. (numer 39317) - Rozwiązaliśmy problem, który uniemożliwiał standardowej bibliotece szablonów (STL) używanie źródeł C++, które nie mają rozszerzenia pliku
.cpp
. - Naprawiono błąd wewnętrznego kompilatora ARM GCC 4.6 w przypadku ponownego załadowania1.c:1061. (numer 20862)
- Usunięto błąd wewnętrznego kompilatora ARM GCC 4.4.3 at emit-rtl.c:1954. (Numer 22336)
- Usunięto błąd wewnętrznego kompilatora ARM GCC 4.4.3 pod adresem postreload.c:396. (Numer 22345)
- Rozwiązaliśmy problem z pomijaniem funkcji lambda w GCC 4.6/4.7. (Numer 35933)
- Naprawiono niepotrzebne odbudowywanie plików obiektów w przypadku korzystania ze skryptu
- Inne poprawki błędów:
-
- Poprawki pliku nagłówka NDK:
- Poprawiono błędy
__WINT_TYPE__
iwint_t
, aby były tego samego typu. - Poprawiono literówkę w tekście
android/bitmap.h
. (Numer 15134) - Poprawiono literówkę w tekście
errno.h
. - Dodano sprawdzanie obecności aplikacji
__STDC_VERSION__
w lokalizacjisys/cdefs.h
. (Numer 14627) - Zmieniono kolejność nagłówków w sekcjach
byteswap.h
idirent.h
. - Poprawiliśmy
limits.h
, aby uwzględniał parametrpage.h
, który udostępnia ustawieniaPAGE_SIZE
. (numer 39983) - Stały typ zwrotu
glGetAttribLocation()
iglGetUniformLocation()
zint
doGLint
. - Poprawiono stałą
__BYTE_ORDER
w kompilacjach x86. (numer 39824)
- Poprawiono błędy
- Naprawiliśmy skrypt
ndk-build
, aby w kompilacjach ARM nie zastępował pola-Os
wartością-O2
. - Naprawiliśmy skrypty kompilacji pozwalające na zastępowanie ustawień
HOST_AWK
,HOST_SED
iHOST_MAKE
. - Rozwiązanie problemu z
ld.gold
w kompilacjachfsck_msdos
łączących obiekty utworzone przez kompilator Intel C/C++ (ICC). - Poprawiono obsługę ARM EHABI w Clang, aby zapewnić zgodność ze specyfikacjami.
- Naprawiliśmy błąd GNU Debugger (GDB) w celu skrócenia czasu potrzebnego na chodzenie po mapie linków celu podczas zdarzeń
solib
. (Numer 38402) - Rozwiązaliśmy problem z brakującym plikiem
libgcc.a
podczas łączenia bibliotek udostępnionych.
- Poprawki pliku nagłówka NDK:
- Inne zmiany:
-
- Wbudowane 64-bitowe wbudowane funkcje atomowe dla ARM do GCC 4.6.
- Dodaliśmy dokumentację na temat opóźnienia wyjścia audio, a także inną dokumentację i poprawki.
- Naprawiono kompilacje debugowania za pomocą Clang, dzięki czemu funkcje niepuste wzbudzają teraz sygnał
SIGILL
w przypadku ścieżek bez instrukcji zwrotnej. - Zaktualizowano
make-standalone-toolchain.sh
, aby akceptował sufiks-clang3.1
, co odpowiada dodaniu--llvm-version=3.1
do łańcucha narzędzi GCC 4.6. - Adres URL raportu o błędzie GCC i Clang został zaktualizowany na: https://source.android.com/source/report-bug s.html
- Dodano obsługę ARM ELF do interfejsu
llvm-objdump
. - Pominięte ostrzeżenie traktowania danych wejściowych c jako c++ w kompilacjach Clang.
- Zaktualizowana kompilacja: skompilowano i umieszczono w
lib32/
tylko 32-bitową wersję systemulibiberty.a
.
Android NDK r8c (listopad 2012 r.)
- Ważne zmiany:
-
- Do pakietu NDK dodano kompilator Clang 3.1. Wersja domyślna GNU Compiler Collection (GCC) 4.6 jest nadal domyślna, dlatego musisz wyraźnie włączyć opcję kompilatora Clang. Aby to zrobić, wykonaj te czynności:
- W przypadku
ndk-build
wyeksportujNDK_TOOLCHAIN_VERSION=clang3.1
lub dodaj to ustawienie zmiennej środowiskowej doApplication.mk
. - W przypadku samodzielnych kompilacji dodaj do
make-standalone-toolchain.sh
plik--llvm-version=3.1
i zastąpCC
iCXX
w pliku tworzonego przez<tool-path>/bin/clang
i<tool-path>/bin/clang++
. Aby dowiedzieć się więcej, wejdź naSTANDALONE-TOOLCHAIN.html
.
Uwaga: ta funkcja jest eksperymentalna. Wypróbuj go i zgłoś ewentualne problemy.
- W przypadku
- Dodano złoty linker
ld.gold
dla łańcucha narzędzi systemu Windows. Złoty linker jest też domyślnym narzędziem dla ARM i X86 na wszystkich hostach. Aby użyć tagu łączącegold.bfd
, możesz go zastąpić, dodającLOCAL_LDFLAGS += -fuse-ld=bfd
doAndroid.mk
lub przekazując-fuse-ld=bfd
do wiersza poleceń g++/clang++, który przeprowadza łączenie. - Dodaliśmy sprawdzanie spacji w ścieżce NDK do skryptów
ndk-build[.cmd]
indk-gdb
, aby zapobiec trudnym do zdiagnozowaniu błędów kompilacji. - Wprowadzono te zmiany w obsłudze na poziomie interfejsu API:
- Zmodyfikowano logikę kompilacji, tak aby projekty, które określają od
android-10
doandroid-13
wAPP_PLATFORM
,project.properties
lubdefault.properties
, łączą zandroid-9
zamiastandroid-14
. - Zaktualizowana kompilacja, dzięki której pliki wykonywalne korzystające z Androida-16 (Jelly Bean) lub nowszego są skompilowane z opcją
-fPIE
dla plików wykonywalnych niezależnych od pozycji (PIE). Nowa opcjaAPP_PIE
umożliwia kontrolowanie tego działania. Aby dowiedzieć się więcej, wejdź naAPPLICATION-MK.html
.Uwaga: wszystkie poziomy interfejsu API powyżej 14 nadal są powiązane z interfejsem
platforms/android-14
i nie dodano żadnego nowego parametruplatforms/android-N
. - Zmodyfikowano
ndk-build
, aby wyświetlać ostrzeżenia, jeśli skorygowany poziom interfejsu API jest większy niżandroid:minSdkVersion
wAndroidManifest.xml
projektu.
- Zmodyfikowano logikę kompilacji, tak aby projekty, które określają od
- Zaktualizowaliśmy bibliotekę pomocniczą
cpu-features
, aby zawierała więcej funkcji związanych z ARM. Aby dowiedzieć się więcej, wejdź nasources/android/cpufeatures/cpu-features.h
. - Zmodyfikowano długi podwójny rozmiar na platformie X86, aby miał 8 bajtów. Ten typ danych ma teraz taki sam rozmiar jak typ zmiennoprzecinkowy, ale nadal jest traktowany jako osobny typ.
- Zaktualizowano kompilację dla
APP_ABI=armeabi-v7a
:- Zmodyfikowano ten typ kompilacji, aby przekazać parametr
-march=armv7-a
do tagu łączącego. Ta zmiana zapewnia prawidłowe połączenie bibliotek w wersji 7 icrt*.o
. - Do interfejsu
ndk-build
dodano pole-mfpu=vfpv3-d16
zamiast opcji-mfpu=vfp
używanej w poprzednich wersjach.
- Zmodyfikowano ten typ kompilacji, aby przekazać parametr
- Do pakietu NDK dodano kompilator Clang 3.1. Wersja domyślna GNU Compiler Collection (GCC) 4.6 jest nadal domyślna, dlatego musisz wyraźnie włączyć opcję kompilatora Clang. Aby to zrobić, wykonaj te czynności:
- Ważne poprawki błędów:
-
- Rozwiązaliśmy problem, który powodował, że uruchomienie funkcji
make-standalone-toolchain.sh
z uprawnieniami użytkownika root powodowało, że niektórzy użytkownicy nie mieli dostępu do samodzielnego łańcucha narzędzi. (Numer 35279)- Wszystkie pliki i pliki wykonywalne w pakiecie wersji NDK mają uprawnienia do odczytu i wykonywania dla wszystkich.
- Własność/grupa elementów
libstdc++.a
jest teraz zachowywana po skopiowaniu.
- Usunięto nadmiarowy plik
\r
z gotowego systemu Windowsecho.exe
. Nadmiarowy zasób\r
spowodował awarię interfejsugdb.setup
w narzędziu GNU Debugger (GDB), ponieważ stał się niewłaściwie częścią ścieżki. (numer 36054) - Rozwiązaliśmy problemy z kompilacjami równoległymi w systemie Windows, które czasami nie przynosiły błędów z powodu problemów z czasem w implementacji
host-mkdir
. (Numer 25875) - Naprawiliśmy błąd polegający na tym, że
libstdc++
w GCC 4.4.3 GNU domyślnie nie scala nazwtypeinfo
. Więcej informacji:toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (numer 22165) - Rozwiązaliśmy problem z kontekstem
null
w GCC 4.6cp/mangle.c::write_unscoped_name
, który powodował awarię GCC, gdy kontekst jest ustawiony jakonull
i brak odwołania wTREE_CODE
. - Naprawiono awarie GCC 4.4.3 w definicjach typów liczb zmiennoprzecinkowych specyficznych dla ARM NEON. (Numer 34613)
- Naprawiono wewnętrzną implementację
_IteWrapper::operator*()
w usłudzeSTLport
, w wyniku której zwracana była nieaktualna lokalizacja stosu, w której znajduje się wskazywana wartość, co powodowało awarie w środowisku wykonawczym. (Numer 38630) - Poprawki związane z architekturą ARM:
- Naprawiliśmy błąd
g++
w architekturze ARM GCC 4.4.3/4.6, który nie ostrzegał o zmianie zarządzania <va_list> w GCC 4.4. Obejście za pomocą przełącznika-Wno-psabi
, które pozwala uniknąć tego ostrzeżenia, nie jest już wymagane. - Rozwiązaliśmy problem, który powodował, że w projekcie z sufiksami
.arm
lub.neon
wLOCAL_SRC_FILES
również był używany parametrAPP_STL
. W przypadkuAPP_STL
skryptndk-build
wyszukuje pliki C++ w plikuLOCAL_SRC_FILES
przed dodaniem ścieżek STLheader/lib
do kompilacji. Zmodyfikowano funkcjęndk-build
, aby odfiltrowywać sufiksy.arm
i.neon
przed wyszukiwaniem. W przeciwnym razie elementy w językuLOCAL_SRC_FILES
, np.myfile.cpp.arm.neon
, nie będą skompilowane jako kod C++. - Poprawiliśmy
binutils-2.21/ld.bfd
o możliwość łączenia obiektów ze starszych plików binutil beztag_FP_arch
, co powodowało błędy asercji w GNU Binutils. (numer 35209) - Usunięto ostrzeżenie o nieznanym atrybucie obiektu EABI 44, gdy usługa
binutils-2.19/ld
łączy gotowy obiekt przez nowszego obiektubinutils-2.21
. - Rozwiązaliśmy problem z kompilacją pliku GNU
stdc++
z elementami-mthumb
i-march=armv7-a
. W tym przypadku zmodyfikowano parametrmake-standalone-toolchain.sh
, aby zapełnił parametrheaders/libs
w podkataloguarmv7-a/thumb
. (Numer 35616) - Usunięto błąd nie można rozwiązać problemu relokacji R_ARM_THM_CALL. (Numer 35342)
- Naprawiono błąd wewnętrzny kompilatora w
reload1.c:3633
, który wynikał z tego, że backend ARM oczekiwał niewłaściwego typu operacji podczas rozszerzenia Sign-Extend zchar
. (numer GCC: 50099) - Naprawiono błąd wewnętrzny kompilatora z wartością przesunięcia ujemnego. (Problem z GCC)
- Naprawiliśmy błąd
- Poprawiono
-fstack-protector
dla X86, który jest też domyślną wartością docelowego interfejsu ABIndk-build
x86. - Poprawki związane z MIPS:
- Poprawiono zgodność
STLport
z końcówką przez ustawienie zasady_STLP_LITTLE_ENDIAN
na 1 podczas kompilowania MIPSlibstlport_*
. - Rozwiązaliśmy problem
__builtin_unreachable
w GCC podczas kompilowania LLVM. (numer GCC: 54369) - Poprawka wsteczna procesu kompilacji
cc1
zużywająca 100% procesora. (numer GCC: 50380)
- Poprawiono zgodność
- Poprawki specyficzne dla narzędzia GNU Debugger:
- Wyłączono obsługę Pythona w gdb-7.x podczas kompilacji. W przeciwnym razie funkcja konfiguracji gdb-7.x może wykorzystać dowolną wersję Pythona dostępną na hoście i kompilację
gdb
zależność z konkretną wersją Pythona. (Numer 36120) - Naprawiono
ndk-gdb
, gdyAPP_ABI
zawiera wartośćall
i nie pasuje do żadnej ze znanych architektur. (Numer 35392) - Poprawiono obsługę nazwy ścieżki systemu Windows przez zachowywanie znaku
:
, jeśli wygląda na to, że może on być częścią ścieżki systemu Windows rozpoczynającej się od litery dysku. (numer GDB: 12843) - Naprawiono dodawanie obsługi sprzętowych punktów przerwania na ARM w
gdbserver
. (problem z GDB) - Dodaliśmy poprawkę, która umożliwia odczyt bieżącego elementu
solibs
tylko wtedy, gdy tag łączący jest spójny. Ta zmiana przyspiesza obsługę zdarzeńsolib
. (Numer 37677) - Dodano poprawkę, aby wielokrotnie podejmować próby znalezienia punktów przerwania (
solib
). Teraz GDB ponawia próbęenable_break()
podczas każdego wywołaniasvr4_current_sos()
, aż się uda. (Zmiana 43563) - Rozwiązaliśmy problem, który powodował, że funkcja
gdb
nie zatrzymywała się w punktach przerwania umieszczonych w bibliotekachdlopen-ed
. (Numer 34856) - Poprawiliśmy wartość
SIGILL
w dynamicznym tagu łączącym podczas wywoływania funkcjidlopen()
w systemie, w którym element/system/bin/linker
jest pozbawiony symboli, a zaimplementowanyrtld_db_dlactivity()
jest zaimplementowany jakoThumb
, ponieważ nie zachowano wartościLSB
zsym_addr
. (Numer 37147)
- Wyłączono obsługę Pythona w gdb-7.x podczas kompilacji. W przeciwnym razie funkcja konfiguracji gdb-7.x może wykorzystać dowolną wersję Pythona dostępną na hoście i kompilację
- Rozwiązaliśmy problem, który powodował, że uruchomienie funkcji
- Inne poprawki błędów:
-
- Poprawiono nagłówki NDK:
- Naprawiono kod
arch-mips/include/asm/*
, który został nieprawidłowo usunięty z pierwotnego jądra systemu. (Zmiana 43335) - Zastąpiono dane elementu struktury (
__unused
) wartością__linux_unused
w regionachlinux/sysctl.h
ilinux/icmp.h
, aby uniknąć konfliktu z elementem#define __unused
w plikusys/cdefs.h
. - Poprawiono
fenv.h
w przypadku zamkniętych funkcji C z__BEGIN_DECLS
i__END_DECLS
. - Usunięto niezaimplementowane funkcje w języku
malloc.h
. - Poprawiliśmy definicję
stdint.h
elementuuint64_t
w kompilatorach ANSI. (wydanie 1952) - Naprawiliśmy makra procesora wstępnego w pliku
<arch>/include/machine/*
. - Zastąpiliśmy
link.h
w przypadku 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
- Naprawiono nadmiar bufora w
ndk-stack-parser
. - Naprawiliśmy
_STLP_USE_EXCEPTIONS
, jeśli nie zdefiniowano tej funkcji, aby pomijać wszystkie deklaracje i zastosowania właściwości__Named_exception
. Kompilowanie i używanie ustawień__Named_exception
ma miejsce tylko wtedy, gdySTLport
może używać wyjątków. - Poprawiono tworzenie pakietów NDK tylko dla systemu Linux bez konieczności kompilowania kodu dla systemu Windows. Aby przeprowadzić ten typ kompilacji, użyj tych ustawień:
./build/tools/make-release.sh --force --systems=linux-x86
- Naprawiliśmy
libc.so
, aby nie eksportować danychatexit()
i__do_handler
. W przypadku kompilacji ARM te symbole są eksportowane przez wersję systemową biblioteki C, aby umożliwić obsługę starszych bibliotek natywnych. Wygenerowane przez NDK nie powinny się odwoływać do nich bezpośrednio. Zamiast tego każda biblioteka udostępniona lub plik wykonywalny powinien zawierać własną wersję tych symboli udostępnianą przezcrtbegin_*.o
.Jeśli Twój projekt jest połączony z opcjami
-nostdlib -Wl,--no-undefined
, musisz podać własny projekt__dso_handle
, bo w tym przypadkucrtbegin_so.o
nie jest połączony. Zawartość pola__dso_handle
nie ma znaczenia, jak widać w tym przykładowym kodzie:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Poprawiono dekoder symboli dla ARM używany w
objdump
w przypadku wpisówplt
do generowania bardziej czytelnej formyfunction@plt
. - Z biblioteki
libc.so
platformy X86 usunęliśmy te symbole wprowadzone w GCC 4.6libgcc.a
:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
i__aeabi_unwind_cpp_pr2
. - Nieużywane
.ctors
,.dtors
i.eh_frame
zostały usunięte z MIPScrt*_so.S
. - Zaktualizowano tabelę
ndk-gdb
, tak aby używała tylko ostatniego wiersza danych wyjściowych dotyczących zasobuDUMP_XXXX
ndk-build
. Ta zmiana sprawi, że jeśliApplication.mk
lubAndroid.mk
wydrukuje coś ze składnią$(info ...)
, nie zostanie on wstrzykiwany w wynikuDUMP_XXXX
. (Więcej informacji)
- Poprawiono nagłówki NDK:
- Inne zmiany:
-
- Usunięto nagłówki
arch-x86
iarch-mips
z tekstuplatforms/android-[3,4,5,8]
. Nagłówki były niekompletne, ponieważ interfejsy ABI X86 i MIPS są obsługiwane tylko od interfejsu API 9 lub nowszego. - W uproszczeniu c++ dodaj ścieżkę do samodzielnych pakietów, tak jak na przykładzie poniżej.
(Numer 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- Poprawiono błąd
ndk-build
, który domyślnie rozpoznaje więcej rozszerzeń plików C++:.cc .cp .cxx .cpp .CPP .c++ .C
. Nadal możesz użyćLOCAL_CPP_EXTENSION
, aby zastąpić te ustawienia rozszerzeń. - Rozwiązaliśmy problem w
samples/san-angeles
, który powodował wyświetlanie czarnego ekranu lub blokowanie ramki przy ponownym uruchomieniu. - W próbkach NDK zastąpiliśmy wycofane interfejsy API.
(Numer 20017)
hello-gl2
od Androida 5 na android-7native-activity
od Androida 9 na Androida 10native-audio
od Androida 9 na Androida 10native-plasma
od Androida 9 na Androida 10
- W sekcji
.note.android.ident
(zdefiniowanej wcrtbegin_static/dynamic.o
) dodaliśmy nowe elementy marki dla plików wykonywalnych na Androida o prostszym schemacie, aby narzędzia do debugowania mogły odpowiednio działać. Element struktury i jego wartości są określone 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 marki w sekcji
.note.ABI-tag
zostały wycofane. - Dodano nowy skrypt
run-tests-all.sh
, który wywołujerun-tests.sh
istandalone/run.sh
z różnymi warunkami. Skryptrun-tests.sh
działa bez opcji--abi
i jest ulepszony, aby kompilować większość testów ze wszystkich obsługiwanych interfejsów ABI i uruchamiać je na wszystkich podłączonych urządzeniach.
- Usunięto nagłówki
Android NDK r8b (lipiec 2012 r.)
Głównymi funkcjami w tej wersji są 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 (API Level 16).
- Ważne poprawki błędów:
-
- Naprawiono problemy
LOCAL_SHORT_COMMANDS
dotyczące bibliotek statycznych w systemach macOS i Windows Cygwin. Generowanie pliku listy jest szybsze i nie jest generowane ponownie, aby uniknąć powtarzających się odbudowy projektu. - Naprawiono kilka problemów w
ndk-gdb
:- Zaktualizowaliśmy narzędzie, aby przekazywać flagi
-e
,-d
i-s
, aby zwiększyć spójność narzędzia adb. - Zaktualizowano narzędzie, aby akceptować nazwy seryjne urządzeń zawierające spacje.
- Zaktualizowane narzędzie do pobierania informacji o elemencie
/system/bin/link
, więc taggdb
na hoście może ustawić punkt przerwania w__dl_rtld_db_dlactivity
i zwróć uwagę na działanie tagu łączącego (np. ponowne skanowanie symbolisolib
przy wywołaniu elementudlopen()
).
- Zaktualizowaliśmy narzędzie, aby przekazywać flagi
- Naprawiliśmy błąd
ndk-build clean
w systemie Windows, którego nie udało się usunąć:./libs/*/lib*.so
. - Poprawiliśmy
ndk-build.cmd
, aby w przypadku niepowodzeniamake
zwracał wartośćERRORLEVEL
inną niż 0. - Poprawiliśmy działanie funkcji
libc.so
, która uniemożliwiała nieprawidłowe eksportowanie symboli__exidx_start
i__exidx_end
. - Naprawiliśmy
SEGV
podczas wycofywania stosu poza polem__libc_init
w przypadku ARM i MIPS.
- Naprawiono problemy
- Ważne zmiany:
-
- Dodaliśmy łańcuch narzędzi GCC 4.6 (
binutils
2.21 zgold
i GDB 7.3.x) do współistnienia z oryginalnym łańcuchem narzędzi GCC 4.4.3 (binutils
2.19 i GDB 6.6).- GCC 4.6 jest teraz domyślnym łańcuchem narzędzi. Aby wybrać oryginał, możesz ustawić
NDK_TOOLCHAIN_VERSION=4.4.3
w menuApplication.mk
. - Obsługa tagu łączącego
gold
jest dostępna tylko w przypadku architektur ARM i x86 na hostach hostów z systemem Linux i macOS. Ta obsługa jest domyślnie wyłączona. Aby włączyć tę funkcję, dodajLOCAL_LDLIBS += -fuse-ld=gold
w usłudzeAndroid.mk
. - Programy skompilowane z zasadą
-fPIE
wymagają nowego pakietuGDB
do debugowania, w tym plików binarnych w obrazach systemu Androida 4.1 (poziom interfejsu API 16). - Narzędzie
binutils
2.21ld
zawiera poprawki przeniesione z wersji 2.22 do wersji 2.22:- Naprawiliśmy błąd
ld --gc-sections
, który nieprawidłowo zachowuje odniesienia do zombie do bibliotek zewnętrznych. (więcej informacji). - Naprawiliśmy polecenie ARM
strip
, aby zachować oryginalne elementyp_align
ip_flags
w sekcjiGNU_RELRO
, jeśli są prawidłowe. Bez tej poprawki nie udało się debugować programów utworzonych przy użyciu-fPIE
. (więcej informacji)
- Naprawiliśmy błąd
- Wyłączono optymalizację
sincos()
, aby zapewnić zgodność ze starszymi platformami.
- GCC 4.6 jest teraz domyślnym łańcuchem narzędzi. Aby wybrać oryginał, możesz ustawić
- Zaktualizowano opcje kompilacji, aby włączyć domyślnie bit Never eXecute (NX) i zabezpieczenia
relro
/bind_now
:- Dodano
--noexecstack
w Asemerze i-z noexecstack
do tagu łączącego, który zapewnia ochronę NX przed atakami typu przepełnienia bufora przez włączenie bitu NX na stosie i stercie. - Dodano
-z relro
i-z now
do tagu łączącego służącego do wzmacniania sekcji danych wewnętrznych po połączeniu z nimi w celu ochrony przed lukami w zabezpieczeniach spowodowanymi uszkodzeniem pamięci. (więcej informacji: 1, 2) - Te funkcje możesz wyłączyć za pomocą tych opcji:
- Wyłącz ochronę NX, ustawiając opcję
--execstack
dla zbioru danych i-z execstack
dla tagu łączącego. - Wyłącz wzmacnianie danych wewnętrznych, ustawiając opcje
-z norelro
i-z lazy
tagu łączącego. - Wyłącz te zabezpieczenia w pakiecie 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"
Aby dowiedzieć się więcej, wejdź na
docs/ANDROID-MK.html
. - Wyłącz ochronę NX, ustawiając opcję
- Dodano
- W sekcji
.note.ABI-tag
(w sekcjicrtbegin_static/dynamic.o
) dodaliśmy oznaczenia marki plików wykonywalnych na Androida, by narzędzia do debugowania mogły podjąć odpowiednie działania. Element struktury i jego 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 */ }
- Dodaliśmy łańcuch narzędzi GCC 4.6 (
- Inne poprawki błędów:
-
- Naprawiono błąd relokacji elementu
mips-linux-gnu
, który został skrócony, aby dopasować ją do problemu:R_MIPS_TLS_LDM
. (więcej informacji) - Naprawiono błędy narzędzia
ld
podczas korzystania z--gc-sections
. (więcej informacji) - Naprawiono problem z liczeniem MIPS na poziomie
GOT_PAGE
. (więcej informacji) - Naprawiliśmy link z symbolem ostrzeżenia w polu
mips_elf_count_got_symbols
. - Naprawiliśmy link z symbolem ostrzeżenia w polu
mips_elf_allocate_lazy_stub
. - Przeniesiono MIPS
.dynamic
do segmentu danych, aby można było zapisywać dane. - Zastąpiliśmy zakodowane na stałe wartości symboli prawidłowymi rozmiarami segmentów w przypadku MIPS.
- Z wartości domyślnych w łańcuchu narzędzi MIPS usunięto opcję
-mno-shared
. Wartością domyślną łańcucha narzędzi Androida jest-fPIC
(lub-fpic
, jeśli jest obsługiwany). Jeśli nie określisz dokładnie-mshared
,-fpic
,-fPIC
,-fpie
lub-fPIE
, kompilator MIPS doda-mno-shared
, który wyłącza obraz PIC. Naprawiliśmy kompilator, który nie dodał w tym przypadku właściwości-mno-shared
. - Poprawiliśmy nieprawidłowe nazwy pakietów w przykładach
hello-jni
itwo-libs
, aby umożliwić kompilowanie zawartego w nim projektutests
.
- Naprawiono błąd relokacji elementu
- Inne zmiany:
-
- Zmieniono lokalizacje plików binarnych:
- Element
gdbserver
został przeniesiony ztoolchain/<arch-os-ver>/prebuilt/gdbserver
doprebuilt/android-<arch>/gdbserver/gdbserver
. - Zmieniliśmy nazwę prefiksu ł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
w przypadku skompilowania z GCC 4.6 lubsources/cxx-stl/gnu-libstdc++/4.4.3
po skompilowaniu z GCC 4.4.3. - Elementy typu
libbfd.a
ilibintl.a
zostały przeniesione zlib/
dolib32/
.
- Element
- Dodaliśmy i udoskonaliliśmy różne skrypty w łańcuchu narzędzi do rekompilowania i testowania NDK:
- Dodano
build-mingw64-toolchain.sh
w celu wygenerowania nowego łańcucha narzędzi hostowanego w systemie Linux, który generuje pliki wykonywalne Win32 i Win64. - Zwiększyliśmy szybkość działania środowiska
download-toolchain-sources.sh
za pomocą poleceniaclone
icheckout
tylko w przypadku katalogów, które są potrzebne 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 sprawdzać zawartość danego katalogu instalacji NDK lub istniejącego pakietu NDK. - Ponownie utworzono samodzielne testy (
tests/standalone/run.sh
).
- Dodano
- Usunęliśmy nagłówek
if_dl.h
ze wszystkich platform i architektur. Opisane w nim elementyAF_LINK
isockaddr_dl
odnoszą się do BSD (czyli nie występują w systemie Linux).
- Zmieniono lokalizacje plików binarnych:
Android NDK r8 (maj 2012 r.)
Ta wersja pakietu NDK obejmuje obsługę interfejsu MIPS ABI i kilka dodatkowych poprawek.
- Nowe funkcje:
-
- Dodaliśmy obsługę interfejsu MIPS ABI, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem opartych na MIPS. Główne funkcje MIPS to specyficzne dla MIPS łańcuchy narzędzi MIPS, nagłówki systemu, biblioteki i obsługa debugowania. Więcej informacji o obsłudze MIPS znajdziesz w sekcji
docs/CPU-MIPS.html
w pakiecie NDK.Domyślnie kod jest generowany w przypadku urządzeń z procesorami ARM. Możesz dodać
mips
do definicjiAPP_ABI
w plikuApplication.mk
, aby utworzyć kompilację dla platform MIPS. Na przykład ten wiersz instruujendk-build
, aby skompilował kod dla 3 różnych interfejsów ABI:APP_ABI := armeabi armeabi-v7a mips
O ile nie korzystasz ze źródeł montażu o danej architekturze, takich jak kod asemblera ARM, nie musisz modyfikować plików
Android.mk
, aby utworzyć kod maszyny MIPS. - Podczas wywoływania funkcji
make-standalone-toolchain.sh
możesz utworzyć samodzielny łańcuch narzędzi MIPS, używając opcji--arch=mips
. Więcej informacji znajdziesz tutaj:docs/STANDALONE-TOOLCHAIN.html
.
Uwaga: aby mieć pewność, że Twoje aplikacje są dostępne dla użytkowników tylko wtedy, gdy umożliwiają one ich uruchamianie, Google Play filtruje je na podstawie zawartych w nich informacji o zestawie instrukcji. aby włączyć filtrowanie, nie musisz nic robić. Dodatkowo system Android sprawdza aplikację podczas instalacji i umożliwia kontynuowanie instalacji tylko wtedy, gdy aplikacja udostępnia bibliotekę skompilowaną pod kątem architektury procesora urządzenia.
- Dodaliśmy obsługę interfejsu MIPS ABI, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem opartych na MIPS. Główne funkcje MIPS to specyficzne dla MIPS łańcuchy narzędzi MIPS, nagłówki systemu, biblioteki i obsługa debugowania. Więcej informacji o obsłudze MIPS znajdziesz w sekcji
- Ważne poprawki błędów:
-
- Usunięto literówkę w implementacji GAbi++, która powodowała, że wynik
dynamic_cast<D>(b)
obiektu klasy podstawowejb
do klasy derywowanejD
jest nieprawidłowo dopasowany w kierunku przeciwnym do klasy podstawowej. (Numer 28721) - Rozwiązaliśmy problem, który powodował, że
make-standalone-toolchain.sh
nie kopiował(a) plikulibsupc++.*
.
- Usunięto literówkę w implementacji GAbi++, która powodowała, że wynik
- Inne poprawki błędów:
-
- Naprawiliśmy
ndk-build.cmd
, aby zapewnić prawidłowe działaniendk-build.cmd
, nawet jeśli użytkownik ponownie zdefiniował zmienną środowiskowąSHELL
, co może ulec zmianie podczas instalowania różnych narzędzi programistycznych w środowiskach Windows.
- Naprawiliśmy
Android NDK r7c (kwiecień 2012 r.)
Ta wersja pakietu NDK zawiera ważną poprawkę dla urządzeń z procesorami Tegra2 oraz kilka dodatkowych poprawek i ulepszeń:
- Ważne poprawki błędów:
-
- Naprawiliśmy błąd związany z plikami binarnymi GNU STL armeabi-v7a na urządzeniach innych niż NEON. Pliki dostarczone z NDK r7b nie zostały prawidłowo skonfigurowane, co powodowało awarię urządzeń opartych na Tegra2 i innych, gdy próbujesz użyć pewnych funkcji zmiennoprzecinkowych (np.
cosf
,sinf
iexpf
).
- Naprawiliśmy błąd związany z plikami binarnymi GNU STL armeabi-v7a na urządzeniach innych niż NEON. Pliki dostarczone z NDK r7b nie zostały prawidłowo skonfigurowane, co powodowało awarię urządzeń opartych na Tegra2 i innych, gdy próbujesz użyć pewnych funkcji zmiennoprzecinkowych (np.
- Ważne zmiany:
-
- Dodaliśmy obsługę niestandardowych katalogów danych wyjściowych za pomocą zmiennej środowiskowej
NDK_OUT
. Po zdefiniowaniu ta zmienna jest używana do przechowywania wszystkich wygenerowanych plików pośrednich zamiast zmiennej$PROJECT_PATH/obj
. Ta zmienna jest również rozpoznawana przez dyrektywęndk-gdb
. - Dodaliśmy obsługę tworzenia modułów z setkami, a nawet tysiącami plików źródłowych przez określenie
LOCAL_SHORT_COMMANDS
wtrue
wAndroid.mk
.Ta zmiana wymusza na systemie kompilacji NDK większość opcji narzędzia łączącego i narzędzia archiwizującego w plikach list w celu obejścia ograniczeń długości wiersza poleceń. Aby dowiedzieć się więcej, wejdź na
docs/ANDROID-MK.html
.
- Dodaliśmy obsługę niestandardowych katalogów danych wyjściowych za pomocą zmiennej środowiskowej
- Inne poprawki błędów:
-
- Naprawiono implementację
android_getCpuCount()
w bibliotece pomocniczejcpufeatures
. W przypadku niektórych urządzeń, gdzie rdzenie są włączane dynamicznie przez system, poprzednia implementacja raportowała łączną liczbę aktywnych rdzeni przy pierwszym wywołaniu funkcji, a nie łączną liczbę rdzeni fizycznie dostępnych.
- Naprawiono implementację
Android NDK r7b (luty 2012 r.)
Ta wersja pakietu NDK zawiera poprawki natywnych kompilacji systemu Windows, Cygwina 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. Skompiluj ponownie niezmodyfikowane źródła przy użyciu tej wersji pakietu NDK. Ten problem powinien zostać całkowicie wyeliminowany. Więcej informacji:docs/ANDROID-ATOMICS.html
. - Przywrócono wersję
binutils
2.19, aby naprawić problemy z debugowaniem, które pojawiły się w wersji NDK r7 (która przeszła nabinutils
2.20.1). - Naprawiono
ndk-build
w 32-bitowym systemie Linux. Błąd pakietu spowodował umieszczenie 64-bitowej wersji pliku wykonywalnegoawk
w domenieprebuilt/linux-x86/bin
w pakiecie NDK r7. - Naprawiono natywną kompilację dla systemu Windows (
ndk-build.cmd
). Nie miało to wpływu na inne tryby kompilacji. Wprowadzone poprawki:- Usunięto błąd związany z nieskończoną pętlą lub przepełnieniem stosu, który występował podczas próby wywołania
ndk-build.cmd
z katalogu, który nie był na początku ścieżki projektu (np. w dowolnym podkatalogu). - Rozwiązaliśmy problem, który powodował, że automatycznie generowane pliki zależności były ignorowane. Oznaczało to, że zaktualizowanie nagłówka nie aktywowało ponownej kompilacji źródeł, które go zawierały.
- Rozwiązaliśmy problem, który powodował, że znaki specjalne w plikach lub ścieżkach innych niż spacje i cudzysłowy były nieprawidłowo obsługiwane.
- Usunięto błąd związany z nieskończoną pętlą lub przepełnieniem stosu, który występował podczas próby wywołania
- Poprawiono samodzielny łańcuch narzędzi umożliwiający generowanie prawidłowych plików binarnych podczas korzystania z
-lstdc++
(np. łączenia ze środowiskiem wykonawczym GNUlibstdc++
C++). Używaj metody-lgnustl_shared
, jeśli chcesz utworzyć link z wersją zasobów wspólnych, lub-lstdc++
w przypadku wersji statycznej.Więcej informacji o tej poprawce znajdziesz na stronie
docs/STANDALONE-TOOLCHAIN.html
. - Naprawiono błąd
gnustl_shared
w Cygwin. Narzędzie łączące zgłaszało, że nie może znaleźć elementulibsupc++.a
, mimo że plik znajdował się we właściwej lokalizacji. - Naprawiliśmy link Cygwin C++, gdy do
APP_STL
nie używano określonego środowiska wykonawczego C++.
- Zaktualizowano
- Inne zmiany:
-
- Gdy Twoja aplikacja korzysta ze środowiska wykonawczego GNU
libstdc++
, kompilator nie będzie już wymuszać włączania wyjątków ani RTTI. Ta zmiana powoduje zmniejszenie kodu.Jeśli potrzebujesz tych funkcji, wykonaj jedną z tych czynności:
- Włącz wyjątki lub RTTI bezpośrednio w modułach lub
Application.mk
. (zalecane) - Określ
APP_GNUSTL_FORCE_CPP_FEATURES
–'exceptions'
lub'rtti'
lub oba w obu tych parametrach w elemencieApplication.mk
. Więcej informacji znajdziesz tutaj:docs/APPLICATION-MK.html
.
- Włącz wyjątki lub RTTI bezpośrednio w modułach lub
ndk-gdb
działa teraz prawidłowo, gdy w aplikacji są usługi prywatne uruchomione w niezależnych procesach. Debuguje główny proces aplikacji, a nie pierwszy proces wymieniony przez funkcjęps
, który zwykle jest procesem usługi.- Naprawiliśmy rzadki błąd, który powodował, że kontroler NDK r7 nie uznawał wartości
LOCAL_ARM_MODE
i zawsze kompilował niektóre pliki źródłowe (ale nie wszystkie) do instrukcji 32-bitowych. STLport
: odśwież źródła, aby były zgodne z wersją platformy Androida. Ta aktualizacja usuwa kilka drobnych błędów:- Naprawiono tworzenie instancji niekompletnego typu
- Poprawiono drobne błędy pisowni „==” i „=”.
- W aplikacji
string::assign
użyto polamemmove
zamiastmemcpy
- Dodano lepszą obsługę znaczników
IsNANorINF
,IsINF
,IsNegNAN
itp.
Szczegółowe informacje znajdziesz w logu zatwierdzenia.
STLport
: usunięto z biblioteki 5 niepotrzebnych statycznych inicjatorów.- Biblioteki GNU libstdc++ dla armeabi-v7a zostały błędnie skompilowane dla armeabi. Ta zmiana nie miała wpływu na prawidłowość, ale użycie odpowiedniego interfejsu ABI powinno przynieść nieco większą wydajność.
- Biblioteka pomocnicza
cpu-features
została zaktualizowana i zawiera 3 opcjonalne funkcje procesora x86 (SSSE3
,MOVBE
iPOPCNT
). Więcej informacji znajdziesz na stroniedocs/CPU-FEATURES.html
. - Zaktualizowano:
docs/NDK-BUILD.html
, dodając wzmiankę o nazwieNDK_APPLICATION_MK
zamiastNDK_APP_APPLICATION_MK
, aby wybrać niestandardowy plikApplication.mk
. - Cygwin: po wywołaniu
ndk-build
nie tworzy już pustego pliku „NUL” w bieżącym katalogu. - Cygwin: ulepszono automatyczne wykrywanie zależności. W poprzedniej wersji funkcja ta nie działała prawidłowo w tych przypadkach:
- Gdy prefiksem dysku Cygwin nie był
/cygdrive
. - Jeśli na przykład używasz mocowania bez dysku, na przykład gdy Cygwin przetłumaczy tekst
/home
na\\server\subdir
zamiastC:\Some\Dir
.
- Gdy prefiksem dysku Cygwin nie był
- Cygwin:
ndk-build
nie próbuje używać natywnych narzędzi systemu Windows dostępnych w$NDK/prebuilt/windows/bin
w niektórych wersjach oprogramowania Cygwin lub GNU Make.
- Gdy Twoja aplikacja korzysta ze środowiska wykonawczego GNU
Android NDK r7 (listopad 2011 r.)
Ta wersja pakietu NDK zawiera nowe funkcje obsługujące platformę Android 4.0 oraz wiele innych dodatków i udoskonaleń:
- Nowe funkcje
-
- Dodaliśmy oficjalne interfejsy NDK API na Androida 4.0 (poziom API 14), co dodaje 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 kierowanym na interfejs API na poziomie 14 odtwarzanie multimediów bezpośrednio z kodu natywnego z wykorzystaniem nowego interfejsu kolejki bufora, który jest specyficzny dla Androida. Więcej informacji znajdziesz na stronachdocs/openmaxal/index.html
i http://www.khronos.org/openmax/. - Zaktualizowaliśmy interfejs API natywnego dźwięku na podstawie standardu Khronos Group OpenSL ES 1.0.1. Interfejs API poziomu 14 umożliwia teraz dekodowanie skompresowanego dźwięku (np. MP3, AAC, Vorbis) na 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
- Dodano obsługę CCache. Aby przyspieszyć duże ponowne kompilacje, zdefiniuj zmienną środowiskową
NDK_CCACHE
dlaccache
(lub ścieżkę do pliku binarnegoccache
). Po zadeklarowaniu system kompilacji NDK automatycznie korzysta z pamięci CCache podczas kompilowania dowolnego pliku źródłowego. Przykład:export NDK_CCACHE=ccache
Uwaga: wersja NDK nie zawiera pamięci podręcznej typu CCache, dlatego musisz ją zainstalować przed użyciem. Więcej informacji na temat CCache znajdziesz na http://ccache.samba.org.
- Dodano obsługę ustawienia
APP_ABI
naall
, aby wskazać, że chcesz tworzyć moduły NDK dla wszystkich interfejsów ABI obsługiwanych w danej wersji NDK. Oznacza to, że co najmniej jeden z tych 2 wierszy w plikuApplication.mk
jest równoważny z tą wersją:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Działa to też, jeśli określisz
APP_ABI
podczas wywoływania interfejsundk-build
z wiersza poleceń. Pozwoli to szybko sprawdzić, czy Twój projekt kompiluje się dla wszystkich obsługiwanych interfejsów ABI bez zmiany jegoApplication.mk file
. Na przykład:ndk-build APP_ABI=all
- Dodaliśmy w
Android.mk
zmiennąLOCAL_CPP_FEATURES
, która umożliwia zadeklarowanie, których funkcji C++ (RTTI lub wyjątków) używa Twój moduł. Dzięki temu ostateczne łączenie będzie działać prawidłowo, jeśli masz gotowe moduły, które korzystają z 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 funkcji
$NDK/ndk-build
ze ścieżki projektu ścieżki do plików źródłowych, obiektów i plików binarnych przekazywane do poleceń kompilacji są obecnie znacznie krótsze, ponieważ są one przekazywane względem bieżącego katalogu. Jest to przydatne podczas tworzenia projektów z dużą liczbą plików źródłowych. Pozwala to uniknąć limitów maksymalnej długości wiersza poleceń obsługiwanych przez system operacyjny hosta. Działanie pozostaje niezmienione, jeśli wywołujeszndk-build
z podkatalogu drzewa projektu lub jeśli określisz katalogNDK_PROJECT_PATH
wskazujący na konkretny katalog.
- Dodaliśmy oficjalne interfejsy NDK API na Androida 4.0 (poziom API 14), co dodaje do platformy te funkcje natywne:
- Funkcje eksperymentalne
- Możesz teraz tworzyć pliki źródłowe NDK w systemie Windows bez użycia Cygwina, wywołując skrypt
ndk-build.cmd
z wiersza poleceń ze ścieżki projektu. Skrypt przyjmuje dokładnie te same argumenty co oryginalny skryptndk-build
. Pakiet Windows NDK zawiera własne gotowe pliki binarne GNU Make, Awk i innych narzędzi wymaganych przez kompilację. Nie musisz niczego więcej instalować, aby uzyskać działający system kompilacji.Ważne:
ndk-gdb
nie działa w systemie Windows, więc do debugowania musisz użyć Cygwina.Ta funkcja jest nadal w wersji eksperymentalnej, więc możesz ją wypróbować i zgłosić problemy w publicznej bazie błędów lub na forum publicznym. Wszystkie próbki i testy jednostkowe dostarczone z pakietem NDK zostały skompilowane z tą funkcją.
- Ważne poprawki błędów
-
- Jeśli w
Application.mk
nie określono usługiAPP_MODULES
, zaimportowane biblioteki udostępnione są teraz domyślnie instalowane w docelowej lokalizacji instalacji (libs/<abi>
). Jeśli np. moduł najwyższego poziomufoo
importuje modułbar
, do lokalizacji instalacji kopiowane są elementylibfoo.so
ilibbar.so
. Wcześniej skopiowano tylkolibfoo.so
, chyba że podano teżbar
w plikuAPP_MODULES
. Jeśli jawnie zdefiniujesz właściwośćAPP_MODULES
, działanie pozostanie niezmienione. - Funkcja
ndk-gdb
działa teraz prawidłowo w przypadku działań z wieloma kategoriami w filtrach intencji GŁÓWNEJ. - Importy biblioteki statycznej 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
zostanie teraz połączony z zasobemlibbar.a
ilibzoo.a
.
- Jeśli w
- Inne zmiany
-
docs/NATIVE-ACTIVITY.HTML
: poprawiono literówkę. Minimalny poziom interfejsu API powinien wynosić 9, a nie 8 w przypadku aktywności natywnych.docs/STABLE-APIS.html
: dodaliśmy brakującą dokumentację wskazującą EGL jako obsługiwany stabilny interfejs API (od poziomu API 9).download-toolchain-sources.sh
: zaktualizowano w celu pobrania źródeł łańcucha narzędzi ze strony android.googlesource.com, która jest nową lokalizacją serwerów AOSP.- Dodaliśmy nowe środowisko wykonawcze do obsługi C++ o nazwie
gabi++
. Więcej informacji na ten temat znajdziesz w zaktualizowanym dokumenciedocs/CPLUSPLUS-SUPPORT.html
. - Dodaliśmy nowe środowisko wykonawcze obsługujące C++ o nazwie
gnustl_shared
, które odpowiada wersji GNU libstdc++ v3 (licencji GPLv3) z biblioteką udostępnianą. Więcej informacji:docs/CPLUSPLUS-SUPPORT.html
- Dodano 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ć zarównofoo.cpp
, jak ibar.cxx
jako źródła C++, zadeklaruj to:LOCAL_CPP_EXTENSION := .cpp .cxx
- Z udostępnianych w pakiecie NDK bibliotek systemowych udostępnionych w czasie połączenia usunięto wiele niechcianych eksportowanych symboli. Dzięki temu kod wygenerowany za pomocą autonomicznego łańcucha narzędzi nie zostanie przypadkowo uzależniony od niestabilnego symbolu ABI (np.symbolu libgcc. a, który zmienia się za każdym razem, gdy łańcuch narzędzi używany do skompilowania platformy ulegnie zmianie).
- Odświeżyliśmy nagłówki EGL i OpenGLES Khronos, aby umożliwić obsługę większej liczby rozszerzeń. Pamiętaj, że nie zmienia to interfejsów ABI NDK dla odpowiednich bibliotek, ponieważ każde rozszerzenie musi być sondowane w czasie działania przez aplikację kliencką.
Dostępne rozszerzenia zależą od rzeczywistego urządzenia i sterowników GPU, a nie wersji platformy, na której urządzenie działa. Zmiany w nagłówkach powodują dodanie nowych stałych i typów, aby ułatwić korzystanie z rozszerzeń po sondowaniu za pomocą funkcji
eglGetProcAddress()
lubglGetProcAddress()
. Poniżej znajdziesz listę nowo obsługiwanych rozszerzeń:- 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 r.)
Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją r6. Wersja r6b rozwiązuje te problemy w wersji r6:
- Ważne poprawki błędów
-
- Naprawiono kompilację, gdy w przypadku kompilacji z wieloma architekturami używany był atrybut
APP_ABI="armeabi x86"
. - Poprawiliśmy lokalizację gotowych plików binarnych STLport w pakiecie wersji NDK. Błąd w skrypcie na opakowaniu sprawił, że zostały one umieszczone w niewłaściwym miejscu.
- Naprawiono wykorzystanie
atexit()
w bibliotekach udostępnionych za pomocą samodzielnego łańcucha narzędzi x86. - Naprawiono
make-standalone-toolchain.sh --arch=x86
. Kiedyś pliki binarne GNU libstdc++ nie były kopiowane do właściwej lokalizacji. - Naprawiliśmy ostrzeżenia o samodzielnym łączeniu łańcucha narzędzi dotyczące braku definicji i rozmiaru symbolu
__dso_handle
(tylko ARM). - Naprawiono kolejność uwzględniania
$(SYSROOT)/usr/include
w kompilacjach x86. Więcej informacji znajdziesz w opisie błędu. - Naprawiliśmy definicje
ptrdiff_t
isize_t
w systemach x86 używanych z samodzielnym łańcuchem narzędzi x86.
- Naprawiono kompilację, gdy w przypadku kompilacji z wieloma architekturami używany był atrybut
Android NDK r6 (lipiec 2011 r.)
Ta wersja pakietu NDK obejmuje obsługę interfejsu ABI x86 i inne drobne zmiany.
Szczegółowe informacje o zmianach w tej wersji znajdziesz w dokumencie CHANGES.HTML
dołączonym do pakietu NDK.
- Uwagi ogólne:
-
- Dodaje obsługę interfejsu ABI x86, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem x86. Główne funkcje x86 obejmują łańcuchy narzędzi x86, nagłówki systemowe, biblioteki i obsługę debugowania. Szczegółowe informacje o obsłudze x86 znajdziesz w opisie
docs/CPU-X86.html
w pakiecie NDK.Domyślnie kod jest generowany dla urządzeń z procesorami ARM, ale możesz dodać x86 do definicji
APP_ABI
w plikuApplication.mk
, aby utworzyć kompilację na platformy x86. Na przykład ten wiersz instruujendk-build
, aby skompilował kod dla 3 różnych interfejsów ABI:APP_ABI := armeabi armeabi-v7a x86
Jeśli nie korzystasz ze źródeł składania opartych na ARM, nie musisz ingerować w pliki
Android.mk
przy kompilowaniu kodu maszyny x86. - Możesz utworzyć samodzielny łańcuch narzędzi x86, używając opcji
--toolchain=x86-4.4.3
podczas wywoływania metodymake-standalone-toolchain.sh
. Więcej informacji znajdziesz tutaj:docs/STANDALONE-TOOLCHAIN.html
. - Nowe narzędzie
ndk-stack
umożliwia tłumaczenie zrzutów stosu w usłudzelogcat
wygenerowanych przez kod natywny. Narzędzie tłumaczy adresy instrukcji na czytelny format, który zawiera takie elementy jak funkcja, plik źródłowy i numer wiersza odpowiadającej każdej ramce stosu. Więcej informacji i przykład użycia znajdziesz na stroniedocs/NDK-STACK.html
.
- Dodaje obsługę interfejsu ABI x86, który umożliwia generowanie kodu maszynowego działającego na zgodnych urządzeniach z Androidem x86. Główne funkcje x86 obejmują łańcuchy narzędzi x86, nagłówki systemowe, biblioteki i obsługę debugowania. Szczegółowe informacje o obsłudze x86 znajdziesz w opisie
- Inne zmiany:
- Wersja
arm-eabi-4.4.0
, która została wycofana od czasu NDK r5, została usunięta z dystrybucji NDK.
Android NDK r5c (czerwiec 2011 r.)
Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu do r5b. Wersja r5c rozwiązuje te problemy występujące w wersji r5b:
- Ważne poprawki błędów:
-
ndk-build
: naprawiliśmy rzadki błąd, który pojawiał się podczas próby wykonywania równoległych kompilacji projektów możliwych do debugowania.- Poprawiliśmy literówkę, która uniemożliwiała prawidłowe działanie usługi
LOCAL_WHOLE_STATIC_LIBRARIES
z nowym łańcuchem narzędzi. W interfejsiedocs/ANDROID-MK.html
dodano dokumentację dotyczącą tego łańcucha narzędzi. - Naprawiliśmy błąd polegający na tym, że kod powiązany z elementem
gnustl_static
ulegał awarii przy uruchamianiu na platformie w wersji starszej niż interfejs API na poziomie 8 (Android 2.2). ndk-gdb
: naprawiliśmy błąd, który powodował błąd podziału na segmenty podczas debugowania urządzeń z Androidem 3.0 lub nowszym.<android/input.h>
: 2 funkcje wprowadzone w interfejsie API poziomu 9 (Android 2.3) były nieprawidłowe i zostały naprawione. Powoduje to uszkodzenie źródłowego interfejsu API, ale interfejs binarny systemu pozostaje niezmieniony. W nieprawidłowych funkcjach brakuje parametruhistory_index
. Poniżej znajdziesz poprawne definicje: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);
- Zaktualizowaliśmy plik binarny ARM biblioteki C dla interfejsu API poziomu 9 (Android 2.3), aby prawidłowo udostępniać w momencie połączenia nowe funkcje dodane na tym poziomie interfejsu API (np.
pthread_rwlock_init
).
- Drobne ulepszenia i poprawki:
-
- Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej występują w
LOCAL_SRC_FILES
. Wcześniej tak się nie było, ponieważ pliki zostały pogrupowane według rozszerzeń źródłowych. - Gdy
import-module
wystąpi błąd, wydrukuje teraz listę wyszukanych katalogów. Przydaje się to do sprawdzania, czy definicja atrybutuNDK_MODULE_PATH
używana przez system kompilacji jest poprawna. - Gdy
import-module
się uda, wydrukuje w logu katalog, w którym został znaleziony moduł (widoczny przy użyciuNDK_LOG=1
). - Przyspieszyliśmy kompilację aplikacji z możliwością debugowania w przypadku bardzo dużej liczby katalogów uwzględniających w projekcie.
ndk-gdb
: lepsze wykrywanie błędówadb shell
i komunikaty o błędach.<pthread.h>
: poprawiliśmy definicję właściwościPTHREAD_RWLOCK_INITIALIZER
w przypadku interfejsu API na poziomie 9 (Android 2.3) i nowszym.- Rozwiązaliśmy problem, który powodował, że importował sam moduł, co powodowało pętlę nieskończoną w narzędziu GNU Make.
- Naprawiono błąd, który powodował niepowodzenie kompilacji, gdy zasada
LOCAL_ARM_NEON
miała wartość Prawda (typo wbuild/core/build-binary.mk
). - Naprawiliśmy błąd, który uniemożliwiał kompilację plików zespołu
.s
(akceptowalne pliki:.S
).
- Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej występują w
Android NDK r5b (styczeń 2011 r.)
Ta wersja NDK nie zawiera żadnych nowych funkcji niż r5. Wersja r5b rozwiązuje te problemy w wersji r5:
- Pliki binarne r5 wymagają glibc w wersji 2.11, ale pliki binarne r5b są generowane za pomocą specjalnego łańcucha narzędzi kierowanego na glibc w wersji 2.7 lub nowszej. Pliki binarne łańcucha narzędzi systemu Linux działają teraz w systemie Ubuntu 8.04 lub nowszym.
- Usunięto błąd kompilatora w łańcuchu narzędzi arm-linux-androideabi-4.4.3. Poprzedni plik binarny wygenerował nieprawidłowe sekwencje instrukcji w przypadku znaków ze znakiem.
- Dodaje brakującą dokumentację wartości „gnustl_static” dla aplikacji APP_STL, która umożliwia powiązanie ze statyczną wersją biblioteki GNU libstdc++. ta
- Naprawiono te
ndk-build
problemu:- Błąd, który powodował niespójne pliki zależności, gdy w systemie Windows wystąpił błąd kompilacji. Zapobiegło to prawidłowej kompilacji po naprawieniu błędu w kodzie źródłowym.
- Błąd występujący w Cygwin, w wyniku którego użycie bardzo krótkich ścieżek do instalacji pakietu NDK Androida lub ścieżki projektu prowadziło do wygenerowania nieprawidłowych plików zależności. Z tego powodu kompilacje przyrostowe nie były możliwe.
- Literówka, która uniemożliwiła bibliotece cpufeatures prawidłowe działanie z nowym łańcuchem narzędzi NDK.
- Kompilacje w Cygwin są szybsze, ponieważ
cygpath -m
nie są wywoływane przez GNU Make dla każdego pliku źródłowego lub obiektu, co powodowało problemy z bardzo dużymi drzewami źródłowymi. Jeśli nie będzie działać prawidłowo, zdefiniujNDK_USE_CYGPATH=1
w swoim środowisku, aby ponownie użyćcygpath -m
. - Instalacja Cygwina powiadamia teraz użytkownika o nieprawidłowych ścieżkach instalacji zawierających spacje. Wcześniej nieprawidłowa ścieżka powodowała wyświetlenie błędu informujący o nieprawidłowej wersji programu GNU Make, nawet jeśli została zainstalowana odpowiednia wersja.
- Usunięto literówkę, która uniemożliwiała prawidłowe działanie zmiennej środowiskowej
NDK_MODULE_PATH
, gdy zawierała wiele katalogów rozdzielonych dwukropkiem. - Skrypt
prebuilt-common.sh
zawiera poprawki sprawdzające kompilator pod kątem 64-bitowego wygenerowanego kodu maszynowego. Zamiast korzystać z tagu hosta, który umożliwia prawidłową rekonstrukcję 32-bitowego łańcucha narzędzi w systemie Snow Leopard. Skrypty do ponownego kompilacji łańcucha narzędzi obsługują teraz również użycie 32-bitowej łańcucha narzędzi hosta. - Do
<netinet/in.h>
dodano brakującą deklarację dotyczącą:INET_ADDRSTRLEN
. - Brakujące deklaracje dla
IN6_IS_ADDR_MC_NODELOCAL
iIN6_IS_ADDR_MC_GLOBAL
zostały dodane do<netinet/in6.h>
. - Pole „asm” zostało zastąpione w
<asm/byteorder.h>
przez „__asm__”, aby umożliwić kompilację za pomocą-std=c99
.
Android NDK r5 (grudzień 2010)
Ta wersja pakietu NDK zawiera wiele nowych interfejsów API, z których większość ma ułatwiać tworzenie gier i podobnych aplikacji, które w dużym stopniu wykorzystują kod natywny. Za pomocą interfejsów API programiści mają bezpośredni dostęp do zdarzeń, dźwięku, grafiki i zarządzania oknami, zasobów oraz miejsca na dane. Deweloperzy mogą też wdrożyć cykl życia aplikacji na Androida w kodzie natywnym za pomocą nowej klasy NativeActivity
. Szczegółowe informacje o zmianach w tej wersji znajdziesz w dokumencie CHANGES.HTML
dołączonym do pobranego pakietu NDK.
- Uwagi ogólne:
-
- Dodaje obsługę działań natywnych, co umożliwia implementację cyklu życia aplikacji na Androida w kodzie natywnym.
- Dodaje obsługę natywną tych elementów:
- Podsystem wprowadzania danych (np. klawiatura i ekran dotykowy)
- Dostęp do danych z czujnika (akcelerometru, kompasu, żyroskopu itp.).
- Interfejsy API pętli zdarzeń, które oczekują na takie działania jak dane wejściowe i zdarzenia z czujników.
- Podsystem okien i powierzchni
- Interfejsy API audio oparte na standardzie OpenSL ES, które obsługują odtwarzanie i nagrywanie, a także kontrolę nad efektami audio platformy
- Dostęp do zasobów w pakiecie w pliku
.apk
.
- Zawiera nowy łańcuch narzędzi (oparty na GCC 4.4.3), który generuje lepszy kod. Może być też używany jako samodzielny kompilator krzyżowy dla osób, które chcą tworzyć własne treści za pomocą
./configure && make
. Więcej informacji znajdziesz na stronie docs/STANDALONE-TOOLCHAIN.html. Pliki binarne GCC 4.4.0 są nadal dostępne, ale usunęliśmy je. - Dodano obsługę gotowych bibliotek statycznych i udostępnionych (docs/PREBUILTS.html) oraz eksportowania i importowania modułów, co znacznie ułatwia udostępnianie i ponowne używanie modułów innych firm (docs/IMPORT-MODULE.html wyjaśnia, dlaczego tak jest).
- Jako moduł pomocniczy udostępnia domyślną implementację STL w języku C++ (opartą na STLport). Można jej używać jako biblioteki statycznej lub udostępnionej (szczegóły i przykłady użycia znajdziesz w katalogu Sources/android/stlport/README). Jeśli wybierzesz kompilację z użyciem tych bibliotek zamiast domyślnej implementacji STL w C++, dostępne są też gotowe pliki binarne STLport (statyczne lub udostępnione) i GNU libstdc++ (tylko statyczne). Wyjątki C++ i RTTI nie są obsługiwane w domyślnej implementacji STL. Więcej informacji znajdziesz w dokumentacji/CPLUSPLUS-SUPPORT.HTML.
- Zawiera ulepszenia w bibliotece pomocniczej
cpufeatures
, która usprawnia raportowanie typu procesora (niektóre urządzenia zgłaszały wcześniej procesor ARMv7, gdy w rzeczywistości to urządzenie ARMv6). Aby skorzystać z ulepszeń, zalecamy deweloperom, którzy korzystają z tej biblioteki, aby ponownie skompilować aplikacje, a potem przesłać je do Google Play. - 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 zademonstrować, jak napisać aktywność natywną. - Zawiera wiele poprawek błędów i innych drobnych ulepszeń. Szczegółową listę zmian znajdziesz na stronie 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 w tej wersji znajdziesz w dokumencie CHANGES.TXT dołączonym do pobranego pakietu NDK.
- Uwagi ogólne:
-
- Udostępnia uproszczony system kompilacji za pomocą nowego polecenia kompilacji
ndk-build
. - Dodaje obsługę łatwego debugowania natywnego wygenerowanego kodu maszynowego na urządzeniach produkcyjnych za pomocą nowego polecenia
ndk-gdb
. - Dodaje nowy interfejs ABI przeznaczony na Androida dla architektur procesorów ARM,
armeabi-v7a
. Nowy interfejs ABI rozszerza obecny interfejs ABIarmeabi
o te rozszerzenia zestawu instrukcji dotyczących procesora:- Instrukcje dotyczące Thumb-2
- Instrukcje dotyczące sprzętu FPU VFP (VFPv3-D16)
- Opcjonalna obsługa wewnętrznych funkcji ARM Advanced SIMD (NEON) GCC i VFPv3-D32. Usługa jest obsługiwana na urządzeniach takich jak Verizon Droid firmy Motorola, Google Nexus One i inne.
- Dodaje nową bibliotekę statyczną
cpufeatures
(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ć zgodność z architekturą ARMv7-A oraz VFPv3-D32 i NEON, a następnie w razie potrzeby udostępniać osobne ścieżki kodu. - Dodaje przykładową aplikację
hello-neon
, która pokazuje, jak użyć bibliotekicpufeatures
do sprawdzenia funkcji procesora, a następnie zapewnić zoptymalizowaną ścieżkę kodu za pomocą NEON Instrinsics, jeśli jest on obsługiwany przez procesor. - Pozwala wygenerować kod maszynowy dla jednego lub obu zestawów instrukcji obsługiwanych przez NDK. Możesz na przykład jednocześnie tworzyć kompilacje zarówno pod kątem architektury ARMv5, jak i ARMv7-A, i przechowywać wszystkie dane w końcowym pliku
.apk
aplikacji. - Aby aplikacje były dostępne dla użytkowników tylko wtedy, gdy pozwalają one na ich uruchamianie, Google Play filtruje teraz aplikacje na podstawie zawartych w nich informacji o zestawie instrukcji – nie musisz nic robić, żeby włączyć filtrowanie. Dodatkowo sam system Android sprawdza aplikację podczas instalacji i umożliwia kontynuowanie instalacji tylko wtedy, gdy aplikacja udostępnia bibliotekę skompilowaną pod kątem architektury procesora urządzenia.
- Dodano obsługę Androida 2.2, w tym nowy stabilny interfejs API, który zapewnia dostęp do buforów pikseli obiektów
Bitmap
z kodu natywnego.
- Udostępnia uproszczony system kompilacji za pomocą nowego polecenia kompilacji
Android NDK r3 (marzec 2010 r.)
- Uwagi ogólne:
-
- Dodaje obsługę biblioteki natywnej OpenGL ES 2.0.
- Dodaje przykładową aplikację
hello-gl2
, która pokazuje wykorzystanie cieniowania wierzchołków i fragmentów OpenGL ES 2.0. - Pliki binarne łańcucha narzędzi zostały odświeżone w tej wersji pod kątem wersji GCC 4.4.0, która powinna generować nieco bardziej kompaktowy i wydajny kod maszynowy niż poprzedni (4.2.1). Pakiet NDK nadal zawiera też pliki binarne 4.2.1, których możesz użyć do skompilowania kodu maszyny.
Android NDK r2 (wrzesień 2009 r.)
Pierwotnie wydana jako „Android 1.6 NDK, wersja 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 API OpenGL ES, a jednocześnie zarządza cyklem życia aktywności za pomocą obiektuGLSurfaceView
.
Android NDK r1 (czerwiec 2009)
Pierwotnie wydana jako „Android 1.5 NDK, wersja 1”.
- Uwagi ogólne:
-
- Obejmuje obsługę kompilatora (GCC) dla ARMv5TE, w tym instrukcje dotyczące Thumb-1.
- Obejmuje nagłówki systemowe stabilnych natywnych interfejsów API, dokumentację i przykładowe aplikacje.