Historia zmian NDK

Ta strona zawiera informacje na temat zmian we wszystkich opublikowanych wersjach stabilnych pakietu NDK. Aby pobrać najnowszą stabilną wersję pakietu NDK lub dowolną aktualnie dostępną wersję beta, zobacz stronę pobierania NDK.

Zobacz android-ndk-announce, zasubskrybuj, aby otrzymywać powiadomienia o premierach.

Android NDK r27 LTS (lipiec 2024 r.)

Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • KitKat (interfejsy API 19 i 20) nie jest już obsługiwany.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Obejmuje interfejsy API Androida 13.
  • Zaktualizowano LLVM na wersję clang-r450784d na podstawie wersji LLVM 14.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Program GNU Assembler (GAS) został usunięty. Jeśli tworzysz materiały z -fno-integrated-as, musisz usunąć tę flagę. Zobacz Uwagi dotyczące migracji Clang zawierają porady na temat zapewnienia zgodności zestawu przy użyciu LLVM.
  • Usługa GDB została usunięta. Zamiast tego użyj LLDB. Zauważ, że ndk-gdb korzysta z LLDB przez domyślnie, a Android Studio obsługiwało tylko LLDB.
  • Jelly Bean (interfejsy API 16, 17 i 18) nie jest już obsługiwany. Minimalne System operacyjny obsługiwany przez NDK to KitKat (poziom API 19).
  • Urządzenia inne niż Neon nie są już obsługiwane. Bardzo niewielka liczba stare urządzenia nie obsługują neonów, więc większość aplikacji z nich nie zauważy. na poprawę wydajności.
  • Wycofaliśmy obsługę kompilacji RenderScript. Poprzedni skrypt RenderScript wycofane na Androidzie 12. Jeśli migracja nie została zakończona aplikacji z dala od RenderScriptu, możesz używać NDK r23 LTS.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Plik GNU binutils został usunięty z wyjątkiem programu GNU Assembler (GAS). Usługi motoryzacyjne Google zostaną usunięte w następnej wersji. Jeśli tworzysz -fno-integrated-as, zgłoś błędy, jeśli coś uniemożliwia możliwość usunięcia tej flagi.
  • Zakończono obsługę GDB. Usługa GDB zostanie usunięta w następnej wersji. Zamiast tego użyj LLDB. Pamiętaj, że ndk-gdb domyślnie używa biblioteki LLDB.
  • NDK r23 to ostatnia wersja, która obsługuje inne formaty. Rozpoczyna się od NDK r24, biblioteki armeabi-v7a w systemie Sysroot zostaną utworzone za pomocą Neonowy. Niewielka liczba bardzo starszych urządzeń nie obsługuje neonów, większość aplikacji nie zauważy, poza poprawą wydajności.
  • Jelly Bean (interfejsy API 16, 17 i 18) nie będzie obsługiwany w kolejnym pakiecie NDK wersji. Najstarszym systemem operacyjnym obsługiwanym przez NDK dla r24 będzie KitKat (poziom API 19).
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Narzędzie GNU binutils zostało wycofane i zostanie usunięte w najbliższej wersji NDK wersji. Pamiętaj, że narzędzie GNU Assemb (as) jest częścią tego procesu. Jeśli tworzysz -fno-integrated-as, zgłoś błędy, jeśli coś uniemożliwia możliwość usunięcia tej flagi. Jeśli korzystasz z as bezpośrednio, użyj clang.
  • LLD jest teraz domyślnym tagiem łączącym. ndk-build i plik łańcucha narzędzi CMake również zostały przeniesione do llvm-ar i llvm-strip.
  • Narzędzie ndk-gdb używa teraz narzędzia lldb jako debugera. Narzędzie gdb zostało wycofane i będzie zostaną usunięte w przyszłej wersji. Aby wrócić do gdb, użyj polecenia --no-lldb . Pamiętaj jednak, zgłoś błąd wyjaśniając, dlaczego nie można użyć pliku lldb.
  • Usługa std::filesystem jest teraz dostępna. Dostępne są 2 znane problemy:
    • Problem 1258: std::filesystem::perm_options::nofollow może nie są obsługiwane na starszych urządzeniach.
    • Problem 1260: std::filesystem::canonical będzie nie udało się przeprowadzić błędu po przejściu nieistniejącej ścieżki w starej urządzenia.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • 32-bitowy system Windows nie jest już obsługiwany. Nie ma to wpływu na VAST dla większości użytkowników. Jeśli nadal musisz tworzyć aplikacje NDK 32-bitowe wersje systemu Windows – nadal używaj pakietu NDK r20.

    Więcej informacji o tej zmianie w Narzędziach dla programistów aplikacji na Androida znajdziesz zobacz post na blogu w danej sprawie.

  • Program LLD jest już dostępny do testów. System AOSP przełączył się domyślnie na LLD, a NDK zacznie (oś czasu nieznana). Przetestuj LLD w swojej aplikacji, uzyskując wynik -fuse-ld=lld podczas łączenia. Pamiętaj, że Problem 843 wpłynie na kompilacje używające LLD z paskiem binutils oraz objcopy, zamiast llvm-strip czy llvm-objcopy.
  • Starsze ścieżki instalacji łańcucha narzędzi zostaną usunięte w najbliższym czasie wersji. Te ścieżki są przestarzałe od NDK r19 i zajmują znacznej ilości miejsca w NDK. Usunięte ścieżki:
    • platformy
    • źródła/cxx-stl
    • system Sysroot
    • łańcuchy narzędzi (z wyjątkiem łańcuchów narzędzi i LLM)
    . Ogólnie ta zmiana powinna dotyczyć tylko obsługi systemu kompilacji lub którzy używają nieaktualnych systemów kompilacji. ndk-build i Nie ma to wpływu na użytkowników łańcucha narzędzi CMake. make_standalone_toolchain.py użytkowników (chociaż ten skrypt został niepotrzebne od r19). Informacje na temat migracji ze starszego układu łańcucha narzędzi znajdziesz w zobacz Przewodnik dla właścicieli systemów tworzenia systemów dla używanej wersji NDK.
  • Sklep Play będzie potrzebować obsługi 64-bitowej podczas przesyłania pliku APK od sierpnia 2019 r. Rozpocznij przenoszenie już teraz, aby uniknąć niespodzianek, nadszedł czas. Więcej informacji: tym poście na blogu.
  • Podpisany i poświadczony notariat pakiet aplikacji na system macOS jest teraz dostępny w przypadku: do pobrania z naszej wiki i na naszej stronie. Pamiętaj, że tylko pakiety mogą korzystać z ścieżek notarialnych (RPATH). Jest to tradycyjny pakiet NDK służący do System macOS nie może być poświadczony notarialnie. Pakiet SDK będzie nadal używać tradycyjnie, ponieważ pakiet aplikacji wymaga zmian układu, spowodowałoby brak zgodności z Androidem Studio. NDK nie jest poddawana kwarantannie po pobraniu za pomocą menedżera pakietów SDK, dlatego jest dozwolone przez strażnika. Menedżer SDK jest obecnie najczęściej jest to niezawodny sposób na uzyskanie pakietu NDK dla systemu macOS.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Program LLD jest już dostępny do testów. AOSP jest w trakcie przechodzenia na domyślne korzystanie z LLD, Następnie pojawi się NDK (oś czasu nieznana). Przetestuj LLD w swojej aplikacji, zdając test -fuse-ld=lld podczas łączenia.
  • Sklep Play będzie potrzebować obsługi 64-bitowej podczas przesyłania pliku APK od sierpnia 2019 r. Rozpocznij przenoszenie już teraz, aby uniknąć niespodzianek, nadszedł czas. Więcej informacji: tym poście na blogu.
  • Dodano interfejsy API Androida Q.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Deweloperzy powinni rozpocząć testowanie swoich aplikacji przy użyciu LLD. AOSP przełączył(a) się na używanie LLD będzie domyślnie włączone, a NDK użyje go domyślnie w ciągu wersji. BFD i złoto zostaną usunięte po przejściu LLD cykl publikowania wersji bez poważnych, nierozwiązanych problemów (szacunkowo r21). Testuj LLD w aplikacji przez przekazanie parametru -fuse-ld=lld podczas łączenia. Uwaga: plik lld nie obsługuje obecnie skompresowanych symboli w systemie Windows. Problem 888). W systemie Windows Clang nie generuje też skompresowanych symboli, ale może to stanowić problem, gdy korzystasz z artefaktów stworzonych przez Darwina lub Linux
  • Sklep Play będzie potrzebować obsługi 64-bitowej podczas przesyłania pliku APK od sierpnia 2019 r. Rozpocznij przenoszenie już teraz, aby uniknąć niespodzianek, nadszedł czas. Więcej informacji: tym poście na blogu.
  • Problem 780: Samodzielne łańcuchy narzędzi. Clang, binutils, sysroot, i innych elementów łańcucha narzędzi $NDK/toolchains/llvm/prebuilt/<host-tag> i brzęk automatycznie je znajdzie. Zamiast tworzyć osobny łańcucha narzędzi dla interfejsu API 26 ARM, zamiast tego wywołaj kompilator bezpośrednio z Pakiet NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    W przypadku r19 łańcuch narzędzi jest również instalowany w starej ścieżce, aby zapewnić kompilację aby systemy mogły dostosować się do nowego układu. Stare ścieżki będą usunięte w r20. Skrypt make_standalone_toolchain.py nie będzie usunięto. Jest on teraz zbędny i będzie powodować wyświetlenie ostrzeżenia z powyższymi ale zawiera informacje, które są i przepływach pracy. Jeśli używasz narzędzia ndk-build, CMake lub niezależnego łańcucha narzędzi, nie powinno się zmienić w przepływie pracy. Ta zmiana ma znaczenie dla: osoby zajmujące się obsługą systemów kompilacji innych firm, którzy powinni być w stanie i usuń kod związany z Androidem. Więcej informacji: Tworzenie Przewodnik dla osób odpowiedzialnych za utrzymanie systemu.
  • Element ndk-depends został usunięty. Uważamy, że narzędzie ReLinker lepsze rozwiązanie problemów z wczytywaniem biblioteki natywnej na starym Androidzie wersji.
  • Problem 862: Skrypty kodu GCC przekierowujące do języka Clang zostały usunięte, ponieważ nie są na tyle funkcjonalne, aby można było je zastąpić zamiennikami.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Usługa GCC została usunięta.
  • Program LLD jest już dostępny do testów. AOSP jest w trakcie przechodzenia na domyślne korzystanie z LLD, Następnie pojawi się NDK (oś czasu nieznana). Przetestuj LLD w swojej aplikacji, zdając test -fuse-ld=lld podczas łączenia.
  • Ggnustl, gabi++ i stlport zostały usunięte.
  • Wycofaliśmy obsługę ICS (Android 14 i android 15). aplikacji; używający plików wykonywalnych nie muszą już udostępniać zarówno PIE, jak i innych niż PIE .
  • Sklep Play będzie potrzebować obsługi 64-bitowej podczas przesyłania pliku APK od sierpnia 2019 r. Rozpocznij przenoszenie już teraz, aby uniknąć niespodzianek, nadszedł czas. Więcej informacji: tym poście na blogu.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • GCC nie jest już obsługiwany. Zostanie ona usunięta w NDK r18.
  • libc++ jest teraz domyślnym STL dla CMake i samodzielnych łańcuchów narzędzi. Jeśli ręcznie został wybrany inny STL, zdecydowanie zalecamy przenieś do libc++. Pamiętaj, że domyślnie dla polecenia ndk-build jest ustawiona wartość nie. STL. Więcej informacji: tym poście na blogu.
  • Języki gnustl i stlport zostały wycofane i zostaną usunięte w wersji NDK r18.
  • Usunęliśmy obsługę standardów ARMv5 (armeabi), MIPS i MIPS64. Próba utworzenia dowolnego z tych interfejsów ABI zakończy się błędem.
  • Obsługa ICS (Android-14 i android-15) zostanie usunięta z r18.
  • Sklep Play będzie potrzebować obsługi 64-bitowej podczas przesyłania pliku APK od sierpnia 2019 r. Rozpocznij przenoszenie już teraz, aby uniknąć niespodzianek, nadszedł czas. Więcej informacji: tym poście na blogu.
Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Nieużywane nagłówki zostały usunięte. Ujednolicone nagłówki to teraz po prostu „Nagłówki”. Wskazówki dotyczące migracji znajdziesz tutaj: Unified Headers Migration Notes (Uwagi dotyczące migracji Unified Headers).
  • GCC nie jest już obsługiwany. Nie zostanie on jeszcze usunięty z NDK, ale już nie jest które odbierają backendy. Można go usunąć dopiero wtedy, gdy libc++ stanie się na tyle stabilny, że , ponieważ niektóre fragmenty Ggnustl są nadal niezgodne z Clang. Zostanie on usunięty, gdy inne kanały STL są usuwane w r18.
  • Wersja libc++ jest w wersji beta i jest teraz preferowanym językiem STL w NDK. Od r17 libc++ to domyślny STL dla CMake i samodzielnych łańcuchów narzędzi. Jeśli wybrano ręczne inny STL, zdecydowanie zalecamy przejście na libc++. Więcej informacji: to post na blogu.
  • Obsługa standardów ARM5 (armeabi), MIPS i MIPS64 została wycofana. Nie będą już domyślnie kompilować z ndk-build, ale nadal można je skompilować, jeśli są wyraźnie nazwane i zostaną uwzględnione przez regułę „all”, „all32” i „all64”. W r17 wycofaliśmy obsługę każdego z nich. CMake i ndk-build jeśli kierujesz treści na którykolwiek z tych interfejsów ABI, wyświetli się ostrzeżenie.
Interfejsy API

Dodano natywne interfejsy API na Androida 8.1. Więcej informacji o tych interfejsach API znajdziesz w Omówienie natywnych interfejsów API

Więcej informacji na temat nowości i zmian w tej wersji znajdziesz w dziennik zmian.

Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Ujednolicone nagłówki są domyślnie włączone. Aby dowiedzieć się, jak ich używać nagłówki, patrz Ujednolicone nagłówki.
  • Uwaga: wycofane nagłówki zostaną w najbliższym czasie usunięte wersji. W przypadku problemów z nagłówkami prześlij bug.

    Wskazówki dotyczące migracji znajdziesz tutaj: uwagi dotyczące migracji ujednoliconych nagłówków.

  • GCC nie jest już obsługiwany. Nie został jeszcze usunięty z NDK, ale nie otrzymuje już wstecznych portów. Nie można go usunąć, dopóki libc++ nie ustabilizuje się na poziomie domyślnym, ponieważ niektóre części a gnustl wciąż nie jest kompatybilny z Clang.
  • Android 2.3 (android-9) nie jest już obsługiwany. Minimalny docelowy poziom interfejsu API w: NDK to teraz Android 4.0 (android-14). Jeśli zasada APP_PLATFORM jest skonfigurowana mniejsza niż android-14, zamiast niej używana jest wartość android-14.
  • CMake w NDK obsługuje teraz kod zestawu budynków napisany w YASM do uruchamiania na x86 i architektury x86–64. Więcej informacji: Kod zestawu budynków.
Interfejsy API

Dodaliśmy natywne interfejsy API dla Androida 8.0. Aby dowiedzieć się więcej, o tych interfejsach API znajdziesz w omówieniu natywnych interfejsów API.

Więcej informacji na temat nowości i zmian w tej wersji znajdziesz w dziennik zmian.

Historia zmian
Pobrane
  • Dostępne są pliki do pobrania tej wersji tutaj.
Ogłoszenia
  • Ujednolicone nagłówki: w tej wersji wprowadziliśmy nagłówki platform, które są synchronizowane. oraz były zawsze aktualne i dokładne dzięki platformie Android. Poprawki błędów dotyczących tylko nagłówka ma wpływ na wszystkie poziomy API. Wprowadzenie ujednoliconych nagłówków usuwa niespójności we wcześniejszej wersji NDK wersji, takich jak:
    • Nagłówki M i N były w rzeczywistości nagłówkami L.
    • Deklaracje funkcji w nagłówkach nie pasowały prawidłowo do poziomów platformy. w nagłówku zadeklarowano nieistniejące funkcje lub nie zadeklarowano dostępnych funkcji.
    • Na kilku starszych poziomach interfejsu API brakowało lub były nieprawidłowe stałe, które były stosowane w nowszym interfejsie API. poziomów.

    Te nowe ujednolicone nagłówki nie są domyślnie włączone. Aby dowiedzieć się, jak włączyć te funkcje i z nich korzystać nagłówki, patrz ujednolicone nagłówki.

  • Wycofanie GCC: ta wersja przestanie obsługiwać GCC. GCC nie jest usuwany z Do NDK nie są jeszcze przekazywane, ale nie będą już otrzymywać wstecznych portów. Pewne fragmenty Ggnustl niezgodne z Clang, GCC nie zostanie całkowicie usunięte, dopóki libc++ nie uzyska stabilnej wersji tyle, aby ustawić ją jako domyślną.

Więcej informacji na temat nowości i zmian w tej wersji znajdziesz w dziennik zmian.

Pobrane
  • Pobrania tej wersji zostały zarchiwizowane tutaj.
Ogłoszenia
  • GCC nie jest już obsługiwany. Nie zostanie ona usunięta z NDK tylko ale nie otrzymuje już wstecznych portów. Nie można jej usunąć, dopóki nie gdy libc++ stanie się na tyle stabilny, że stanie się domyślnym ustawieniem. Niektóre części a gnustl wciąż nie jest zgodne z Clang. Prawdopodobnie zostanie usunięty co potem.
  • Dodane simpleperf, program profilujący CPU na Androida.
R13B
NDK
  • NDK_TOOLCHAIN_VERSION używa teraz domyślnego języka Clang.
  • Biblioteka libc++ została zaktualizowana do wersji r263688.
  • Przywróciliśmy (prawie) dostatecznie oczyszczone miejsce na dane. Powinno to spowodować usunięcie pewnej liczby ale jeszcze musimy wyczyścić libandroid_support zalecamy używanie tej opcji jako domyślnej.
  • make-standalone-toolchain.sh to teraz po prostu otoka w wersji Pythona. Istnieje kilka różnic w zachowaniu użytkowników. Zobacz zatwierdzenia, aby uzyskać szczegółowe informacje.
  • Niektóre biblioteki nieobsługiwanych interfejsów ABI (mips64r2, mips32r6, mips32r2 i x32). Może być jeszcze kilka powolnych elementów.
  • Problemy z plikiem crtbegin_static.o, które spowodowały brak parametru atexit w linku podczas tworzenia statycznego pliku wykonywalnego na Androida 21 rozwiązany: Problem 132
  • W pliku build/cmake/android.toolchain.cmake dodano plik narzędzi CMake.
Znane problemy
  • Nie jest to pełna lista wszystkich błędów, które jeszcze nie zostały wytypowane.
  • Samodzielne łańcuchy narzędzi korzystające z libc++ i GCC nie działają. Wygląda na to, o błędzie w GCC. Zobacz zatwierdzenie, , aby dowiedzieć się więcej.
  • Nagłówki i biblioteki Bionic w wersjach Marshmallow i N nie są jeszcze ujawnione pomimo obecności Androida-24. Te platformy w dalszym ciągu Nagłówki i biblioteki Lollipop (nie jest to regresja z r11).
  • Brak narzędzi RenderScript (to nie jest regresja z r11): Problem 7.
Pobrane
  • Pobrania tej wersji są archiwizowane tutaj.
Ogłoszenia
  • Domyślnie polecenie ndk-build w r13 używa języka Clang. Usuniemy GCC za kolejnej wersji.
  • Skrypt make-standalone-toolchain.sh zostanie usunięty w r13. Upewnij się, że make_standalone_toolchain.py spełnia Twoje potrzeby.
  • Zgłoś problemy na GitHub.
. R12B
  • Rozwiązaliśmy problemy (ndk-gdb.py). (Numer 118)
  • Zaktualizowaliśmy plik NdkCameraMetadataTags.h, by nie zawierał już nieprawidłowego elementu wartości wyliczenia.
  • Błąd w ndk-build, który powodował wyświetlanie fałszywych ostrzeżeń dotyczących bibliotek statycznych korzystających z libc++ naprawiono błąd. Więcej informacji na temat tej zmiany można znaleźć w komentarzach tutaj.
  • Nagłówki OpenSLES zostały zaktualizowane pod kątem Androida-24.
NDK
  • Wycofaliśmy obsługę interfejsu ABI w wersji armeabi-v7a. Aby dowiedzieć się więcej, zobacz wyjaśnienie.
  • Usunięto wszystkie wartości sysroot dla platformy sprzed GB. W r11 zrezygnowaliśmy z ich wsparcia, lecz także zaniedbało się ich usunąć.
  • Obsługa wyjątków w przypadku użycia c++_shared w ARM32 działa teraz głównie. Sekcja odwijania będzie teraz być połączone z każdym połączonym obiektem, a nie z samym biblioteką libc++. Więcej informacji na temat: obsługi wyjątków, zobacz Znane problemy.
  • Domyślne flagi kompilatora zostały przycięte. (Problem 27).
  • Dodaliśmy implementację samodzielnych łańcuchów narzędzi w Pythonie: build/tools/make_standalone_toolchain.py
    • Użytkownicy systemu Windows nie potrzebują już programu Cygwin, aby korzystać z tej funkcji.
    • W r13 usuniemy smak bash, więc warto przetestować nowy.
  • W przypadku kompilacji debugowania Clang usługa -fno-limit-debug-info jest domyślnie włączona. Ta zmiana powinna poprawić możliwość debugowania przy użyciu LLDB.
  • Usługa --build-id jest teraz domyślnie włączona.
    • Identyfikator kompilacji będzie teraz widoczny w natywnych raportach o awariach, określić, która wersja Twojego kodu była uruchomiona.
  • Element NDK_USE_CYGPATH nie powinien już powodować problemów z biblioteką libgcc. (Android Numer sprawy 195486)
  • -Wl, --warn-shared-textrel i -Wl,--fatal-warnings opcje są teraz domyślnie włączone. Jeśli korzystasz z udostępnionych relokacji tekstu, aplikacja nie będzie mogła Android 6.0 (poziom interfejsu API 23) lub nowszy. Przenoszenie tekstu nigdy nie było dozwolone w przypadku Aplikacje 64-bitowe.
  • Wstępnie skompilowane nagłówki powinny działać lepiej. (Problem 14 i Problem 16)
  • Usunęliśmy niedostępne biblioteki STL ARM (inne niż kciuki).
  • Dodano obsługę języka Vulkan w Androidzie 24.
  • W Androidzie 24 dodano interfejs Choreographer API.
  • Dodano interfejsy API libcamera2 dla urządzeń z INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED lub więcej. Więcej informacji: Cechy aparatu.
Brzęk
  • Język Clang został zaktualizowany do wersji 3.8svn (r256229, kompilacja 2812033).
    • Pliki wykonywalne clang.exe i clang++.exe w 32-bitowym Pakiet Windows jest w rzeczywistości 64-bitowy. 32-bitowy plik wykonywalny ma nazwę clang_32.exe
  • Tym razem aplikacja __thread powinna działać na żywo.
GCC
  • Synchronizacja z ChromeOS GCC @ google/gcc-4_9 r227810.
  • Poprawka narzędzia sanitizer w zakresie wstecznym z ToT (R231296).
  • Naprawiono libatomię, aby nie używać funkcji ifuncs. (Numer 31)
Binutils
  • Wyciszone komunikaty „Erratum 843419 znaleziono i naprawiono”.
  • Wprowadziliśmy opcję --long-plt, aby naprawić błąd wewnętrznego tagu łączącego, który występuje, gdy łączące ogromne pliki binarne arm32.
  • Naprawiono nieprawidłowe skrócenia czasu działania dla AArch64. To powoduje obliczanie adresów przesiadkowych niewłaściwie dla bardzo dużych DSO.
  • Wprowadzona opcja domyślna --no-apply-dynamic w celu obejścia błędu dynamicznego łączącego z wcześniejszymi wersjami Androida.
  • NDK r11 KI w języku dynamic_cast nie działa z językiem Clang. Naprawiliśmy x86, stlport_static i optymalizację.
GDB,
  • Zaktualizowano do GDB 7.11 Więcej informacji: GDB News (Wiadomości GDB).
  • Poprawki błędów dotyczących aplikacji ndk-gdb.py.
Znane problemy
  • x86 ASAN nadal nie działa. Więcej informacji można znaleźć w dyskusji na temat tę listę zmian.
  • Rozwijanie wyjątku za pomocą funkcji c++_shared nadal nie działa w przypadku architektur ARM na Androidzie 2.3 (poziom API 9) lub 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 widoczne mimo wdrożenia Androida-24. Te platformy to nadal nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21). (nie regresja z r11).
  • Brak narzędzi RenderScript (to nie jest regresja z r11). (Problem 7)
  • Ta historia zmian nie ma być wyczerpującą listą wszystkich nierozwiązanych problemów.
Pobrane
  • Pobrania tej wersji są archiwizowane tutaj.
Ogłoszenia
  • Domyślnie polecenie ndk-build będzie używać polecenia Clang w nadchodzącej wersji. W nadchodzącej wersji usługa GCC zostanie usunięta.
  • Skrypt make-standalone-toolchain.sh zostanie usunięty w kolejnej wersji. Jeśli używasz tego skryptu, zaplanuj migrację do make_standalone_toolchain.py.
NDK
  • Usunęliśmy obsługę interfejsu ABI Armeabi-v7a. Wyjaśnienie znajdziesz w dokumentacji.
  • Usunęliśmy wszystkie katalogi sysroot na poziomach platformy sprzed Androida 2.3 (poziom API 9). Zakończyliśmy ich wsparcie w ramach NDK r11, ale nie zdołaliśmy ich usunąć.
  • Zaktualizowano obsługę wyjątków w przypadku korzystania z c++_shared w ARM32, tak aby Przeważnie działa (zobacz Znane problemy). Odprężenie jest teraz połączony z każdym połączonym obiektem, a nie z samym libc++.
  • Przycięto domyślne flagi kompilatora (NDK Issue 27). Możesz zobaczyć, szczegóły dotyczące tej aktualizacji znajdziesz w sekcji Zmiana 207721.
  • W build/tools/make_standalone_toolchain.py dodaliśmy implementację samodzielnych łańcuchów narzędzi w języku Python. W systemie Windows nie można już wymaga narzędzia Cygwin, aby korzystać z tej funkcji. Pamiętaj, że smak bash zostanie usunięty , więc warto przetestować nową wersję już teraz.
  • Skonfigurowano kompilacje debugowania Clang tak, aby miały -fno-limit-debug-info jest domyślnie włączona. Ta zmiana ułatwia debugowanie za pomocą LLDB.
  • Włączono --build-id jako opcję domyślną. Ta opcja sprawia, że identyfikator jest wyświetlany w raportach o awariach natywnych, określić, która wersja Twojego kodu była uruchomiona.
  • Rozwiązaliśmy problem z atrybutem NDK_USE_CYGPATH, który już nie powoduje Problemy z libgcc (Numer 195486).
  • Te opcje zostały domyślnie włączone: -Wl,--warn-shared-textrel i -Wl,--fatal-warnings. Jeśli udostępniasz relokacje tekstu, Twoja aplikacja nie wczytuje się na Androidzie 6.0 (poziom interfejsu API 23) i wyższy. Pamiętaj, że ta konfiguracja nigdy nie była jest dozwolony w przypadku aplikacji 64-bitowych.
  • Naprawiliśmy kilka błędów, aby wstępnie skompilowane nagłówki działały lepiej (NDK nr 14, NDK nr 16).
  • Usunęliśmy niedostępne biblioteki STL ARM (inne niż kciuki).
  • Dodano obsługę języka Vulkan w Androidzie 24.
  • W Androidzie 24 dodano interfejs Choreographer API.
  • Dodano interfejsy API libcamera2 dla urządzeń, które obsługują INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED na poziomie funkcji lub wyższym. Więcej informacji: CameraCharacteristics.
Brzęk
  • Język Clang został zaktualizowany do wersji 3.8svn (r256229, kompilacja 2812033). clang.exe i Pliki wykonywalne clang++.exe w 32-bitowym pakiecie Windows są w rzeczywistości 64-bitowe. 32-bitowy plik wykonywalny ma nazwę clang_32.exe.
  • Naprawiono __thread, aby tym razem działało.
GCC
  • Zsynchronizowano kompilator z ChromeOS GCC @ google/gcc-4_9 r227810.
  • Poprawka narzędzia sanitizer w zakresie wstecznym z ToT (R231296).
  • Naprawiono libatomic, aby nie używać elementów ifuncs (NDK nr 31).
Binutils
  • Wyciszono komunikat „Erratum 843419 znaleziony i naprawiony” wiadomości informacyjne.
  • Wprowadzono opcję --long-plt służącą do naprawiania wewnętrznego błędu tagu łączącego w przypadku łączenia dużych plików binarnych arm32.
  • Naprawiono nieprawidłowe krótkie czasy uruchomienia dla AArch64. Ten problem był powodując nieprawidłowe obliczanie adresów przesiadkowych w przypadku bardzo dużych – dynamiczne obiekty udostępniane (DSO).
  • Wprowadzono domyślną opcję --no-apply-dynamic, aby obejść problem dynamicznego łączącego linki we wcześniejszych wersjach Androida.
  • Rozwiązaliśmy znany problem z kodem dynamic_cast w pakiecie NDK r11 jak Clang, x86, stlport_static i Optimize.
GDB,
  • Zaktualizowano do GDB w wersji 7.11. Więcej informacji o tej wersji znajdziesz w artykule Wiadomości GDB
  • Naprawiliśmy kilka błędów w skrypcie ndk-gdb.py.
Znane problemy
  • Adres x86 Sanitizer (ASAN) obecnie nie działa. Więcej informacji: Numer sprawy 186276.
  • Wycofanie wyjątku z ustawieniem c++_shared nie działa w przypadku architektur ARM z włączonym architekturą ARM Android 2.3 (poziom interfejsu API 9) lub Android 4.0 (poziom API 14).
  • Nagłówki i biblioteki Bionic na Androida 6.0 (poziom interfejsu API 23) i nowsze nie są jeszcze widoczne mimo wdrożenia Androida-24. Te platformy nadal mają nagłówki i biblioteki Androida 5.0 (poziom interfejsu API 21), co zapewnia spójność z NDK r11.
  • Brak narzędzi RenderScript, co jest zgodne z NDK r11. (NDK nr 7)
  • W pliku nagłówka NdkCameraMetadataTags.h metadane kamery wartość wyliczeniowa tagów ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP został umieszczony przez przypadek i zostanie usunięty w następnej wersji. Używaj ACAMERA_STATISTICS_LENS_SHADING_MAP.
Zmiany
  • Zastosowano dodatkowe poprawki do skryptu ndk-gdb.py.
  • Do funkcji ndk-gdb dodano opcjonalny argument nazwy pakietu. polecenie --attach. (Numer 13)
  • Naprawiono nieprawidłowe ścieżki łańcucha narzędzi dla 32-bitowej platformy Windows. (Numer 45)
  • Naprawiono ścieżkę względną polecenia ndk-which. (Numer 29)
  • Naprawiono użycie narzędzia cygpath na potrzeby kompilatora libgcc. (Problem z Androidem 195486)
NDK
  • Ważne ogłoszenia
    • Przenieśliśmy tracker błędów do GitHub.
  • Zmiany
    • Problem z ndk-gdb.py został rozwiązany. Zawierała całkowicie wycofał w r11.
    • ndk-gdb na Maca został rozwiązany.
    • 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 poprzednim poleceniu wersji.
    • Naprawiono samodzielne łańcuchy narzędzi dla libc++, których brakowało. __cxxabi_config.h
    • Naprawiono dokumentację pomocy dotyczącą --toolchain w make-standalone-toolchain.sh
Brzęk
  • Errata
    • Wbrew temu, co pisaliśmy w informacjach o wersji r11, __thread nie działa. Dzieje się tak, ponieważ dostarczana przez nas wersja Clang nie ma poprawki błędu emulację obsługi TLS.
Brzęk
  • Ważne ogłoszenia
    • Zdecydowanie zalecamy przejście na język Clang.
      • Jeśli masz problemy z Clang, zgłoś błędy tutaj, aby zgłosić problemy. co charakterystyczne dla Clangu w NDK. W przypadku bardziej ogólnych problemów z Clangiem możesz zgłosić błędy, postępując zgodnie z instrukcjami na tej stronie.
    • Język Clang został zaktualizowany do wersji 3.8svn (r243773, kompilacja 2481030).
      • Ta wersja to niemal czysta wersja z pierwotnego języka Clang.
      • 64-bitowy pakiet NDK do pobrania dla systemu Windows zawiera 32-bitowy wersji Clang.
  • Dodane
    • Clang obsługuje teraz emulację protokołu TLS.
      • Kompilator obsługuje teraz interfejs __thread przez emulację ELF TLS z danymi specyficznymi dla wątku pthread.
      • C++11 thread_local działa w niektórych przypadkach, ale nie danych z prostymi destrukcjami, ponieważ takie przypadki wymagają wsparcia ze strony libc. To ograniczenie nie oznacza, mają zastosowanie do Androida 6.0 (poziom interfejsu API 23) lub nowszego.
      • Emulacja TLS nie działa jeszcze z Aarch64, gdy Zmienne TLS są dostępne z zasobów wspólnych.
GCC
  • Ważne ogłoszenia
    • GCC w NDK zostało wycofane i zastąpione Clang.
      • Pakiet NDK nie zostanie uaktualniony do wersji 5.x ani nie zaakceptuje niekrytycznych portów.
      • Konserwacja błędów kompilacji i wewnętrznych błędów kompilatora w wersji 4.9, będzie rozpatrywane indywidualnie.
  • Usunięcia
    • Usunęliśmy GCC 4.8. Wszystkie cele używają teraz GCC 4.9.
  • Inne zmiany
    • Zsynchronizowano google/gcc-4_9 z r224707. Wcześniej trzeba było zsynchronizowane z r214835.
NDK
  • Ważne ogłoszenia
    • Próbki nie są już zawarte w pakiecie NDK. Są one natomiast dostępne na tych stronach: GitHub.
    • Dokumentacja nie jest już dołączona do pakietu NDK. Program ten jest dostępny w systemie Android w witrynie dewelopera.
  • Dodane
    • Do projektu android-23 dodano natywny interfejs API śledzenia.
    • Do pakietu android-23 dodano natywny interfejs API wielosieciowy.
    • Włączono libc, m i dl w celu udostępniania symboli z obsługą wersji, zaczynając od poziomu API 21.
    • Dodano nagłówki i bibliotekę interfejsu Vulkan do poziomu interfejsu API N.
  • Usunięcia
    • Wyłączono obsługę _WCHAR_IS_8BIT.
    • Usunięto sed.
    • Usunięto Mclinker.
    • Usunięto język Perl.
    • Usunięto ze wszystkich wersji NDK libc, m i dl wszystkich symboli, które nie obsługują wersji platformy tych bibliotek.
    • Częściowo usunięto obsługę mips64r2. Pozostałe zostaną usunięte w przyszłości.
  • Inne zmiany
    • Zmieniono samodzielne łańcuchy narzędzi ARM na domyślne na arm7.
      • Można przywrócić stare zachowanie, podając parametr -target jako armv5te-linux-androideabi.
    • Zmieniono system kompilacji, tak aby używał w przypadku platformy -isystem zawiera.
      • Ostrzeżenia o przyczynach bionicznych nie powodują już usterki kompilacji aplikacji.
    • Naprawiono segfagen, który występował, gdy plik binarny zwrócił wyjątki przez gabi++. (Numer 179410)
    • Wbudowana przestrzeń nazw libc++ została zmieniona na std::__ndk1 aby zapobiec problemom ODR dotyczącym platformy libc++.
    • Wszystkie biblioteki libc++ są teraz tworzone w bibliotece libc++abi.
    • Domyślna wartość APP_PLATFORM została zmieniona na Gingerbread.
      • Obsługa Froyo i starszych wersji zostanie dodana do przyszłą wersję.
  • Zaktualizowana struktura _Unwind_Exception gabi++ dla 64-bitów.
  • Dodaliśmy te funkcje do procesorów:
    • Wykryj SSE4.1 i SSE4.2.
    • Wykrywanie funkcji procesora na procesorach x86_64.
  • Zaktualizowano libc + +abi na nadrzędną wersję r231075.
  • Zaktualizowano byteswap.h, endian.h, sys/procfs.h, sys/ucontext.h, sys/user.h i uchar.h od ToT Bionic.
  • Zsynchronizowano interfejs sys/cdefs.h na wszystkich poziomach interfejsu API.
  • Poprawiono fegetenv and fesetenv dla grupy eksperymentalnej.
  • Popraw rozmiar/wyrównanie wskaźnika końcowego crtend_* w mips64 i x86_64.
Binutils
  • Dodane
    • Dodano nową opcję: --pic-veneer.
  • Usunięcia
    • 32-bitowy pakiet systemu 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 plików binutils między Androidem a systemem operacyjnym Chromium. Więcej informacji na temat tej zmiany można znaleźć w komentarzach tutaj.
    • Większa niezawodność pakietu Gold w Aarch64. Używaj -fuse-ld=gold w czasie połączenia, aby używać złota zamiast bfd. Wartość domyślna prawdopodobnie zmieni się w następnej wersji.
    • Krótszy czas łączenia z ogromnymi plikami binarnymi w backendzie Gold ARM (nawet o 50% skrócenie czasu łączenia w przypadku przeglądarki Chrome z możliwością debugowania).
GDB,
  • Usunięcia
    • Usunięto plik ndk-gdb na rzecz ndk-gdb.py.
  • Zmiany
    • Zaktualizowano gdb do wersji 7.10.
    • Ulepszone działanie.
    • Poprawiono komunikaty o błędach.
    • Stałe względne ścieżki projektów.
    • Zatrzymano działanie kombinacji klawiszy Ctrl+C na serwerze gdb w tle.
    • Ulepszona obsługa systemu Windows.
Treści YASM
  • Zmiany
    • Zaktualizowano YASM do wersji 1.3.0.
Znane problemy
  • ASAN x86 nie działa obecnie. Więcej informacji: dyskusja tutaj.
  • Kombinacja Clang, x86, stlport_static i optymalizacja poziomy wyższy niż -O0 powodują błędy testów z dynamic_cast Więcej informacji można znaleźć w komentarzach tutaj.
  • Obsługa wyjątków często kończy się niepowodzeniem w przypadku użycia c++_shared w ARM32. Poziom główny jest niezgodność między narzędziem do tworzenia modeli LLVM, którego używa libc++abi. dla ARM32 i libgcc. To zachowanie nie oznacza regresji po r10e.
Pobrane
  • Pobrania tej wersji są archiwizowane tutaj.
Ważne zmiany:
  • Zintegrowano obejście dla modelu Cortex-A53 Erratum 843419 w aarch64-linux-android-4.9 – tag łączący. Więcej informacji o tym obejściu znajdziesz w artykule Obejście problemu w przypadku Cortex-A53 erratum 843419.
  • Dodano Clang 3.6; NDK_TOOLCHAIN_VERSION=clang wybiera teraz tę wersję domyślnie Clang.
  • Usunęliśmy Clang 3.4.
  • Usunęliśmy GCC 4.6.
  • Wdrożono obsługę wielowątkowości w ld.gold dla wszystkich architektur. Może teraz link z obsługą wielowątkowości lub bez niej; domyślnie.
    • Aby skompilować z użyciem wielowątkowości, użyj opcji --threads.
    • Aby skompilować bez wielowątkowości, użyj opcji --no-threads.
  • Uaktualniono GDB/gdbserver do wersji 7.7 dla wszystkich architektur.
  • Usunęliśmy pakiet NDK dla 32-bitowego Darwina.
Ważne poprawki błędów:
  • Naprawiliśmy awarię, która występowała, gdy poza wątkiem głównym występowały pętle OpenMP.
  • Usunęliśmy błąd wewnętrznego kompilatora GCC 4.9 (ICE), który występował, gdy użytkownik zadeklarował #pragma GCC optimize ("O0"), ale miał ustawiony inny poziom optymalizacji w wierszu poleceń. pragma ma pierwszeństwo.
  • Naprawiono błąd, który powodował awarię z następującym komunikatem o błędzie:
    in add_stores, at var-tracking.c:6000
    
  • Wprowadziliśmy obejście problemu w języku Clang 3.5, w którym automatyczna wektoryzacja LLVM generuje instrukcję llvm.cttz.v2i64(), która nie ma odpowiednika w architekturze ARM. zestawu instrukcji.
Inne poprawki błędów:
  • Wprowadziliśmy następujące poprawki nagłówka i biblioteki:
    • Naprawiono PROPERTY_* w: media/NdkMediaDrm.h.
    • Naprawiono sys/ucontext.h dla: mips64.
    • Sprawdzanie wersji języka Clang zostało wyłączone w przypadku tych języków: __builtin_isnan i __builtin_isinf
    • Dodano android-21/arch-mips/usr/include/asm/reg.h i android-21/arch-mips64/usr/include/asm/reg.h.
  • Naprawiliśmy ostrzeżenie o fałszywych granicach tablicy wyświetlane przez GCC 4.9 dla x86 i ponownie aktywowano ostrzeżenia granic tablicy, które GCC 4.9 wygenerowało dla ARM. Ostrzeżenie dla ARM było zostały wcześniej bezwarunkowo wyłączone.
  • Poprawiono Clang 3.5 dla mips i mips64, aby utworzyć element z możliwością zapisu .gcc_except_table, w ten sposób pasujący do zachowania GCC. Dzięki tej zmianie możesz: aby uniknąć tego ostrzeżenia dotyczącego kreatora linków:
    .../ld: warning: creating a DT_TEXTREL in a shared object
    
  • Przeniesiono poprawkę na compiler-rt problemy, które powodowały awarie w przypadku korzystania z Clang skompilowane dla: mips64. Więcej informacji znajdziesz w artykule o problemie z LLVM 20098.
  • Rozwiązano awarie języka Clang 3.5, które występowały w komentarzach spoza zestawu ASCII. (Problem 81440);
  • Naprawiono stlport collate::compare, aby zwrócić wartości -1 i 1. Wcześniej, zwraca dowolne podpisane liczby.
  • Naprawiono ndk-gdb dla 64-bitowych interfejsów ABI. (Problem 118300).
  • Naprawiliśmy awarię, która była wywoływana przez przykładową aplikację HelloComputeNDK dla kodu RenderScript Android 4.4 (Android API na poziomie 19). Więcej informacji: tej stronie.
  • Poprawiono libc++ __wrap_iter dla GCC. Więcej informacji znajdziesz w artykule o problemie z LLVM 22355.
  • Naprawiono obsługę interfejsu ABI x86_64 w .asm.
  • Wprowadziliśmy obejście problemu stlport w GCC 4.8. (Problem 127773).
  • Ze ścieżki projektu w systemie Windows usunięto końcowy separator katalogu \\. (Numer 160584)
  • Usunięto błąd no rule to make target, który występował podczas kompilowania pojedynczego pliku .c, wykonując polecenie ndk-build.cmd z systemu gradle. (Problem 66937).
  • Dodano biblioteki libatomic.a i libgomp.a, których brakowało w tych łańcuchów narzędzi hosta:
    • aarch64-linux-android-4.9
    • mips64el-linux-android-4.9
    • mipsel-linux-android-4.9
    • x86_64-4.9
Inne zmiany:
  • Dodano ld.gold do: aarch64. Domyślnym tagiem łączącym jest nadal ld.bfd. Aby jawnie włączyć interfejs ld.gold, dodaj -fuse-ld=gold do Zmienną LOCAL_LDFLAGS lub APP_LDFLAGS.
  • Stworzenie łańcuchów narzędzi MIPS i MIPS64 w połączeniu z narzędziem binutils-2.25, który zapewnia R6.
  • Ustawiono -fstandalone-debug (pełne dane debugowania) jako opcję domyślną w języku Clang.
  • Tekst -fstack-protector został zamieniony na -fstack-protector-strong dla łańcuchy narzędzi ARM, AArch64, X86 i X86_64 do GCC 4.9, Clang 3.5 Clang 3.6.
  • Do ndk-gdb dodano przełącznik wiersza poleceń --package, aby umożliwić kompilację w celu zastąpienia nazwy pakietu. (Problem 56189).
  • Wycofano pole -mno-ldc1-stc1 dla MIPS. Ta opcja może nie działać w przypadku nowej opcji -fpxx i -mno-odd-spreg lub z interfejsem ABI FPXX.
  • Do pakietu cpu-features dodano wykrywanie MSA i R6 MIPS.
Ważne zmiany:
  • Ustawienie GCC 4.8 jako domyślnego dla wszystkich 32-bitowych interfejsów ABI. wycofane GCC 4.6, usunie go w następnej wersji. Aby przywrócić poprzednie działanie, dodaj NDK_TOOLCHAIN_VERSION=4.6, aby ndk-build, lub dodaj --toolchain=arm-linux-androideabi-4.6 podczas wykonywania make-standalone-toolchain.sh w wierszu poleceń. GCC 4.9 pozostaje domyślnie dla 64-bitowych interfejsów ABI.
  • Wyłączono domyślne dodawanie funkcji -mstackrealign przez wszystkie łańcuchy narzędzi x86[_64]. Łańcuch narzędzi NDK zakłada wyrównanie stosu do 16 bajtów. narzędzia i opcje używane domyślnie; wyegzekwować tę regułę. Użytkownik piszący kod zestawu musi zadbać o zachowanie stosu i upewnić się, że inne kompilatory również przestrzegają tej zasady. (Błąd w GCC 38496)
  • Dodano funkcję Address Sanitizer do obsługi interfejsów Clang 3.5 w interfejsach ARM i x86. Więcej informacji o tej zmianie znajdziesz w Adres Sanitizer.
  • Wprowadziliśmy wymaganie, aby od poziomu 21 interfejsu API można było używać -fPIE -pie podczas tworzenia. Na poziomach API 16 i wyższych ndk-build używa parametru PIE podczas tworzenia. Ta zmiana wiąże się z wieloma konsekwencjami, które zostały omówione Problem nr 888 dla programistów dotyczący wersji przedpremierowej. Nie dotyczą one bibliotek udostępnionych.
Ważne poprawki błędów:
  • Wprowadziliśmy 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, gdy Wartość -mfix-cortex-a53-835769 (domyślnie włączona) jest określona. Więcej informacji znajdziesz tutaj komunikat binutils oraz komunikat binutils.
  • Udokumentowaliśmy poprawkę z problemem z biblioteką libc++ sscanf/vsscanf, która wystąpiła na poziomie interfejsu API. 21. Sama poprawka została wdrożona w r10c. (Numer 77988)
  • Naprawiono błąd AutoFDO (-fauto-profile), który występował w GCC 4.9 podczas Określono -Os. (Numer 77571)
Inne poprawki błędów:
  • Wprowadziliśmy następujące poprawki nagłówka i biblioteki:
    • Dodano posix_memalign do poziomu API 16. Ponadto dodaliśmy prototyp w stdlib.h do interfejsów API na poziomach 16–19. (Numer 77861)
    • Naprawiono stdatomic.h, aby uwzględnić <atomic> tylko w przypadku C++11.
    • Zmieniono następujące nagłówki do samodzielnego użytku: sys/user.h oraz gl2ext.h, dlext.h, fts.h, sgidefs.h dla interfejsu API poziomu 21.
    • Zmodyfikowano plik sys/user.h, aby zmienić nazwę mxcsr_mask na mxcr_mask. oraz zmienić typ danych dla u_ar0
    • z: unsigned long do struct user_regs_struct*.
    • Zmieniono typ wartości zwróconej funkcji sysconf() z int na long
  • Poprawiono obsługę polecenia thumb przez kompilację ndk w przypadku LOCAL_ARM_MODE: w r10d, ndk-build domyślnie dodaje parametr LOCAL_LDFLAGS+=-mthumb, chyba że jeden z obowiązują następujące warunki:
    • LOCAL_ARM_MODE ma wartość równą arm.
    • Wykonujesz kompilację do debugowania (z takimi ustawieniami jak APP_OPTIM=debug czy AndroidManifest.xml obejmujące android:debuggable="true"), gdzie domyślnym trybem jest tryb ARM, który pozwala zachować zgodność z wcześniejszymi łańcuchami narzędzi. (Numer 74040)
  • Naprawiono LOCAL_SRC_FILES w ndk-build, aby korzystać ze ścieżek bezwzględnych Windows. (Numer 74333)
  • Z ndk-gdb usunięto kod związany z bash. (Numer 73338)
  • Z pliku make-standalone-toolchain.sh usunięto kod bash. (Numer 74145)
  • Poprawiona dokumentacja dotycząca rozwiązania problemu z przechodnim kodem System.loadLibrary() zależności. (Numer 41790)
  • Rozwiązaliśmy problem, który uniemożliwiał wyodrębnienie pakietów 64-bitowych w systemie Ubuntu 14.04 i OS X 10.10 (Yosemite). (Numer 78148)
  • Rozwiązaliśmy problem z funkcją LOCAL_PCH, aby ulepszyć obsługę języka Clang. (Problem 77575).
  • Doprecyzowano „wymaga stosu wykonywalnego”. ostrzeżenie z ld.gold. (Problem 79115);
Ważne zmiany:
  • Wprowadziliśmy te zmiany w strukturze pobierania:
    • Każdy pakiet zawiera teraz zarówno 32-, jak i 64-bitowe nagłówki, biblioteki i narzędzia do ze swojej platformy.
    • Biblioteki STL z danymi debugowania nie trzeba już pobierać oddzielnie.
  • Zmieniono wszystkie treści, które wcześniej nazywały się Android-L, na oficjalną wersję oznaczenie: android-21.
  • Zaktualizowano GCC 4.9 przez przywrócenie odpowiedzialności do gałęzi google repozytorium GCC. Główne różnice w porównaniu z wcześniejszą wersją GCC 4.9 to:
    • Opcja -O2 włącza teraz wektoryzację bez zapętlenia, ale więcej agresywne rozwinięcie.
    • Ulepszenia FDO i LIPO,
    • Więcej szczegółowych informacji znajdziesz w sekcji Poprawki ważnych błędów poniżej.

  • Dodano obsługę języka 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 program asembsu. Jeśli powoduje to problemy, użyj wartości Aby obejść ten problem, -fno-integrated-as
    • Clang 3.5 generuje kolejne ostrzeżenia w przypadku nieużywanych flag, takich jak -finline-functions obsługiwaną przez GCC.
    • Podczas migracji z projektów przy użyciu GCC możesz używać: -Wno-invalid-command-line-argument i -Wno-unused-command-line-argument ignorując nieużywane flagi, dopóki nie zdecydujesz się, co zrobić z nimi w dłuższej perspektywie.

  • Tryb debugowania ART umożliwiał korzystanie z trybu debugowania na urządzeniu z Androidem 5.0 przy użyciu ART jako swoją maszynę wirtualną, określając opcję art-on. Aby dowiedzieć się więcej, wyświetl prebuilt/common/gdb/common.setup w katalogu zawierającym pakiet NDK.
  • Wyłączyliśmy obsługę Clang 3.3.
  • Wycofaliśmy GCC 4.6 i możemy go usunąć z kolejnych wersji.
  • Zaktualizowano Mclinker do wersji 2.8 z obsługą funkcji składania Identical Code Fold (ICF). Określ ICF za pomocą Opcja: --icf.
  • Rozszerzenie arm_neon.h na architekturę x86 i x86_64, przez co zapewnia pokrycie ok. 93% NEON. Więcej informacji o obsłudze NEON:
    • Przejdź do Przewodnika dla programistów NDK (docs/Programmers_Guide/html/) i zobacz Architektury i CPU > Neonowy.
    • Sprawdź zaktualizowaną próbkę hello-neon w języku: samples/.
    • Zobacz przewodnik firmy Intel dotyczący przenoszenia z procesora ARM NEON na Intel SSE.
  • Udokumentowana pomoc dla usługi _FORTIFY_SOURCE w headers/libs/android-21. który pojawiał się w r10 (kiedy android-21 nadal nazywał się Android-L), ale nie mają dokumentów.
Ważne poprawki błędów:
Inne poprawki błędów:
  • Wprowadziliśmy następujące poprawki nagłówka i biblioteki w android-21:
    • Dodano więcej kodów klawiszy TV: android/keycodes.h
    • Dodano więcej stałych i 6 nowych funkcji czujnika do urządzenia android/sensor.h: ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount ASensor_getFifoReservedEventCount, ASensor_getStringType, ASensor_getReportingMode i ASensor_isWakeUpSensor.
    • Naprawiliśmy stdatomic.h, aby zwiększyć zgodność z GCC 4.6 i zapewnić wsparcie dla nagłówka <atomic>.
    • Dodano sys/ucontext.h i sys/user.h do wszystkich poziomów interfejsu API. Nagłówek signal.h zawiera teraz <sys/ucontext.h>. Możesz usuń istniejącą definicję słowa struct ucontext.
    • Dodano posix_memalign do poziomów API 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: native-media/AndroidManifest.xml przykład. (Numer 106640)
    • Dodano clock_nanosleep i clock_settime do interfejsu API poziomu 21. (Problem 77372).
    • Ze wszystkich architektur usunięto te symbole: get_malloc_leak_info, free_malloc_leak_info, __srget, __swbuf, __srefill, __swsetup, __sdidinit, __sflags, __sfp, __sinit, __smakebuf, __sflush, __sread __swrite, __sseek, __sclose _fwalk, __sglue, __get_thread, __wait4 __futex_wake, __open, __get_tls __getdents64 i dlmalloc.
    • 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 na int w te funkcje: strtoll_l, strtoull_l, wcstoll_l i wcstoull_l.
    • Te funkcje zostały przywrócone do architektury 64-bitowej: arc4random, arc4random_buf i arc4random_uniform.
    • Przeniesiono z powrotem operatory cxa_* oraz new i delete do libstdc++.so. Ta zmiana przywraca działanie r9d. poprzednie wersje r10 zawiera pliki zastępcze.
  • Przywrócona obsługa MXU w GCC 4.8 i 4.9 dla MIPS. Tego wsparcia nie było w Pana/Pani firmie r10 i r10b, ponieważ te wersje GCC zostały skompilowane za pomocą pakietu binutils-2.24, który nie obsługują MXU. Teraz tak.
  • Naprawiono --toolchain= w make-standalone-toolchain.sh: teraz prawidłowo obsługuje użycie sufiksu określającego wersję języka Clang.
  • Naprawiliśmy funkcje libc++/armeabi strtod().
  • Poprawiono dokumentację NDK w pliku docs/.
Inne zmiany:
  • Ulepszono cpu-features, aby wykrywać obsługę ARMv8 w przypadku tych urządzeń zestawy instrukcji: AES, CRC32, SHA2, SHA1 i 64-bitowe zestawy instrukcji PMULL/PMULL2. (Problem 106360);
  • Zmodyfikowano ndk-build, aby używać narzędzia *-gcc-ar, które jest dostępne w GCC 4.8, GCC 4.9 oraz Brzęk. Określa go język klasowy, a nie *-ar. To ustawienie poprawia LTO .
  • Usunięto: include-fixed/linux/a.out.h oraz Nagłówki include-fixed/linux/compiler.h z kompilatora GCC. (Numer 73728)
  • Rozwiązaliśmy problem związany z -flto w GCC 4.8 w systemie Mac OS X. Komunikat o błędzie odczyt:
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • Poprawiono literówkę w pliku build-binary.mk. (problem 76992).
Ważne znane problemy:
  • Określenie -Os (-fauto-profile) w GCC4.9 może spowodować awarię. (Numer 77571)
Ważne uwagi:
  • Ze względu na ograniczenie rozmiaru pakietów do 512 MB, wymienione poniżej 32-bitowe elementy nie znajdują się w 32-bitowych pakietach do pobrania w formacie NDK. Zamiast tego działają w 64-bitowych plikach:
    • Nagłówki Android-L
    • GCC 4.9
  • Obecnie pakiet NDK obsługuje tylko 32-bitowy kod Renderscript w języku Renderscript tylko w przypadku Androida 4.4 (poziom interfejsu API 19). Nie możesz skompilować HelloComputeNDK (jedynego przykładu w skrypcie Renderscript) z żadną inną kombinacją kodu Renderscript (32- lub 64-bitowego) oraz wersji Androida.
  • Do skompilowania kodeka natywnego potrzebny jest 64-bitowy pakiet NDK, w którym znajdują się wszystkie nagłówki Android-L.
Ważne poprawki błędów:
  • Poprawiono gdb 7.6 w GCC 4.8/4.9. (Numery 74112 i 74371).
  • Poprawiono GCC 4.8/4.9 dla procesorów x86, przez co nie są już domyślnie włączone -msse4.2 i -mpopcnt. (Numer 73843).
Inne poprawki błędów:
  • Usunięto plik stdio.h z katalogów include-fixed/ we wszystkich wersjach GCC. (Numer 73728).
  • Usunęliśmy zduplikowane pliki nagłówka z pakietów Windows w katalogach platforms/android-L/arch-*/usr/include/linux/netfilter*/. (Numer sprawy 73704).
  • Rozwiązaliśmy problem, który uniemożliwiał Clang utworzenie HelloComputeNDK.
  • Stały dostęp. (Numer 66595).
  • Wprowadziliśmy różne poprawki w dokumentach w docs/ i sources/third_party/googletest/README.NDK. (Numer sprawy 74069).
  • Wprowadziliśmy te poprawki w nagłówkach Android-L:
    1. Do ctype.h i wchar.h dodaliśmy 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().
    2. Nazwa cmsg_nxthdr została zmieniona na __cmsg_nxthdr.
    3. Użytkownik __libc_malloc_dispatch został usunięty.
    4. Zmieniono prototyp ptrace() na long ptrace(int, ...);.
    5. Użytkownik sha1.h został usunięty.
    6. Rozszerzono zakres android_dlextinfo na język android/dlext.h.
    7. Adnotacje __NDK_FPABI__ do funkcji odbierających lub zwracających wartości typu zmiennoprzecinkowego lub podwójnego w stdlib.h, time.h, wchar.h i complex.h.
Inne zmiany:
  • Zaktualizowano mipsel-linux-android-4.9 i mips64el-linux-android-4.9, wdrożyliśmy nowy układ katalogu Multilib i zapewniliśmy obsługę gdb-7.7
  • Ulepszono cpu-features, aby wykrywać więcej funkcji arm64. (Zmień listę 100339).
Ważne zmiany:
  • Dodano 3 nowe interfejsy ABI, wszystkie 64-bitowe: arm64-v8a, x86_64, mips64.
  • Pamiętaj, że:
    • GCC 4.9 to domyślny kompilator dla 64-bitowych interfejsów ABI. Clang to obecnie wersja 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ą 64-bitową. Pamiętaj, że ten interfejs API ma charakter tymczasowy i jest używany wyłącznie dla podglądu L. Rzeczywisty numer poziomu interfejsu API zastąpi go L.
    • Ta wersja obejmuje teraz all32 i all64 ustawienia usługi APP_ABI.
      • APP_ABI=all32 jest odpowiednikiem funkcji APP_ABI=armeabi,armeabi-v7a,x86,mips
      • APP_ABI=all64 jest odpowiednikiem funkcji APP_ABI=arm64-v8a,x86_64,mips64
      • APP_ABI=all wybiera wszystkie interfejsy ABI.
    • Nowa wersja GNU libstdc++ w Androidzie-L zawiera wszystkie <tr1/cmath> Przed zdefiniowaniem własnej funkcji matematycznej sprawdź _GLIBCXX_USE_C99_MATH_TR1, aby zobaczyć funkcja o tej nazwie już istnieje, aby uniknąć „wielu definicji” z sekcji tag łączący.
    • Biblioteka funkcji procesora została zaktualizowana pod kątem jądra ARMv8. Istniejący Biblioteka funkcji procesora może nie wykryć obecności technologii NEON na platformie ARMv8. Ponownie skompiluj z nową wersją.
  • Dodano nowy katalog interfejsu API platforms/android-L/. Usługa ta obejmuje:
    • Zaktualizowano nagłówki Bionic, które nie uległy zmianie od 3 poziomu interfejsu API Androida. (Babeczka) do 19 (KitKat). Ta nowa wersja dla poziomu L zostanie zsynchronizowana z AOSP.
    • Nowe interfejsy API multimediów i przykład kodeka natywnego.
    • Zaktualizowany nagłówek Android.h dla SLES/OpenSLES, umożliwiający obsługę zmiennoprzecinkowym formatem dźwięku z pojedynczą precyzją w odtwarzaczu AudioPlayer.
    • Rozszerzenia GLES 3.1 i AEP do wersji libGLESv3.so.
    • Nagłówki GLES2 i GLES3 zostały zaktualizowane do najnowszych oficjalnych wersji Khronosa.
  • Do 32-/64-bitowych interfejsów ABI dodaliśmy kompilatory GCC 4.9. GCC 4.9 to domyślny (tylko) kompilator dla 64-bitowych interfejsów ABI, jak już wspominaliśmy. W przypadku 32-bitowych interfejsów ABI musisz jawnie włączyć GCC 4.9, Wersja domyślna to GCC 4.6.
    • W przypadku polecenia ndk-build włącz wersję 32-bitową (GCC 4.9) przez dodanie NDK_TOOLCHAIN_VERSION=4.9 do usługi Application.mk lub wyeksportuj je jako plik zmienną środowiskową z wiersza poleceń.
    • W przypadku samodzielnego łańcucha narzędzi użyj opcji --toolchain= w Skrypt make-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*. GDB nadal działa w wersji GDB-7.3.x GCC 4.6 (domyślnie dla ARM i MIPS), musisz ustawić NDK_TOOLCHAIN_VERSION=4.8 lub 4.9, aby włączyć ndk-gdb i wybrać GDB 7.6.
  • Dodaliśmy opcję kompilacji -mssse3, która zapewnia obsługę SSSE3, i ustawiła ją jako domyślną dla interfejsu ABI x86. (uaktualnianie z SSE3). Obraz opublikowany przez Google nie zawiera instrukcji SSSE3.
  • Zaktualizowano GCC 4.8 do wersji 4.8.3.
  • Ulepszona obsługa ARM libc++ EH po przejściu z gabi++ na libc++abi. Aby dowiedzieć się więcej, zobacz „Pomoc dotycząca języka C++” w dokumentacji. Uwaga:
    • Wszystkie testy oprócz języka przechodzą teraz testy Clang 3.4 i GCC 4.8. Więcej Więcej informacji znajdziesz w artykule „Pomoc C++” w dokumentacji.
    • Biblioteki libc++ dla X86 i MIPS libc++ nadal używają gabi++.
    • GCC 4.7 i nowsze wersje mogą teraz używać obiektu <atomic>.
    • Jeśli używasz <list>, musisz dodać element -fno-strict-aliasing, ponieważ __list_imp::_end_ powoduje przerwę Zasady TBAA. (Numer 61571).
    • Od wersji GCC 4.6 zasada LIBCXX_FORCE_REBUILD:=true nie powoduje już ponownego kompilacji libc++. Kompiluję ją od nowa wymaga użycia innego kompilatora. Pamiętaj, że Clang 3.3 nie był testowany.
  • Program Mclinker jest teraz w wersji 2.7 i obsługuje Linuksa aarch64.
  • Dodano wstępnie skompilowaną obsługę nagłówków określonych przez LOCAL_PCH. (Numer 25412).
Ważne poprawki błędów:
  • Naprawiono libc++, dzięki czemu kompilacja to std::feof itp. (problem 66668).
  • Naprawiono wywołanie biblioteki niepodzielnej w języku Clang w wersji 3.3/3.4, które powodowało awarie w niektórych wersjach libc++. testy ABI Armeabi.
  • Rozwiązano awarie języka Clang 3.4, które występowały podczas odczytywania wstępnie skompilowanych nagłówków. (Numer 66657).
  • Naprawiono potwierdzenie -O3 w Clang 3.3/3.4 w następujących przypadkach:
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (numer 57381).
  • Naprawiliśmy tę awarię w Clang 3.3/3.4:
  • 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. (Numer 66950).
Inne poprawki błędów:
  • Stałe nagłówki:
    • Poprawiono 32-bitowy tag ssize_t na int zamiast long int.
    • Naprawiono WCHAR_MIN i WCHAR_MAX, aby odpowiednie znaki w zależności od architektury, w której są używane:
      • X86/MIPS: podpisany.
      • ARM: bez podpisu.
      • Aby wymusić domyślne zachowanie pamięci X86/MIPS bez podpisu, użyj -D__WCHAR_UNSIGNED__
      • Aby wymusić stosowanie 16-bitowego formatu wchar_t, użyj metody -fshort-wchar.
    • Z 32-bitowego libc.so usunięto nieistniejące symbole i dodaliśmy znaki pread64, pwrite64, ftruncate64 w przypadku Interfejs API Androida na poziomie 12 lub wyższym. (numer 69319). Więcej informacje, wyświetl komunikat zatwierdzenia powiązany z listą zmian AOSP 94137.
  • Usunięto ostrzeżenie GCC dotyczące ponownej definicji atrybutu putchar. Komunikat ostrzegawczy:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (Lista zmian 91185).
  • Naprawiono make-standalone-toolchain.sh --stl=libc++, przez co:
    • Kopiuje: cxxabi.h. (Numer 68001).
    • Działa w katalogach innych niż katalog instalacyjny NDK. (Numery 67690 i 68647).
  • Naprawiono GCC/Windows, aby cytować argumenty tylko wtedy, gdy jest to niezbędne do pojawienia się procesów w programów zewnętrznych. Ta zmiana zmniejszy prawdopodobieństwo przekroczenia limitu długości 32 KB.
  • Rozwiązaliśmy problem, który uniemożliwiał dostosowanie atrybutu APP_PLATFORM zmiennej środowiskowej.
  • Naprawiono implementację atrybutu IsSystemLibrary() w crazy_linker tak, że używa strrchr() zamiast strchr(), aby znaleźć prawdziwą nazwę bazową ścieżki biblioteki.
  • Naprawiono brak możliwości kompilacji w trybie debugowania natywnego dźwięku.
  • Rozwiązaliśmy problem z brakiem możliwości drukowania w gdb ekstremalnych liczb zmiennoprzecinkowych. (numer 69203).
  • Poprawiono brak możliwości kompilacji za pomocą języka Clang 3.4 za pomocą interfejsu -Wl,-shared (w przeciwieństwie do -shared, czyli nie było żadnych problemów z kompilacją). Problem polegał na tym, że Clang dodała aplikację -pie na Androida. cele, jeśli nie ma wartości -shared ani -static. Takie zachowanie, jest błędny, powodujący skargę, że -shared i -pie nie mogą współistnieć.
Inne zmiany:
  • Do łańcucha narzędzi x86 dodano komponent arm_neon.h, dzięki czemu emuluje teraz ok. 47% Neonowy. Obecnie formaty 64-bitowe nie są obsługiwane. Więcej informacji znajdziesz w sekcji o architekturze ARM Obsługa neonów w dokumentacji x86.
  • Przeniesiona optymalizacja ARM/GOT_PREL (dostępna w GCC 4.6 utworzona przez oddział Google GCC) na ARM GCC 4.8/4.9 Ta optymalizacja czasami zmniejsza liczbę instrukcji podczas uzyskiwania dostępu do globalnego zmiennych. Skrypt build.sh znajdziesz na przykład w $NDK/tests/build/b14811006-GOT_PREL-optimization/
  • Dodano wersję ARM dla STL gabi++, stlport i libc++. Teraz mają zarówno to, jak i kciuk w kształcie i trybu uzyskiwania zgody.
  • Można teraz nazywać skrypt Make-standalone-toolchain.sh za pomocą polecenia --toolchain=x86_64-linux-android-4.9, co odpowiada --toolchain=x86_64-4.9
Ważne zmiany:
  • Dodano obsługę kompilatora Clang 3.4. Opcja NDK_TOOLCHAIN_VERSION=clang wybiera teraz Clang 3.4. GCC 4.6 to ale jest to domyślny kompilator.
  • Dodano APP_ABI=armeabi-v7a-hard, z dodatkowa opcja multilib -mfloat-abi=hard. Te opcje dotyczą z procesorami ARM GCC 4.6/4.8 i Clang 3.3/3.4 (które korzystają z Assemera, Łącznika 4.8 i libs). Korzystając z tych opcji, pamiętaj o tych zmianach:
    • Podczas wykonywania skryptu ndk-build dodaj parametr następujące opcje dla środowiska docelowego Armeabi-v7a:
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      Skompilowana biblioteka zostanie skopiowana do folderu libs/armeabi-v7a. Dla majsterkowiczów działa zgodnie z oczekiwaniami, nie możesz określić zarówno armeabi-v7a, jak i armeabi-v7a-hard jako wartości docelowe (np. w wierszu APP_ABI=). Spowoduje to zignorowanie jednego z nich. Pamiętaj, że APP_ABI=all nadal jest odpowiednikiem funkcji armeabi armeabi-v7a x86 mips
    • Skrypt make-standalone-toolchain.sh kopiuje się biblioteki dodatkowe w katalogach /hard. Dodaj powyższe CFLAGS i LFLAGS do Zrób plik, aby włączyć GCC lub Clang, z którym chcesz połączyć biblioteki w /hard.
  • Dodano narzędzie Yasm Asm oraz narzędzie LOCAL_ASMFLAGS. i EXPORT_ASMFLAGS flag dla procesorów x86 celów. Skrypt ndk-build używa prebuilts/*/bin/yasm*, aby utworzyć LOCAL_SRC_FILES, mają rozszerzenie .asm.
  • Zaktualizowano MClinker do wersji 2.6.0, dodając -gc-sections .
  • Dodano eksperymentalną obsługę libc++ (nadrzędną wersję R201101). Użyj nowego przez wykonanie tych czynności:
    • Dodaj APP_STL := c++_static lub APP_STL := c++_shared w aplikacji Application.mk. Możesz odbudować ze źródła przez LIBCXX_FORCE_REBUILD := true
    • Wykonaj polecenie make-standalone-toolchain.sh --stl=libc++ aby utworzyć samodzielny łańcuch narzędzi z nagłówkami libc++/lib.
    . Więcej informacji: CPLUSPLUS-SUPPORT.html (Numer 36496)
Ważne poprawki błędów:
  • Naprawiono niezłamany rzut z nieoczekiwanego modułu obsługi wyjątków dla GCC 4.6/4.8 ARM EABI. (Numer GCC 59392)
  • Poprawiono GCC 4.8 w taki sposób, aby prawidłowo rozwiązać częściowe specjalizacja szablonu z zależny argument szablonu, który nie jest typem. (Numer GCC 59052)
  • Dodano więcej modułów do gotowego języka Python (problem 59902):
    • Mac OS X: zlib, bz2, _curses, _curses_panel, _hashlib, _ssl
    • Linux: zlib, nis, crypt, _curses i _curses_panel
  • Naprawiono serwer gdbserver x86 i MIPS. event_getmsg_helper
  • Naprawiono wiele błędów w łańcuchu narzędzi NDK RenderScriptu, w tym: problemy ze zgodnością na starszych urządzeniach i z odbiciem w C++.

Inne poprawki błędów:
  • Poprawki nagłówków:
    • Naprawiono brakujący #include <sys/types.h> w: android/asset_manager.h w przypadku interfejsu API Androida na poziomie 13 lub wyższym. (Numer 64988)
    • Naprawiono brakujący #include w: android/rect_manager.h w przypadku interfejsu API Androida na poziomie 14 lub wyższym.
    • Dodano JNICALL do list JNI_OnLoad i JNI_OnUnload w: jni.h. Pamiętaj, że JNICALL jest zdefiniowane jako __NDK_FPABI__. Aby dowiedzieć się więcej, zobacz sys/cdefs.h
    • Zaktualizowano te nagłówki, tak aby można było je uwzględnić bez konieczności ręcznie uwzględnić ich 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
    • Dodano sys/cachectl.h w przypadku wszystkich architektur. MIPS programiści mogą teraz dołączać ten nagłówek zamiast pisać #ifdef __mips__.
    • Naprawiono platforms/android-18/include/android/input.h przez dodanie __NDK_FPABI__ do funkcji odbierających lub zwracających liczby zmiennoprzecinkowej i liczby zmiennoprzecinkowej.
    • Naprawiono nieprawidłową wartość MIPS struct stat. do 64-bitowego odpowiednika interfejsu API Androida na poziomie 12 i nowszych. To nie jest poprawna odpowiedź Poprzednia wartość regresja wprowadzona w wersji r9c.
    • Zdefiniowano __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, oraz __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE na Androida API na poziomie 9 i niższym.
    • Dodano scalbln, scalblnf i Z scalblnl na x86 libm.so w przypadku interfejsów API w wersji 18 i nowszych.
    • Poprawiono literówkę w dokumencie sources/android/support/include/iconv.h (Numer 63806)
  • Poprawiono gabi++ std::unexpected(), aby zadzwonić std::terminate(), tak aby może zostać uruchomiony zdefiniowany przez użytkownika moduł obsługi std::terminate().
  • Naprawiliśmy błąd gabi++, aby wykrywać std::nullptr.
  • Stałe przykłady obrazów „Teapot” i „MoreTeapot”:
    • Rozwiązano problem z układami Tegra 2 i 3 przez zmianę lunety zmiennych, aby używać średniej dokładności. Moc lunety może być teraz mniejsza niż 1,0.
    • Zmieniono próbki, aby naciśnięcie przycisku głośności przywróciło trybu pojemnego i unieważnia SYSTEM_UI_FLAG_IMMERSIVE_STICKY Obrót ekranu nie powoduje aktywuje funkcję onSystemUiVisibilityChange i nie powoduje przywrócenia w trybie pojemnym.
  • Naprawiono skrypt ndk-build, który można było dodać -rpath-link=$SYSROOT/usr/lib i -rpath-link=$TARGET_OUT, aby użyć usługi ld.bfd do a potem dodawać linki do plików wykonywalnych. (Numer 64266)
  • Plik -Bsymbolic został usunięty ze wszystkich kompilacji STL.
  • Naprawiono ndk-gdb-py.cmd przez ustawienie wartości SHELL jako zmienna środowiskowa zamiast przekazywać go do python.exe, który ignoruje to ustawienie. (Numer 63054)
  • Naprawiono skrypt make-standalone-toolchain.sh w taki sposób, opcja --stl=stlport powoduje skopiowanie nagłówków gabi++ zamiast oznaczanie ich symbolami; powłoki cmd.exe i MinGW nie rozumiają, dowiązania symboliczne utworzone przez narzędzie cygwin.
Inne zmiany:
  • Zastosowano uprawnienia do wykonywania do wszystkich *cmd skryptów przeznaczone do użytku tylko w powłoce cmd.exe, na wypadek, deweloperzy wolą używać ndk-build.cmd w cygwin zamiast zalecany skrypt ndk-build.
  • Zwiększono szybkość działania strony make-standalone-toolchain.sh przez przeniesienie, a nie przez skopiowanie, jeśli określony katalog docelowy nie istnieje.

Jest to wersja z poprawką błędów.

Ważne poprawki błędów:
  • Rozwiązaliśmy problem z architekturą ARM w GCC 4.8, w którym wskaźnik stosu przywrócono zbyt wcześnie. Ten problem uniemożliwił wskaźnikowi ramki na dostęp do zmiennej w ramce stosu. (Problem GCC 58854)
  • Naprawiono problem z GCC 4.8 libstdc++, który powodował, Reguła std::nth_element powodowała wygenerowanie kodu skutkowanego losowym segfault. (Numer 62910)
  • Poprawiono GCC 4.8 ICE w formacie cc1/cc1plus oraz -fuse-ld=mcld, dzięki czemu ten błąd już się nie pojawi:
    cc1: internal compiler error: in common_handle_option, at
    opts.c:1774
  • Naprawiono obsługę -mhard-float dla: __builtin funkcji matematycznych. Aby uzyskać bieżące informacje na temat poprawek dla -mhard-float z STL, postępuj zgodnie z problemem 61784.
Inne poprawki błędów:
  • Poprawki nagłówków:
    • Zmieniono prototyp linii poll na poll(struct pollfd *, nfds_t, int); w poll.h.
    • Dodano utimensat do listy libc.so na Androida Poziomy API 12 i 19. Te biblioteki są teraz dołączone do wszystkich interfejsów API Androida poziomy 12-19.
    • Wprowadzono wersję futimens w języku: libc.so dla interfejsu Android API poziom 19.
    • Dodano brakujące clock_settime() i Z clock_nanosleep() na time.h w przypadku interfejsu API Androida na poziomie 8 i wyższe.
    • Dodano CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, i CLOCK_BOOTTIME_ALARM w: time.h.
    • Usunięto przestarzałe CLOCK_REALTIME_HR i CLOCK_MONOTONIC_HR.
  • W przykładach „Teapot”, „MoreTeapots” i source/android/ndk_helper:
    • Zmieniliśmy je, żeby zamiast armeabi-v7a używały niezmiennie pływającego abi.
    • Zaktualizowano do korzystania z trybu pojemnego w interfejsie API Androida na poziomie 19. wyżej.
    • Naprawiono problem z „Check_ReleaseStringUTFChars” w: /system/lib/libdvm.so, który powoduje awarie na urządzeniach x86.
  • Naprawiono błąd ndk-build występujący w cyklu, gdy NDK przesyłka to przy użyciu dowiązania symbolicznego.
  • Rozwiązaliśmy problem (ndk-build.cmd) występujący w systemach Windows cmd.exe, gdy LOCAL_SRC_FILES zawiera ścieżki bezwzględne. (Numer 69992)
  • Naprawiono skrypt ndk-stack, aby kontynuować nawet wtedy, gdy nie można było przeanalizować ramki z powodu niemożności znalezienia rutyny, nazwy pliku lub numeru wiersza. W dowolnym z w takich przypadkach pojawi się wartość ??.
  • Naprawiono stos ndk-stack dla celów Windows-x64_64, przez co nie jest już błędnie dopasowywana do linii klatki z linią w Sekcja stack:, która nie zawiera pc, eip, czy ip. Na przykład:
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • Poprawiono gabi++, dzięki czemu:
    • Nie używa Malloc() do przydzielenia wątku C++ w języku C++ obiektów.
    • Unikamy blokad wzajemnych w gabi++ w przypadkach, gdy libc.debug.malloc jest wartości różne od zera w kompilacjach platformy Androida.
Inne zmiany:
  • Dodano LOCAL_EXPORT_LDFLAGS.
  • Wprowadziliśmy ustawienie NDK_PROJECT_PATH=null do wykorzystania w zintegrowany system kompilacji, w którym opcje są bezpośrednio przekazywane do ndk-build Przy tym ustawieniu ndk-build nie zmienia próba wyszukania hasła NDK_PROJECT_PATH.. To ustawienie także uniemożliwia zmiennych uzyskanych na podstawie ustawień domyślnych z NDK_PROJECT_PATH. W rezultacie następujące zmienne muszą być teraz jawnie określone (przy wartościach domyślnych wartości, jeśli takie istnieją): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (opcjonalnie, domyślnie 0) i innego parametru APP_* zawarte w tekście Application.mk.
  • APP_ABI można teraz wyliczać w postaci listy rozdzielanej przecinkami. Dla: przykład:
    APP_ABI := "armeabi,armeabi-v7a"
  • Umożliwia ponowne utworzenie całej ścieżki STL z danymi debugowania w pliku opcjonalny, osobny pakiet o nazwie android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, przy użyciu funkcji -g. Ta opcja pomaga skryptowi ndk-stack uzyskać lepszy zrzut stosu w języku STL. Ta zmiana nie powinna mieć wpływu na kod ani rozmiar ostatecznego, usuniętego pliku.
  • Ulepszono próbki hello-jni, aby uzyskać raport APP_ABI na kompilację danych.
  • Użyto narzędzia ar w trybie deterministycznym (opcja) -D), aby tworzyć biblioteki statyczne. (Numer 60705)
Ważne zmiany:
  • Zaktualizowano include/android/*h i math.h dla wszystkich poziomów interfejsu API Androida do 18, w tym dodania poziomów 13, 15, 16 i 17. Informacje o dodanych interfejsach API znajdziesz w artykule o komunikatach dotyczących zatwierdzenia zmian 68012 i 68014. (Numery 47150, 58528 oraz 38423).
  • Dodano obsługę interfejsu API Androida na poziomie 19, w tym wiązanie Renderscript.
  • Dodano obsługę interfejsu -mhard-float w istniejącym interfejsie ABI Armeabi-v7a. Więcej oraz aktualne ograniczenia dotyczące języka Clang można znaleźć na stronie tests/device/hard-float/jni/Android.mk
  • Przeniesione z GNU Compiler Collection (GCC) 4.8 do 4.8.2 z dodanym kolorem diagnostycznym . Aby włączyć kolory diagnostyczne, ustaw -fdiagnostics-color=auto, -fdiagnostics-color=always, lub wyeksportuj GCC_COLORS w następujący sposób:
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    Więcej informacji: GCC Opcje niezależne od języka.
  • 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ępnym roku wersji.
Ważne poprawki błędów:
  • Rozwiązano problem z generowaniem 16-bitowego skoku względnego w thumb2 z architekturą ARM GCC 4.6. tabeli. (Problem z GCC)
  • Usunięto błąd wewnętrznego kompilatora GCC 4.8 (ICE) g++.dg/cpp0x/lambda/lambda-defarg3.C (Zmień numer 62770, Problem z GCC)
  • Rozwiązaliśmy problem z nieuruchamianiem się 32-bitowych plików wykonywalnych *-gdb.exe systemu Windows. (Numer 58975)
  • Naprawiono GCC 4.8 ICE podczas tworzenia biblioteki punktorów. Komunikat o błędzie wygląda tak:
    internal compiler error: verify_flow_info failed
    (Numer 58916, Problem z GCC)
  • Zmodyfikowana kompilacja GDB/ARM w celu pominięcia danych ARM.exidx na potrzeby odprężenia w kodzie prologowym i dodano polecenie (set arm exidx-unwinding) umożliwiające kontrolowanie zwijania stosu opartego na eksidx. (Problem 55826)
  • Usunięto problem z kompilatorem MIPS w Clang 3.3, który powodował nieprawidłowe rejestry HI i LO. ponownie użyte.
  • Usunięto problem z MIPS 4.7 ICE w systemie dbx_reg_number. Komunikat o błędzie: następujące:
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (Poprawka do GCC)
Inne poprawki błędów:
  • Poprawki nagłówków
    • Naprawiliśmy brak podpisu w architekturze ARM WCHAR_MIN i WCHAR_MAX zgodnie z specyfikacja (wersje X86/MIPS są podpisane). Podaj definicję słowa _WCHAR_IS_ALWAYS_SIGNED na aby przywrócić poprzedni sposób działania. (Numer 57749)
    • Naprawiono include/netinet/tcp.h, aby uwzględnić wyliczenie stanów TCP_INFO. (Numer 38881)
    • Poprawiono makro cdefs_elh.h _C_LABEL_STRING, aby przestało generować w łańcuchu narzędzi GCC 4.8 w przypadku korzystania z trybu c++11. (Numer 58135, Problem 58652)
    • Z nagłówka usunięto nieistniejące funkcje imaxabs i imaxdiv inttypes.h
    • Rozwiązaliśmy problem z zwracanymi wartościami pthread_exit() i pthread_self(). (Problem 60686)
    • Dodano brakującą funkcję mkdtemp(), która już istnieje w bionic nagłówek stdlib.h.
  • Rozwiązano problem z tworzeniem pliku samples/gles3jni za pomocą Clang w interfejsie API Androida na poziomie 11.
  • Naprawiono MCLinker, aby umożliwić wielokrotne wystąpienia tych opcji: -gc-sections i --eh-frame-hdr.
  • Naprawiono MCLinker, aby akceptował opcję --no-warn-mismatch.
  • Zmodyfikowano opcję cpu-features, aby nie zakładała, że wszystkie urządzenia VFPv4 obsługują identyfikator IDIV. Teraz ta opcja dodaje identyfikator IDIV tylko do urządzeń na białej liście, w tym do Nexusów 4. (numer 57637)
  • Rozwiązaliśmy problem z błędnym rejestrowaniem błędów zdarzenia (android_native_app_glue.c) i predyspozycji.
  • Naprawiono wszystkie operacje na zakończeniu gabi++ i nieoczekiwany_handler i nie tylko w wątkach.
  • Naprawiono kilka problemów z opcją Clang -integrated-as, dzięki czemu może ona przejść testów w zakresie ssax-instructions i fenv.
  • Poprawiliśmy kompilator GCC 4.6/4.7/4.8, aby przekazywać opcję tagu łączącego --eh-frame-hdr nawet w przypadku statycznych plików wykonywalnych. Więcej informacji: Poprawka do GCC.
  • Poprawiono dodatkowy apostrof w tekście CPU-ARCH-ABIS.html. Więcej informacji: NDK-DEPENDS.html (Problem 60142)
  • Poprawiliśmy dodatkowe cudzysłowy w danych wyjściowych ndk-build w systemie Windows. (numer 60649)
  • Poprawiono Clang 3.3, aby kompilować wbudowane, niepodzielne operacje ARM, takie jak __atomic_fetch_add, __atomic_fetch_sub i __atomic_fetch_or.
  • Poprawiono Clang 3.3 ICE ze dostosowanym vfprintf. (Problem z klastrem)
Inne zmiany:
  • Włączono OpenMP we wszystkich kompilacji GCC. Aby korzystać z tej funkcji, dodaj następujące flagi do swojego ustawienia kompilacji:
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    Przykładowe fragmenty kodu znajdziesz tutaj: tests/device/test-openmp
  • Rozmiar pliku ld.mcld został znacznie zmniejszony (1,5 MB w porównaniu z ld.bfd 3,5 MB ld.gold 7,5 MB), co przyniosło wzrost szybkości o około 20%.
  • Dodano LOCAL_CONLYFLAGS i APP_CONLYFLAGS, aby określić opcje dotyczące tylko języka C, ale nie C++. Istniejący LOCAL_CFLAGS i APP_CFLAGS są również używane do kompilacji w języku C++ (aby zaoszczędzić kłopoty większość opcji można określić dwukrotnie), więc opcje takie jak -std=gnu99 mogą zakończyć się niepowodzeniem kompilacje g++ z ostrzeżeniem i kompilacje clang++ z błędem.
  • Dodano funkcje pomocnicze tablicy gabi++.
  • Zmodyfikowane kompilacje GCC, dzięki czemu wszystkie pliki libgcc.a są tworzone za pomocą -funwind-tables, aby umożliwić rozwinięcie stosu po wcześniejszym zablokowaniu stosu punktów, takich jak __aeabi_idiv0.
  • Dodano obsługę Ingenic MXU w MIPS GCC4.6/4.7/4.8 z nowym interfejsem -mmxu .
  • Rozszerzono MIPS GCC4.6/4.7/4.8 -mldc1-sdc1 do sterowania także ldxc1/sdxc1
  • Dodano zwariowany tag łączący. Więcej informacji: sources/android/crazy_linker/README.TXT
  • Poprawiliśmy bitmap-plasma, aby rysować na pełnym ekranie zamiast na 200 x 200 pikseli. w pobliżu.
  • Zmniejszenie rozmiaru łańcucha narzędzi w systemach Linux i Darwin o 25% dzięki utworzeniu dowiązania symbolicznego do identycznych plików.
Ważne zmiany:
  • Dodano obsługę Androida 4.3 (poziom interfejsu API 18). Więcej informacji: STABLE-APIS.html i przykłady nowego kodu w języku: samples/gles3jni/README.
  • Dodano nagłówki i biblioteki dla OpenGL ES 3.0, obsługiwanego przez Androida 4.3 (poziom interfejsu API 18) i wyższy.
  • Do pakietu NDK dodano kompilator GNU Compiler Collection (GCC) 4.8. Od GCC 4.6 wciąż jest domyślnie, musisz wyraźnie włączyć tę opcję:
    • W przypadku ndk-build kompilacji wyeksportuj NDK_TOOLCHAIN_VERSION=4.8 lub dodaj go w: Application.mk.
    • W przypadku samodzielnych kompilacji użyj opcji --toolchain= w make-standalone-toolchain.sh, na przykład:
      --toolchain=arm-linux-androideabi-4.8

    Uwaga: Opcję -Wunused-local-typedefs włączyła -Wall. Bądź pamiętaj, aby dodać __attribute__((unused)), jeśli używasz asercji podczas kompilacji, takich jak sources/cxx-stl/stlport/stlport/stl/config/features.h, wiersz 311. Więcej Więcej informacji zawiera Zmień numer 55460

    Uwaga: W GCC 4.7 i nowszych kompilatory ARM generują niedopasowany kod dostępu przez domyślny w przypadku celów kompilacji ARM w wersji 6 i wyższych. Konieczne może być dodanie Opcja kompilacji -mno-unaligned-access podczas kompilacji na potrzeby jąder, które nie obsługują tę funkcję.

  • Dodano obsługę języka Clang 3.3. Opcja kompilacji NDK_TOOLCHAIN_VERSION=clang domyślnie wybiera Clang 3.3.

    Uwaga: Zarówno GCC 4.4.3, jak i Clang 3.1 zostały wycofane i zostaną usunięte z następnej wersji NDK wersji.

  • Zaktualizowaliśmy narzędzie GNU Project Debugger (GDB), by obsługiwało język Python 2.7.5.
  • Dodano narzędzie MCLinker do obsługi hostów z systemem Windows. Od ld.gold jest domyślną opcją dostępności, musisz dodać element -fuse-ld=mcld LOCAL_LDFLAGS lub APP_LDFLAGS, aby włączyć MCLinker.
  • Dodano narzędzie ndk-depends, które wyświetla zależności biblioteki ELF. Więcej informacji: NDK-DEPENDS.html. (Numer 53486)
Ważne poprawki błędów:
  • Usunięto potencjalny problem z obsługą zdarzeń w pliku android_native_app_glue. (Numer 41755)
  • Poprawiono kompilację ARM/GCC-4.7, aby wygenerować wystarczające dopasowanie do ładowania i przechowywania NEON instrukcje VST i VLD. (numer GCC 57271)
  • Poprawiono błąd wewnętrznego kompilatora GCC 4.4.3/4.6/4.7 (ICE) zapewniający stały indeks ujemny na literału ciągu znaków. (numer 54623)
  • Usunięto błąd segmentacji w GCC 4.7 związany ze stałym inicjowaniem za pomocą adresu obiektu. (Problem 56508)
  • Usunięto błąd segmentacji GCC 4.6 ARM w przypadku wartości -O podczas korzystania z funkcji Boost 1.52.0. (Numer 42891)
  • Rozwiązaliśmy problemy libc.so i libc.a, aby umożliwić obsługę funkcji wait4(). (Wydanie 19854)
  • Zaktualizowano pliki x86 libc.so i libc.a, tak aby zawierały clone() .
  • Naprawiliśmy błąd LOCAL_SHORT_COMMANDS polegający na tym, że plik linker.list był puste lub nieużywane.
  • Poprawiono kompilację GCC MIPS w systemie Mac OS w celu używania dyrektyw CFI, bez których ld.mcld --eh-frame-hdr często występują błędy.
  • Naprawiliśmy błąd wewnętrznego kompilatora Clang 3.2 X86/MIPS w llvm/lib/VMCore/Value.cpp. (Zmień 59021)
  • Usunięto awarię programu GCC 4.7 64-bitowego programu Windows Assember. (Błąd: out of memory allocating 4294967280 bytes).
  • Zaktualizowano skrypt ndk-gdb, dodając działania --start lub --launch Teraz poczekaj na serwer GNU Debug Server, by z większą pewnością na wcześniejszym etapie ś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.

  • Rozwiązaliśmy problem z GDB, gdy lista bibliotek była pusta.
  • Rozwiązaliśmy problem z awarią GDB, która występowała podczas korzystania z polecenia stepi poza bx pc lub blx pc Instrukcja. (numer 56962, Numer sprawy 36149)
  • Poprawiono MIPS gdbserver w celu wyszukiwania zbioru danych DT_MIPS_RLD_MAP zamiast DT_DEBUG (Problem 56586)
  • Usunięto zależność cykliczną w skrypcie ndk-build, na przykład: jeśli A->B i B->B, a następnie B został usunięty z kompilacji. (Numer 56690)
Inne poprawki błędów:
  • Naprawiono skrypt ndk-build, aby można było określić wersję języka Clang jako opcja wiersza poleceń (np. NDK_TOOLCHAIN_VERSION=clang3.2). Wcześniej tylko z określeniem wersji jako zmiennej środowiskowej.
  • Poprawiono rozmiar gabi++ _Unwind_Exception na 24 dla celów kompilacji MIPS, gdy: za pomocą kompilatora Clang. (Zmień numer 54141)
  • Naprawiliśmy skrypt ndk-build, aby mieć pewność, że utworzone biblioteki są usunięte z projektów zawierających gotowe biblioteki statyczne podczas korzystania z ndk-build clean. (Zmień numer 54461, Zmień 54480)
  • Zmieniono opcję NDK_ANALYZE=1, aby była mniej szczegółowy.
  • Naprawiono gnu-libstdc++/Android.mk, aby uwzględnić ścieżkę backward/ dla kompilacji korzystające z zgodności wstecznej. (Problem 53404)
  • Rozwiązaliśmy problem, który powodował, że funkcja stlport new czasem zwracała losowe wartości.
  • Naprawiono ndk-gdb zgodnie z kolejnością CPU_ABIS, a nie APP_ABIS. (numer 54033)
  • Rozwiązaliśmy problem, który powodował, że 64-bitowa kompilacja NDK w systemie MacOSX wybiera niewłaściwą ścieżkę dla kompilatora. (Numer 53769)
  • Naprawiono skrypty kompilacji wykrywające 64-bitowy system Windows Vista. (Numer 54485)
  • Usunięto błąd ntonl/swap32 x86: invalid 'asm': operand number out of range. (numer 54465, Zmień 57242)
  • Naprawiono scalanie literałów łańcuchowych (ld.gold).
  • Poprawiono ld.gold obsługi wyrównania dużych symboli.
  • Zaktualizowano zasadę ld.gold, aby włączyć opcję --sort-section=name.
  • Poprawiono GCC 4.4.3/4.6/4.7 w celu pomijania opcji -export-dynamic w przypadku ze statycznie połączonymi programami. GCC nie dodaje już sekcji .interp statycznie powiązanych programów.
  • Usunięto błąd kompilacji GCC 4.4.3 stlport dotyczący niespójności typedef z _Unwind_Control_Block. (numer 54426)
  • Naprawiono awk skryptu do obsługi plików AndroidManifest.xml utworzonych na Okna, które mogą zawierać na końcu \r znaki i powodować błędy kompilacji. (Numer 42548)
  • Naprawiono make-standalone-toolchain.sh, aby sondować prebuilts/. w celu określenia, czy host jest 32- czy 64-bitowy.
  • Naprawiono opcję -integrated-as w Clang 3.2.
  • Poprawiliśmy dane modułu obsługi kompaktowego modelu pr1 i pr2 ARM EHABI w Clang 3.2.
  • Dodano opcję Clang -mllvm -arm-enable-ehabi w celu naprawienia tego błędu języka:
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • Usunięto błąd kompilacji, który pojawiał się, gdy w aplikacji nie było elementu uses-sdk. pliku manifestu. (Numer 57015)
Inne zmiany:
  • Korekty nagłówków
    • Zmieniono nagłówki, aby __set_errno stała się funkcją wbudowaną, ponieważ Środowisko __set_errno w przeglądarce errno.h zostało wycofane, a usługa libc.so nie jest już używana wyeksportować dane.
    • Zmodyfikowano elf.h, aby uwzględnić: stdint.h. (numer 55443)
    • Naprawiono atrybut sys/un.h, aby był uwzględniany niezależnie od innych nagłówków. (Problem 53646)
    • Rozwiązaliśmy wszystkie problemy z rodziny interfejsów API MotionEvent_getHistorical, aby wprowadzić const AInputEvent* motion_event (Numer 55873)
    • Naprawiono malloc_usable_size, aby zająć const void*. (Numer 55725)
    • Naprawiliśmy błąd stdint.h, aby zwiększyć zgodność z koderem C99. (Zmień numer 46821)
    • Zmodyfikowano wchar.h, aby nie modyfikować ponownie atrybutów WCHAR_MAX i WCHAR_MIN
    • Poprawiono deklarację <inttypes.h> dotyczącą punktów PRI i SCN. (numer 57218)
    • Zmieniono nagłówek sys/cdefs.h, tak aby plik __WCHAR_TYPE__ był 32-bitowy dla poziomów interfejsu API mniejszych niż 9, co oznacza, że wchat_t jest 32-bitowy dla wszystkich Poziomy interfejsu API. Aby przywrócić poprzednie zachowanie, zdefiniuj _WCHAR_IS_8BIT zmiennej logicznej. (numer 57267)
  • Dodano więcej formatowania w języku NDK docs/ i różne poprawki w dokumentacji.
  • Dodano obsługę metody opartej na niewielkich fragmentach archiwum podczas tworzenia bibliotek statycznych. (Problem 40303)
  • Zaktualizowano skrypt make-standalone-toolchain.sh, aby obsługiwał stlport oprócz biblioteki gnustl, jeśli określisz opcję --stl=stlport Więcej informacji: STANDALONE-TOOLCHAIN.html.
  • Zaktualizowano skrypt make-standalone-toolchain.sh tak, że Opcja --llvm-version= tworzy $TOOLCHAIN_PREFIX-clang oraz $TOOLCHAIN_PREFIX-clang++ oprócz skryptów clang i clang++, aby uniknąć przypadkowego użycia definicji „clang” i „clang++” hosta.
  • Dodaliśmy 2 flagi, aby ponownie włączyć 2 optymalizacje w przypadku języka Clang na poziomie wyższym, ale wyłączone w NDK zwiększające zgodność z kodem skompilowanym przez GCC:
    • Dodano flagę -fcxx-missing-return-semantics, aby ponownie włączyć brakujące zwrócić semantykę w języku Clang w wersji 3.2 i nowszych. Zwykle wszystkie ścieżki powinny kończyć się zwrotem dla funkcji zwracającej wartość. Jeśli tak nie jest, clang wstawia niezdefiniowana instrukcja (lub pułapka w trybie debugowania) na ścieżce bez zwrotu . Jeśli masz pewność, że kod jest prawidłowy, użyj tej flagi, aby zezwolić na aby wykorzystać niezdefiniowane zachowanie. Jeśli nie masz pewności, nie rób użyć tej flagi. Rozmówca może nadal otrzymać losową nieprawidłową wartość, ale nie wykorzysta jej i będzie utrudniać debugowanie kodu.
    • Dodano flagę -fglobal-ctor-const-promotion do ponownego włączenia zmienne globalne za pomocą konstruktora statycznego jako stałe. Z tą flagą przejście optymalizacji zmiennych globalnych przez LLVM próbuje ocenić za pomocą konstruktorów statycznych i zmieniają je na stałe globalne. Chociaż optymalizacja jest prawidłowa, ale może powodować pewną niezgodność ze skompilowanym kodem przez GCC. Na przykład kod może wykonać polecenie const_cast, aby rzutować stałą na zmienną i go zmodyfikować. W GCC zmienna jest w trybie do odczytu i zapisu, a kod jest uruchamiany przez wypadku. W języku Clang zmienna stała jest w pamięci tylko do odczytu i może spowodować, że do awarii.
  • Dodano -mldc1-sdc1 do kompilatorów MIPS GCC i Clang. Domyślnie kompilatory odpowiednio wyrównaj 8-bajtowe obiekty i wysyłaj instrukcje ldc1 oraz sdc1 i je przesuwać. Jeśli aplikacja używa niestandardowego przydziału, który nie zawsze dopasowuje się z 8-bajtową granicą nowego obiektu (tak samo jak przy domyślnym przydzielaniu) może ulec awarii z powodu operacji ldc1 i sdc1 na niedopasowanej pamięci. W tym użyj flagi -mno-ldc1-sdc1, aby obejść problem.
  • Waga zdarzenia została zmniejszona z ostrzeżenia na informację, jeśli atrybut APP_PLATFORM_LEVEL ma wartość większy niż APP_MIN_PLATFORM_LEVEL. Wartość APP_PLATFORM_LEVEL może być niższa niż APP_PLATFORM w jni/Application.mk, ponieważ NDK nie zawiera na wszystkich poziomach. W takim przypadku rzeczywisty poziom jest przesuwany w dół. Pole APP_MIN_PLATFORM_LEVEL jest określane przez parametr android:minSdkVersion w plik manifestu aplikacji. (Numer 39752)
  • Dodano metody android_getCpuIdArm() i android_setCpuArm() do cpu-features.c To dodanie ułatwia pobieranie identyfikatora CPUID ARM i informacjami o nich. (Numer 53689)
  • Zmodyfikowano ndk-build, aby używać danych as/ld GCC 4.7 na potrzeby kompilacji w języku Clang.

    Uwaga: W GCC 4.7 nazwy monotonic_clock i is_monotonic zostały zmienione na steady_clock i is_steady.

  • Do skryptu ndk-build dodaliśmy nowe ostrzeżenia:
    • Dodano ostrzeżenia, jeśli LOCAL_LDLIBS/LDFLAGS są używane w bibliotece statycznej modułów.
    • Dodaliśmy ostrzeżenie informujące o tym, że konfiguracja nie ma modułu do skompilowania.
    • Dodaliśmy ostrzeżenie o bibliotekach niesystemowych, które są używane w LOCAL_LDLIBS/LDFLAGS biblioteki współdzielonej lub modułów wykonywalnych.
  • Zaktualizowano skrypty kompilacji, tak aby jeśli element APP_MODULES nie był zdefiniowany i tylko statyczny są wymienione w bibliotece Android.mk, skrypt wymusza ich kompilację. (Problem 53502)
  • Zaktualizowano ndk-build, by obsługiwać ścieżki bezwzględne w elemencie LOCAL_SRC_FILES.
  • Usunięto pliki wykonywalne (*-gdbtui), które są duplikatami plików *-gdb pliki wykonywalne z włączoną opcją -tui.
  • Zaktualizowaliśmy skrypty kompilacji, aby ostrzegały Cię, gdy kompilator Edison Design Group (EDG) interfejs _STLP_HAS_INCLUDE_NEXT ponownie się włącza. (Problem 53646)
  • Dodano zmienną środowiskową NDK_LIBS_OUT, aby umożliwić zastąpienie parametru ścieżkę dla elementu libraries/gdbserver z domyślnej ścieżki $PROJECT/libs. Więcej informacji: OVERVIEW.html.
  • Zmieniono domyślne ustawienia skryptu ndk-build, aby kompilować kod z ochroną ciągu znaków formatu -Wformat -Werror=format-security Możesz określić, LOCAL_DISABLE_FORMAT_STRING_CHECKS=true, aby ją wyłączyć. Więcej informacji: ANDROID-MK.html
  • Dodano obsługę druku STL w języku ndk-gdb-py. Więcej informacji: NDK-GDB.html
  • Dodano testy oparte na platformach googletest.
  • Do skryptu tworzenia łańcucha narzędzi dodaliśmy powiadomienie, które ostrzega, jeśli bieżąca powłoka nie jest bash.
Ważne zmiany:
  • Dodano zestaw 64-bitowego łańcucha narzędzi hosta (sufiks nazwy pakietu *-x86_64.*). Więcej informacje można znaleźć w sekcji CHANGES.HTML i NDK-BUILD.html.
  • Dodano kompilator Clang 3.2. Wersja domyślna to GCC 4.6. Informacje o korzystaniu z Kompilator Clang: patrz CHANGES.HTML.
  • Dodano statyczny analizator kodu dla hostów z systemami Linux/macOSX. Informacje o korzystaniu z analizatora, patrz CHANGES.HTML.
  • Dodaliśmy MCLinker dla hostów Linux/macOSX jako funkcję eksperymentalną. ld.gold tagu łączącego, który jest domyślnie dostępny, musisz go jawnie włączyć. Więcej Więcej informacji: CHANGES.HTML.
  • Zaktualizowaliśmy ndk-build, aby używać sortowania topologicznego dla zależności modułów, co oznacza, że kompilacja automatycznie sortuje kolejność bibliotek określonych w LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES i LOCAL_SHARED_LIBRARIES Więcej informacji: CHANGES.HTML. (Numer 39378)
Ważne poprawki błędów:
  • Naprawiliśmy skrypt kompilacji, aby utworzyć wszystkie łańcuchy narzędzi w usłudze -O2. Łańcuchy narzędzi w poprzedniej części wersje zostały nieprawidłowo utworzone bez optymalizacji.
  • Poprawiono skrypt kompilacji, który bezwarunkowo kompiluje kod Clang/llvm w systemie 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ą, w którym GCC/ARM 4.6/4.7 nie łączy się z kodem przy użyciu 64-bitowej struktury atomowej z wbudowanymi funkcjami. (numer 41297)
  • Usunięto błędy związane z niezgodnością użycia DIV tagu łączącego GCC 4.7. (Problem z oprogramowaniem źródłowym)
  • Usunięto błąd wewnętrznego kompilatora GCC 4.7 (build_data_member_initialization, at cp/semantics.c:5790).
  • Usunięto błąd wewnętrznego kompilatora GCC 4.7 (redirect_eh_edge_1, at tree-eh.c:2214). (numer 52909)
  • Usunęliśmy błąd segfake w GCC 4.7. (Problem z GCC)
  • Naprawiono rozdzielczość zegara w <chrono> i włączono funkcję steady_clock. (Numer 39680)
  • Naprawiono łańcuch narzędzi, aby włączyć _GLIBCXX_HAS_GTHREADS w GCC 4.7 libstdc++. (Wydanie 41770, Numer 41859)
  • Rozwiązaliśmy problem z brakiem połączenia z kodem X86 MXX/SSE posix_memalign (Zmień numer 51872)
  • Usunięto błąd podziału na segmenty GCC4.7/X86 w funkcji i386.c distance_non_agu_define_in_bb() (Zmień 50383)
  • Rozwiązaliśmy problem GCC4.7/X86, aby przywrócić wcześniejsze działanie cmov. (Problem z GCC)
  • Poprawiono obsługę zwracaną wartość NULL w polu setlocale() w libstdc++/GCC4.7. (Problem 46718)
  • Naprawiono niezdefiniowane odwołanie w środowisku wykonawczym ld.gold do __exidx_start i __exidx_start_end (Zmień numer 52134)
  • Usunięto błąd wewnętrznego kompilatora Clang 3.1 podczas korzystania z biblioteki Eigen. (numer 41246)
  • Naprawiliśmy błąd wewnętrznego kompilatora Clang 3.1, w tym kod <chrono> w C++11 i trybu uzyskiwania zgody. (Numer 39600)
  • Usunięto błąd wewnętrznego kompilatora Clang 3.1 podczas generowania kodu obiektu dla metody do jednolitego zainicjowanego rvalue. (Numer 41387)
  • Naprawiono wyrównanie stosu Clang 3.1/X86. (Zmień numer 52154)
  • Usunięto problem z narzędziem GNU Debugger (GDB) SIGILL podczas debugowania w Androidzie 4.1.2. (Numer 40941)
  • Rozwiązaliśmy problem, który powodował, że GDB nie mógł ustawiać punktów przerwania source:line, gdy symbole zawierają pośrednich ścieżek do plików. (numer 42448)
  • Naprawiono GDB read_program_header w przypadku plików wykonywalnych MIPS PIE. (Zmień numer 49592)
  • Usunięto STLport błąd podziału na segmenty w uncaught_exception(). (Zmień 50236)
  • Usunięto STLport błąd magistrali przy obsłudze wyjątków spowodowany niedopasowanym dostępem DW_EH_PE_udata2, DW_EH_PE_udata4 i DW_EH_PE_udata8.
  • Rozwiązaliśmy problem z nieskończoną rekurencją w Gabi++ z operatorem nothrow new[]. (Numer 52833)
  • Naprawiono nieprawidłowe przesunięcie Gabi++ do wskaźnika obsługi wyjątku. (Zmień numer 53446)
  • Usunięto nadmiarowe zasoby Gabi++ z obiektu wyjątku (Zmień numer 53447)
Inne poprawki błędów:
  • Poprawiono nagłówki NDK:
    • Usunięto zbędne definicje size_t, ssize_t i ptrdiff_t
    • Poprawiono nagłówek MIPS i ARM fenv.h.
    • Naprawiono atrybut stddef.h, przez co nie można było ponownie zdefiniować elementu offsetof, ponieważ już istnieje w łańcuchu narzędzi.
    • Naprawiono elf.h, aby uwzględnić Elf32_auxv_t i Elf64_auxv_t. (Numer 38441)
    • Naprawiono definicje #ifdef C++ w OpenSLES_AndroidConfiguration.h. (Numer 53163)
  • Naprawiono STLport, aby przerywać działanie w przypadku błędu braku pamięci zamiast dyskretnego zamykania.
  • Naprawiliśmy nagłówki systemowe i nagłówki Gabi++, aby umożliwić kompilację z interfejsem API na poziomie 8 lub niższym.
  • Naprawiono cpufeatures, aby uniemożliwić analizowanie /proc/self/auxv. (Numer 43055)
  • Naprawiono ld.gold, aby nie było zależne od hosta libstdc++ i na platformach Windows. aby nie korzystać z biblioteki libgcc_sjlj_1.dll.
  • Poprawiono błąd Clang 3.1, który w .vsave generuje niespójną listę rejestrów i kończy się niepowodzeniem (Zmień 49930)
  • Poprawiliśmy język Clang 3.1, aby kompilować libgabi++ i przekazywać w interfejsie test-stlport oraz testuje cele kompilacji MIPS. (Zmień 51961)
  • Poprawiliśmy język Clang 3.1, aby domyślnie włączał wyjątek tylko dla języka C++, a nie C.
  • Naprawiono kilka błędów w Clang 3.1, aby przejść większość testów wyjątków GNU.
  • Naprawiono skrypty clang i clang++ w samodzielnym kompilatorze NDK w celu wykrycia -cc1 i nie określać -target w przypadku znalezienia wartości.
  • Naprawiono ndk-build, aby obserwować ustawienie NDK_APP_OUT w Application.mk.
  • Naprawiono X86 libc.so i lib.a, w których brakowało sigsetjmp i funkcji siglongjmp są już zadeklarowane w setjmp.h. (Wydanie 19851)
  • Poprawka GCC 4.4.3/4.6/4.7 libstdc++ do pracy z Clang w C++ 11. (Problem z blokadą)
  • Poprawiono ścieżkę cykliczną w argumencie przekazywanym do HOST_AWK.
  • Naprawiliśmy ostrzeżenie o skrypcie ndk-build w oknie, gdy był uruchamiany z JNI projektu katalogu. (Problem 40192)
  • Rozwiązaliśmy problem z brakiem kompilacji skryptu ndk-build, jeśli plik Makefile na końcu ciągu znaków w definicji LOCAL_PATH. (Numer 42841)
Inne zmiany:
  • Włączono obsługę wątków w łańcuchu narzędzi GCC/MIPS.
  • Zaktualizowano pomocniki obsługi wyjątków w GCC __cxa_begin_cleanup i __cxa_type_match, aby mieć domyślną widoczność ukryty w bibliotece GNU libstdc++. Więcej informacji: CHANGES.HTML.
  • Zaktualizowaliśmy skrypty kompilacji, tak aby biblioteki statyczne Gabi++ i STLport były teraz tworzone ukrytej widoczności z wyjątkiem pomocniczych funkcji obsługi wyjątków.
  • Kompilacja została zaktualizowana, dzięki czemu STLport jest przeznaczona do obsługi ARM w trybie kciuka.
  • Dodano obsługę języka std::set_new_handler w Gabi++. (Problem 52805)
  • Włączono wywołanie systemowe FUTEX w GNU libstdc++.
  • Zaktualizowano bibliotekę ndk-build, dzięki czemu nie jest już kopiowana gotowej biblioteki statycznej do katalogu obj/local/<abi>/ projektu. (Problem 40302)
  • Usunięto reakcję __ARM_ARCH_5*__ ze skryptu ARM toolchains/*/setup.mk. (Numer 21132)
  • Wbudowaliśmy dodatkowe biblioteki GNU libstdc++ w aplikacji dla architektur ARM.
  • Włączono zmiennoprzecinkowy madd/msub/nmadd/nmsub/recip/rsqrt MIPS z 32-bitowym procesorem FPU.
  • W GCC 4.6 i 4.7 włączono optymalizator pętli grafitu, który umożliwia dalsze optymalizacje: -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 w systemie Linux i 32-bitowych hostów Max X, które analizują 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) za pomocą LLVMgold.so). Cele kompilatora MIPS nie są obsługiwane, ponieważ ld.gold nie jest dostępna.
  • Włączono --plugin i --plugin-opt na potrzeby usługi ld.gold w GCC 4.6/4.7.
  • Włączono --text-reorder dla usługi ld.gold w GCC 4.7.
  • Skonfigurowano GNU libstdc++ z parametrem _GLIBCXX_USE_C99_MATH, który nie definiuje isinf w nagłówku bionicznym. Więcej informacji: CHANGES.html
  • Dodano element APP_LDFLAGS do skryptów kompilacji. Więcej informacji: ANDROID-MK.html
  • Zaktualizowaliśmy skrypty kompilacji, aby umożliwić NDK_LOG=0 wyłączenie NDK_LOG.
  • Zaktualizowaliśmy skrypty kompilacji, aby umożliwić NDK_HOST_32BIT=0 wyłączenie programisty hosta 32-bitowego łańcucha narzędzi.
  • Domyślne flagi GCC/X86 -march= i -mtune= zostały zmienione z pentiumpro i generic do i686 i atom.
  • Ulepszone skrypty kompilacji łańcucha narzędzi:
    • Naprawiono stan wyścigu w build-gcc.sh w przypadku kompilacji mingw. co uniemożliwiało znaczną ilość równoległego przetwarzania kompilacji.
    • Zaktualizowano reguły build-gabi++.sh i build-stlport.sh, dzięki czemu mogą teraz działać z pakietu NDK. (Numer 52835)
    • Naprawiono run-tests.sh w kolekcji narzędzi MSys.
    • Ulepszona obsługa 64-bitowego łańcucha narzędzi dotyczących hosta i obsługa kompilacji kanadyjskiej.
    • Skrypt build-mingw64-toolchain.sh został zaktualizowany do najnowszej wersji.
    • Dodano opcję tworzenia libgnustl_static.a i stlport_static.a bez ukrytej widoczności.
Ważne zmiany:
  • Do pakietu NDK dodano kompilator GNU Compiler Collection (GCC) 4.7. Kompilator GCC 4.6 jest nadal wartością domyślną, więc musisz włączyć nową wersję w następujący sposób:
    • W przypadku ndk-build wyeksportuj zmienną NDK_TOOLCHAIN_VERSION=4.7 lub dodaj go do usługi Application.mk.
    • W przypadku samodzielnych kompilacji dodaj opcję --toolchain= do make-standalone-toolchain.sh, na przykład:
      --toolchain=arm-linux-androideabi-4.7

    Uwaga: ta funkcja jest eksperymentalna. Spróbuj i zgłoś ewentualne problemy.

  • Dodano obsługę wyjątków stlport przez gabi++. Pamiętaj, że nowa strona gabi++ zależy od elementu dlopen i powiązanego kodu, co oznacza, że:
    • Nie możesz już tworzyć statycznego pliku wykonywalnego za pomocą interfejsu -static lub uwzględnij libstlport_static.a przy użyciu APP_STL := stlport_static. (nadal możesz użyć opcji -static korzystając z osobnego łańcucha narzędzi). Kompilowanie dynamicznego pliku wykonywalnego za pomocą include $(BUILD_EXECUTABLE) działa, ponieważ kompilator automatycznie dodaje opcję -ldl.
    • Jeśli Twój projekt łączy się za pomocą protokołów -nostdlib i {-Wl,--no-undefined}, musi ręcznie zawierać opcję -ldl.
    . Więcej informacji: CPLUSPLUS-SUPPORT.html.

    Uwaga: ta funkcja jest eksperymentalna i działa lepiej z GCC kompilatory 4.6/4.7 niż w GCC 4.4.3 lub Clang 3.1. Spróbuj i zgłoś ewentualne problemy.

  • W przypadku procesorów x86 dodano opcję -mstack-protector-guard= umożliwiającą wybór globalna ścieżka domyślna, zgodna ze starszą biblioteką w Androidzie C (bionikową) i nowa ścieżka tls (%gs:20) dla -fstack-protector, -fstack-protector-all i -fstack-protector-strong korzystający z GCC 4.6 i wyższych kompilatorów.

    Uwaga: samo ustawienie -mstack-protector-guard nie włączyć dowolne opcje: -fstack-protector*.

  • Funkcja android_setCpu() została dodana do sources/android/cpufeatures/cpu-features.c do użytku w przypadku automatycznego wykrywania przez Usługa /proc nie jest dostępna w Androidzie 4.1 i nowszych. (problem z Chromium 164154).
Ważne poprawki błędów:
  • Rozwiązano niepotrzebne ponowne kompilowanie plików obiektów w przypadku korzystania ze skryptu ndk-build. (Numer 39810)
  • Usunięto błąd tagu łączącego w wersji NDK 8c dla systemu Mac OS X 10.6.x, w wyniku którego ten 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ą problemu było tworzenie plików binarnych w systemie Mac OS X 10.7, w którym utworzono pliki binarne jest niezgodny z systemem Mac OS 10.6.x i pakietem NDK.
  • Usunęliśmy opcje -x c++ z samodzielnego skryptu kompilacji w Clang++. (Numer 39089)
  • Rozwiązaliśmy problemy z używaniem opcji NDK_TOOLCHAIN_VERSION=clang3.1 w programie Cygwin. (Numer 39585)
  • Naprawiono skrypt make-standalone-toolchain.sh, aby umożliwić generowanie samodzielnym łańcuchu narzędzi w środowisku Cygwin lub MinGW. Powstały łańcuch narzędzi można używać w środowiskach Cygwin, MingGW lub CMD.exe. (Wydanie 39915, Numer 39585)
  • Dodano brakującą opcję SL_IID_ANDROIDBUFFERQUEUESOURCE w kompilacjach Androida 14 dla: ARM i X86. (numer 40625)
  • Naprawiono wykrywanie procesora x86 na potrzeby funkcji ANDROID_CPU_X86_FEATURE_MOVBE. (Numer 39317)
  • Rozwiązaliśmy problem, który uniemożliwiał użycie języka C++ w standardowej bibliotece szablonów (STL). źródła, które nie mają rozszerzenia pliku .cpp.
  • Usunięto błąd wewnętrznego kompilatora GCC 4.6 ARM w aktualizacji restart1.c:1061. (numer 20862)
  • Usunięto błąd wewnętrznego kompilatora ARM w GCC 4.4.3 w wydaw-rtl.c:1954. (numer 22336)
  • Usunięto błąd wewnętrznego kompilatora GCC 4.4.3 ARM w postreload.c:396. (Numer 22345)
  • Rozwiązaliśmy problem z pomijaniem funkcji lambda w GCC 4.6/4.7. (Numer 35933)
Inne poprawki błędów:
  • Poprawki pliku nagłówka NDK:
    • Poprawiono ustawienie __WINT_TYPE__ i wint_t, aby były tego samego typu.
    • Poprawiliśmy literówkę w polu android/bitmap.h. (Numer 15134)
    • Poprawiliśmy literówkę w polu errno.h.
    • Dodano sprawdzanie obecności __STDC_VERSION__ w sys/cdefs.h. (numer 14627)
    • Zmieniono uporządkowanie nagłówków w sekcjach byteswap.h i dirent.h.
    • Poprawiono limits.h, aby uwzględnić page.h, który zapewnia PAGE_SIZE ustawieniach. (Numer 39983)
    • Stały typ zwrotu: glGetAttribLocation() i glGetUniformLocation() od int do GLint.
    • Poprawiono stałą __BYTE_ORDER w przypadku kompilacji x86. (Numer 39824)
  • Naprawiono skrypt ndk-build, przez co nie zastępowano skryptu -Os kodem -O2 dla ARM do tworzenia kampanii.
  • Naprawiliśmy skrypty kompilacji, które umożliwiają zastępowanie reguł HOST_AWK, HOST_SED i Ustawienia usługi HOST_MAKE.
  • Rozwiązano problem z poleceniem ld.gold w fsck_msdos kompilacji łączącej obiekty utworzone przez kompilator Intel C/C++ (ICC).
  • Poprawiono obsługę ARM EHABI w języku Clang, aby zapewnić zgodność ze specyfikacją.
  • Naprawiono narzędzie GNU Debugger (GDB), aby skrócić czas poświęcany na poruszanie się po mapie linków celu podczas wydarzeń solib. (Problem 38402)
  • Rozwiązaliśmy problem braku pliku libgcc.a podczas łączenia bibliotek udostępnionych.
Inne zmiany:
  • Wbudowane 64-bitowe funkcje atomowe z obsługą architektur ARM do GCC 4.6.
  • Dodaliśmy dokumentację dotyczącą opóźnienia wyjścia audio wraz z inną dokumentacją naprawiania błędów.
  • Naprawiliśmy kompilacje do debugowania z wykorzystaniem języka Clang, dzięki czemu funkcje niepuste podnoszą wartość SIGILL dla ścieżek bez instrukcji zwrotnej.
  • Zaktualizowano make-standalone-toolchain.sh, by akceptował sufiks -clang3.1 co jest odpowiednikiem dodania --llvm-version=3.1 do łańcucha narzędzi GCC 4.6.
  • Zaktualizowano adres URL raportu o błędzie GCC i Clang na: https://source.android.com/source/report-bug s.html
  • Dodano obsługę ELF ARM do aplikacji llvm-objdump.
  • Wstrzymane ostrzeżenie o traktowaniu danych wejściowych C jako c++ w przypadku kompilacji Clang.
  • Zaktualizowaliśmy kompilację, aby kompilować tylko 32-bitową wersję libiberty.a. umieszczone w lib32/.
Ważne zmiany:
  • Do pakietu NDK dodano kompilator Clang 3.1. Plik GNU Compiler Collection (GCC) 4.6 to nadal jest wartością domyślną, więc musisz jawnie włączyć opcję kompilatora Clang w ten sposób:
    • W przypadku ndk-build wyeksportuj NDK_TOOLCHAIN_VERSION=clang3.1 lub dodaj to ustawienie zmiennej środowiskowej do biblioteki Application.mk.
    • W przypadku samodzielnych kompilacji dodaj --llvm-version=3.1 do make-standalone-toolchain.sh i zastąp CC oraz CXX w utwórz plik z <tool-path>/bin/clang i <tool-path>/bin/clang++. Zobacz STANDALONE-TOOLCHAIN.html: .

    Uwaga: ta funkcja jest eksperymentalna. Spróbuj i zgłoś ewentualne problemy.

  • Dodano złoty tag łączący ld.gold dla łańcucha narzędzi systemu Windows. Złoty tag łączenia jest również domyślna dla architektur ARM i X86 na wszystkich hostach. Możesz ją zastąpić, by używać ld.bfd tag łączący, dodając LOCAL_LDFLAGS += -fuse-ld=bfd do Android.mk lub za pomocą z pomyślnym wynikiem -fuse-ld=bfd do wiersza poleceń g++/clang++, który realizuje połączenie.
  • Dodano sprawdzanie spacji w ścieżce NDK do interfejsów ndk-build[.cmd] i ndk-gdb skryptów, aby zapobiegać błędom kompilacji, które są trudne do zdiagnozowania.
  • Wprowadziliśmy te zmiany w obsłudze na poziomie interfejsu API:
    • Zmodyfikowano logikę kompilacji, tak aby projekty, które określają android-10 do android-13 w: APP_PLATFORM, project.properties lub default.properties link do android-9 zamiast android-14
    • Zaktualizowana kompilacja, dzięki czemu pliki wykonywalne na Androidzie 16 (Jelly Bean) lub nowszym są skompilowana z opcją -fPIE dla plików wykonywalnych niezależnych od pozycji (PIE). Nowa opcja APP_PIE umożliwia kontrolowanie tego zachowania. Aby dowiedzieć się więcej, wejdź na APPLICATION-MK.html.

      Uwaga: wszystkie poziomy interfejsu API powyżej 14 nadal są połączone z tabelą platforms/android-14 i nie dodano żadnych nowych platforms/android-N.

    • Zmodyfikowano ndk-build, aby wyświetlać ostrzeżenia, jeśli zmieniony poziom interfejsu API jest większy niż android:minSdkVersion w AndroidManifest.xml projektu.
  • Zaktualizowaliśmy bibliotekę pomocniczą cpu-features, aby obejmowała więcej funkcji związanych z architekturą ARM. Aby dowiedzieć się więcej, wejdź na sources/android/cpufeatures/cpu-features.h.
  • Zmieniono długi duplikat na platformie X86 na 8 bajtów. Ten typ danych to obecnie: taki sam jak liczba zmiennoprzecinkowa, ale nadal jest traktowana jako osobny typ.
  • Zaktualizowana kompilacja dla wersji APP_ABI=armeabi-v7a:
    • Zmodyfikowano ten typ kompilacji, aby przekazywać parametr -march=armv7-a do tagu łączącego. Dzięki tej zmianie biblioteki i crt*.o dla wersji 7 są prawidłowo połączone.
    • Dodano -mfpu=vfpv3-d16 do listy ndk-build zamiast Opcja -mfpu=vfp używana w poprzednich wersjach.
Ważne poprawki błędów:
  • Rozwiązaliśmy problem z uruchamianiem aplikacji make-standalone-toolchain.sh z uprawnieniami użytkownika root sprawia, że samodzielny łańcuch narzędzi jest niedostępny dla niektórych użytkowników. (Numer 35279)
    • Wszystkie pliki i pliki wykonywalne w pakiecie do wydania NDK mają ustawione uprawnienia do wykonywania dla wszystkich.
    • Własność/grupa domeny libstdc++.a jest teraz zachowywana podczas kopiowania.
  • Z gotowych plików echo.exe w systemie Windows usunięto zbędne elementy typu \r. Zbędny Reguła \r spowodowała błąd gdb.setup w GNU Debugger (GDB), ponieważ nieprawidłowo stały się częścią ścieżki. (Problem 36054)
  • Naprawiono kompilacje równoległe w systemie Windows, które czasami kończyć się niepowodzeniem z powodu problemów z czasem w Implementacja host-mkdir. (Numer 25875)
  • Poprawiono błąd GCC 4.4.3 GNU libstdc++ w taki sposób, aby nie scalać nazw typeinfo przez wartość domyślną. Więcej informacji: toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo (Numer 22165)
  • Rozwiązano problem z kontekstem null w GCC 4.6 cp/mangle.c::write_unscoped_name, gdzie GCC może ulec awarii, gdy kontekst jest null i usunięty w TREE_CODE.
  • Naprawiono awarie GCC 4.4.3 w definicjach typów zmiennoprzecinkowych specyficznych dla ARM NEON. (Numer 34613)
  • Usunięto wewnętrzną implementację _IteWrapper::operator*() funkcji STLport. w którym została zwrócona nieaktualna lokalizacja stosu zawierająca wartość dereferencyjną, co spowodowało w czasie działania aplikacji. (Numer 38630)
  • Poprawki związane z architekturą ARM:
    • Poprawiono architekturę ARM GCC 4.4.3/4.6 g++, aby nie ostrzegać, że zarządzanie <va_list> została zmieniona w GCC 4.4. Aby obejść ten problem, użyj -Wno-psabi przełącznik umożliwiający uniknięcie tego ostrzeżenia nie jest już wymagany.
    • Rozwiązaliśmy problem, który powodował, że projekt z sufiksami .arm lub .neon LOCAL_SRC_FILES używał też APP_STL. Dzięki funkcji APP_STL Skrypty (ndk-build) wyszukały wcześniej pliki C++ w języku: LOCAL_SRC_FILES dodanie ścieżek STL header/lib do kompilacji. Zmodyfikowano ndk-build na odfiltruj sufiksy .arm i .neon przed wyszukiwaniem, w przeciwnym razie elementy w języku LOCAL_SRC_FILES, np. myfile.cpp.arm.neon, nie zostanie skompilowany jako C++ w kodzie.
    • Naprawiono binutils-2.21/ld.bfd, aby umożliwić łączenie obiektu ze starszego binutils bez tag_FP_arch, co powodowało niepowodzenie asercji w narzędziu GNU Binutils. (Numer 35209)
    • Usunięto ostrzeżenie Nieznany atrybut obiektu EABI 44, binutils-2.19/ld – gotowy obiekt utworzony przez nowszy model: binutils-2.21
    • Naprawiono błąd w kompilacji GNU stdc++ z wartościami -mthumb i -march=armv7-a, modyfikując make-standalone-toolchain.sh w celu zapełnienia headers/libs w podkatalogu armv7-a/thumb. (Problem 35616)
    • Usunięto błąd nierozpoznawalnego przenoszenia R_ARM_THM_CALL. (Numer 35342)
    • Usunięto wewnętrzny błąd kompilatora pod adresem reload1.c:3633 spowodowany przez architekturę ARM backend oczekuje nieprawidłowego typu operandu podczas rozszerzania znaku z char. (numer GCC 50099)
    • Naprawiliśmy błąd wewnętrzny kompilatora z wartością przesunięcia ujemnego. (Problem z GCC)
  • Poprawiono ustawienie -fstack-protector dla X86, które jest również domyślną wartością dla ndk-build Środowisko docelowe ABI x86.
  • Poprawki dotyczące MIPS:
    • Naprawiono STLport przez ustawienie wartości _STLP_LITTLE_ENDIAN na 1, gdy: kompiluję MIPS libstlport_*.
    • Rozwiązaliśmy problem z GCC __builtin_unreachable podczas kompilowania LLVM. (numer GCC 54369)
    • Poprawiona poprawka do procesu kompilacji cc1 zużywająca 100% procesora. (Problem z GCC 50380)
  • Poprawki typowe dla narzędzia GNU Debugger:
    • Wyłączona obsługa Pythona w gdb-7.x podczas kompilacji; w przeciwnym razie konfiguracja gdb-7.x funkcja może pobrać dowolną wersję Pythona dostępną na hoście gdb, które zależy od konkretnej wersji Pythona. (Numer 36120)
    • Naprawiono ndk-gdb, gdy APP_ABI zawiera all i nie pasuje do żadnej wartości znanych architektur. (Numer 35392)
    • Poprawiono obsługę nazwy ścieżki w systemie Windows przez zachowanie znaku :, jeśli wygląda może to być część ścieżki systemu Windows zaczynającej się od litery dysku. (GDB nr 12843)
    • Rozwiązaliśmy problem z obsługą punktów przerwania sprzętowego w architekturze ARM w gdbserver. (Problem z GDB)
    • Dodano poprawkę pozwalającą odczytywać bieżące pole solibs tylko wtedy, gdy tag łączący jest spójny. Ta zmiana przyspiesza obsługę zdarzeń w solib. (Numer 37677)
    • Dodano poprawkę pozwalającą na wielokrotne próby znalezienia solib punktów przerwania. GDB teraz ponawia próbę enable_break() podczas każdego połączenia z numerem svr4_current_sos() do się uda. (Zmień numer 43563)
    • Rozwiązaliśmy problem, który powodował, że usługa gdb nie zatrzymywała się na punktach przerwania znajdujących się w dlopen-ed biblioteki. (Numer 34856)
    • Usunięto SIGILL w dynamicznym tagu łączącym podczas wywoływania funkcji dlopen() w systemie gdzie /system/bin/linker bez symboli i symboli Komponent rtld_db_dlactivity() jest zaimplementowany jako Thumb ze względu na brak zachowywania danych LSB z sym_addr. (Numer 37147)
Inne poprawki błędów:
  • Poprawiono nagłówki NDK:
    • Naprawiono arch-mips/include/asm/* kod, który został nieprawidłowo usunięty z: i tworzeniu oryginalnego jądra. (Zmień 43335).
    • Zastąpiono dane elementu struct __unused elementem __linux_unused w linux/sysctl.h i linux/icmp.h, aby uniknąć konfliktu z: #define __unused w sys/cdefs.h.
    • Poprawiono fenv.h w przypadku zamkniętych funkcji C z parametrami __BEGIN_DECLS i __END_DECLS
    • Usunięto niezaimplementowane funkcje w malloc.h.
    • Poprawiono definicję klasy uint64_t w języku stdint.h w przypadku kompilatorów ANSI. (Wydanie 1952)
    • Naprawiono makra przed procesora w <arch>/include/machine/*.
    • Zastąpiliśmy link.h dla MIPS nową wersją obsługującą wszystkie platformy.
    • Usunięto: linux-unistd.h
    • Przenieś makra specyficzne dla GLibc LONG_LONG_MIN, LONG_LONG_MAX i ULONG_LONG_MAX od <pthread.h> do <limits.h>.
  • Usunięto przepełnienie bufora w ndk-stack-parser.
  • Rozwiązano problem z pominięciem wszystkich deklaracji (_STLP_USE_EXCEPTIONS) w przypadku niezdefiniowanych wartości. i zastosowania __Named_exception. Kompilowanie i używanie obiektu __Named_exception występuje tylko wtedy, gdy STLport może używać wyjątków.
  • Naprawiono tworzenie pakietów NDK przeznaczonych tylko dla systemu Linux bez konieczności tworzenia kodu dla systemu Windows. Użyj następujące ustawienia do wykonania tego typu kompilacji:
    ./build/tools/make-release.sh --force --systems=linux-x86
  • Naprawiono plik libc.so, przez co nie można eksportować danych atexit() i __do_handler. Te symbole są eksportowane w przypadku kompilacji ARM przez wersję systemową biblioteki C do obsługują starsze biblioteki natywne. Wygenerowane przez NDK nigdy nie powinny odwoływać się do nich bezpośrednio. Każda biblioteka współdzielona lub plik wykonywalny powinien mieć własną wersję tych symboli, źródło: crtbegin_*.o.

    Jeśli Twój projekt jest połączony przy użyciu opcji -nostdlib -Wl,--no-undefined, musisz podać własne __dso_handle, ponieważ crtbegin_so.o nie jest połączony w tę sprawę. Treść pliku __dso_handle nie ma znaczenia, jak widać na tym przykładzie: przykładowy kod:

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • Poprawiono dekoder symboli dla architektur ARM używany w objdump dla wpisów plt do wygenerowania bardziej czytelnego formularza function@plt.
  • Usunęliśmy te symbole wprowadzone w GCC 4.6 libgcc.a z biblioteka libc.so platformy X86: __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1 i __aeabi_unwind_cpp_pr2.
  • Usunięto nieużywane .ctors, .dtors i .eh_frame w MIPS crt*_so.S
  • Zaktualizowano ndk-gdb, tak aby zajmował tylko ostatni wiersz danych wyjściowych ndk-build: DUMP_XXXX. Ta zmiana sprawi, że jeśli Application.mk lub Android.mk drukuje coś ze składnią $(info ...) – nie otrzymuje wstrzyknięto do wyniku funkcji DUMP_XXXX. (Więcej informacji)
Inne zmiany:
  • Nagłówki arch-x86 i arch-mips zostały usunięte z platforms/android-[3,4,5,8] Nagłówki te były niekompletne, ponieważ zarówno X86, jak i Interfejsy ABI MIPS są obsługiwane tylko w interfejsie API 9 lub nowszym.
  • Uproszczone kodowanie c++ obejmuje ścieżkę w samodzielnym pakiecie, jak pokazano poniżej. (Numer 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
  • Naprawiono ndk-build, aby domyślnie rozpoznawać więcej rozszerzeń plików w języku C++: .cc .cp .cxx .cpp .CPP .c++ .C Nadal możesz używać LOCAL_CPP_EXTENSION do: nadpisać te ustawienia rozszerzeń.
  • Rozwiązaliśmy problem w usłudze samples/san-angeles, który powodował czarny ekran lub jego zablokowanie po ponownym uruchomieniu.
  • Zastąpiono wycofane interfejsy API w przykładach NDK. (Wydanie 20017)
    • hello-gl2 z Androida 5 na Androida 7
    • native-activity z Androida 9 na Androida 10
    • native-audio z Androida 9 na Androida 10
    • native-plasma z Androida 9 na Androida 10
  • Dodaliśmy nowe oznaczenia marki dla plików wykonywalnych na Androida w prostszym schemacie w sekcji .note.android.ident (zdefiniowany w crtbegin_static/dynamic.o), tak aby mogą odpowiednio działać narzędzia do debugowania. Element struktury i wartości są zdefiniowane jako następujące:
    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łuje metodę run-tests.sh i standalone/run.sh z różnymi warunkami. Uruchomiono skrypt run-tests.sh bez opcji --abi, a następnie został ulepszony tak, aby kompilować większość testów dla wszystkich obsługiwane interfejsy ABI i działają na wszystkich podłączonych urządzeniach

Najważniejsze funkcje w tej wersji to nowy łańcuch narzędzi GNU Compiler Collection (GCC) 4.6 oraz GNU Debugger (GDB) 7.3.x z obsługą debugowania w systemie Android 4.1 (API Level 16). .

Ważne poprawki błędów:
  • Rozwiązano LOCAL_SHORT_COMMANDS problemy w środowiskach Mac OS i Windows Cygwin w bibliotek statycznych. Generowanie plików listy trwa krócej i nie jest ponownie generowane, aby uniknąć powtarzających się od nowa.
  • Usunięto kilka problemów w aplikacji ndk-gdb:
    • Zaktualizowany narzędzie do przekazywania flag -e, -d i -s do innych komponentów adb konsekwentnie.
    • Zaktualizowano narzędzie, aby akceptować nazwy seryjne urządzeń zawierające spacje.
    • Zaktualizowano narzędzie do pobierania informacji z kategorii /system/bin/link, więc gdb jest włączony host może ustawić punkt przerwania w __dl_rtld_db_dlactivity i brać pod uwagę aktywność tagu łączącego (np. ponownie przeskanuj symbole solib po wywołaniu funkcji dlopen()).
  • Rozwiązaliśmy problem ndk-build clean w systemie Windows, którego nie można było usunąć. ./libs/*/lib*.so
  • Naprawiono ndk-build.cmd, aby zwracał wartość ERRORLEVEL inną niż 0, gdy make niepowodzenie.
  • Naprawiono błąd libc.so, aby zapobiec nieprawidłowemu eksportowi __exidx_start i Symbole: __exidx_end.
  • Naprawiono SEGV podczas rozwijania stosu poza __libc_init dla architektur ARM i MIPS.
Ważne zmiany:
  • Dodano łańcuch narzędzi GCC 4.6 (binutils 2.21 z gold i GDB 7.3.x) do współistnieć z pierwotnym łańcuchem narzędzi GCC 4.4.3 (binutils 2.19 i GDB 6.6).
    • GCC 4.6 to teraz domyślny łańcuch narzędzi. Możesz ustawić NDK_TOOLCHAIN_VERSION=4.4.3 w Application.mk, aby wybrać oryginał.
    • Obsługa tagu łączącego gold jest dostępna tylko w przypadku procesorów ARM i x86 na hostach Linux i macOS. Ta funkcja jest domyślnie wyłączona. Dodaj LOCAL_LDLIBS += -fuse-ld=gold w aplikacji Android.mk, aby ją włączyć.
    • Programy skompilowane z użyciem -fPIE wymagają do debugowania nowego interfejsu GDB. plików binarnych w obrazach systemowych Androida 4.1 (poziom interfejsu API 16).
    • Narzędzie binutils 2.21 ld zawiera przeniesione poprawki wersji 2.22.
      • Naprawiono ld --gc-sections, który nieprawidłowo zachowuje odniesienia do zombie do z bibliotek zewnętrznych. (więcej ).
      • Naprawiono polecenie ARM strip, aby zachować oryginalne polecenia p_align i p_flags w sekcji GNU_RELRO, jeśli są prawidłowe. Bez tej poprawki Nie udało się debugować kompilacji za pomocą -fPIE. (mor e info)
    • Wyłączono optymalizację sincos() w celu zapewnienia zgodności ze starszymi platform.
  • Zaktualizowaliśmy opcje kompilacji, aby domyślnie włączyć zabezpieczenia typu Never eXecute (NX) i relro/bind_now:
    • Dodano pakiet --noexecstack do narzędzia Assemer i -z noexecstack do tagu łączącego który zapewnia ochronę NX przed atakami typu przepełnienia bufora przez włączenie bitu NX w stosie sterta.
    • Dodano -z relro i -z now do tagu łączącego wzmacnianie zabezpieczeń wewnętrznych sekcji danych po połączeniu w celu zabezpieczenia przed lukami w zabezpieczeniach spowodowanymi uszkodzeniem pamięci. (więcej informacji: 1, 2)
    • Te funkcje można wyłączyć za pomocą tych opcji:
      1. Wyłącz ochronę NX, ustawiając opcję --execstack dla a tagi -z execstack dla tagu łączącego.
      2. Wyłącz wzmacnianie zabezpieczeń danych wewnętrznych za pomocą ustawień -z norelro i Opcje (-z lazy) tagu łączącego.
      3. Wyłącz te zabezpieczenia w NDK jni/Android.mk przez ustawienie następujące 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.

  • Dodano markę w przypadku plików wykonywalnych na Androida w sekcji .note.ABI-tag (w crtbegin_static/dynamic.o), aby narzędzia do debugowania mogły działać w odpowiedni sposób. Struktura element i wartości są zdefiniowane w następujący 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 */
    }
Inne poprawki błędów:
  • Naprawiono obcięcie relokacji typu mips-linux-gnu, aby pasowało do R_MIPS_TLS_LDM problemu. (więcej informacji)
  • Usunięto błędy narzędzia (ld) występujące podczas korzystania z narzędzia --gc-sections. (więcej informacji)
  • Usunięto problem z liczeniem MIPS (GOT_PAGE). (więcej informacji)
  • Poprawiono link z symbolem ostrzeżenia dla konta mips_elf_count_got_symbols.
  • Poprawiono link z symbolem ostrzeżenia dla konta mips_elf_allocate_lazy_stub.
  • Przeniesiono MIPS .dynamic do segmentu danych, aby można było go zapisywać.
  • Zastąpiono zakodowane na stałe wartości symboli z prawidłowymi rozmiarami segmentów dla MIPS.
  • Usunięto opcję -mno-shared z wartości domyślnych w łańcuchu narzędzi MIPS. Domyślna wartość w przypadku łańcucha narzędzi na Androida to -fPIC (lub -fpic, jeśli jest obsługiwana). Jeśli nie chcesz wyraźnie określ -mshared, -fpic, -fPIC, -fpie lub -fPIE, kompilator MIPS dodaje pakiet -mno-shared, który wyłącza tryb PIC. Poprawiony kompilator, którego nie można dodać -mno-shared.
  • Poprawiliśmy nieprawidłowe nazwy pakietów w przykładach hello-jni i two-libs, dzięki czemu znajdujący się pod nim projekt tests może się skompilować.
Inne zmiany:
  • Zmieniono lokalizacje plików binarnych:
    • Przeniesiono gdbserver z toolchain/<arch-os-ver>/prebuilt/gdbserver do prebuilt/android-<arch>/gdbserver/gdbserver
    • Nazwa prefiksu łańcucha narzędzi x86 została zmieniona z i686-android-linux- na i686-linux-android-
    • Przeniesiono sources/cxx-stl/gnu-libstdc++/include i lib do sources/cxx-stl/gnu-libstdc++/4.6 w przypadku skompilowania z GCC 4.6 lub sources/cxx-stl/gnu-libstdc++/4.4.3 po skompilowaniu z GCC 4.4.3.
    • Przeniesiono libbfd.a i libintl.a z: lib/ do: lib32/.
  • Dodaliśmy i ulepszyliśmy różne skrypty w łańcuchu narzędzi do odbudowy i testowania NDK:
    • Dodano narzędzie 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ększono szybkość download-toolchain-sources.sh dzięki użyciu polecenia clone i używaniu checkout tylko do katalogów, które są niezbędne do utworzenia pakietu NDK pliki binarne łańcucha narzędzi.
    • Dodano skrypty build-host-gcc.sh i build-host-gdb.sh.
    • Dodano tests/check-release.sh, aby sprawdzić zawartość danego pakietu NDK katalogu instalacyjnego lub istniejącego pakietu NDK.
    • Przeredagowano tests/standalone/run.sh samodzielne testy .
  • Usunięto nagłówek if_dl.h ze wszystkich platform i architektur. Opisane przez niego elementy AF_LINK i sockaddr_dl są charakterystyczne dla BSD (czyli nie istnieją) w systemie Linux).

Ta wersja pakietu NDK zawiera obsługę MIPS ABI i kilka dodatkowych poprawek.

Nowe funkcje:
  • Dodano obsługę interfejsu MIPS ABI, który umożliwia generowanie kodu maszynowego działającego na urządzeń z Androidem i z Androidem opartych na MIPS. Główne funkcje MIPS to specyficzne dla MIPS łańcuchy narzędzi, nagłówki systemowe, biblioteki oraz pomoc w debugowaniu. Więcej informacji na temat: Obsługa MIPS: patrz docs/CPU-MIPS.html w pakiecie NDK.

    Domyślnie kod jest generowany na urządzeniach z procesorami ARM. Możesz dodać mips do definicję pola APP_ABI w pliku Application.mk, aby utworzyć dla platform MIPS. Na przykład ten wiersz zawiera instrukcje ndk-build aby skompilować kod dla 3 różnych interfejsów ABI:

    APP_ABI := armeabi armeabi-v7a mips

    Chyba że korzystasz ze źródeł montażu specyficznych dla architektury, takich jak montaż ARM kodu, nie musisz dotykać plików Android.mk, aby utworzyć MIPS kodu maszynowego.

  • Możesz utworzyć samodzielny łańcuch narzędzi MIPS za pomocą interfejsu --arch=mips przy wywołaniu numeru make-standalone-toolchain.sh. Zobacz docs/STANDALONE-TOOLCHAIN.html, aby uzyskać więcej informacji.

Uwaga: aby mieć pewność, że Twoje aplikacje będą dostępne tylko pod warunkiem, że urządzenia nadają się do ich uruchomienia. Google Play filtruje aplikacje na podstawie w informacjach o zestawie instrukcji zawartych w zgłoszeniu? nie musisz nic robić aby włączyć filtrowanie. Dodatkowo system Android sprawdza również Twoją aplikację pod adresem czasu instalacji i umożliwia kontynuację instalacji tylko wtedy, gdy aplikacja udostępnia bibliotekę, jest kompilowany pod kątem architektury procesora urządzenia.

Ważne poprawki błędów:
  • Poprawiliśmy literówkę w implementacji GAbi++, w wyniku której wynikiem dynamic_cast<D>(b) obiektu klasy podstawowej b do klasy derywowanej D jest nieprawidłowo skorygowane w kierunku przeciwnym do klasy bazowej. (Numer 28721)
  • Rozwiązaliśmy problem, który powodował, że plik make-standalone-toolchain.sh nie był kopiowany libsupc++.*
Inne poprawki błędów:
  • Naprawiono ndk-build.cmd, aby umożliwić prawidłowe działanie ndk-build.cmd, nawet jeśli jeśli użytkownik ponownie zdefiniował zmienną środowiskową SHELL, którą można zmienić podczas instalowania różnych narzędzi dla programistów w środowiskach Windows.

Ta wersja pakietu NDK zawiera ważną poprawkę dla urządzeń opartych na Tegra2 oraz Dodatkowe poprawki i ulepszenia:

Ważne poprawki błędów:
  • Poprawiliśmy awarię plików binarnych GNU STL armeabi-v7a w taki sposób, aby nie ulegały awarii na urządzeniach innych niż NEON urządzenia. Pliki dostarczone w pakiecie NDK r7b nie zostały poprawnie skonfigurowane, co prowadzi do awarii na urządzeniach z procesorami Tegra2 oraz innych podczas próby użycia określonych funkcji zmiennoprzecinkowych (np. cosf, sinf i expf).
Ważne zmiany:
  • Dodano obsługę niestandardowych katalogów wyjściowych w NDK_OUT zmiennej środowiskowej. Zdefiniowana zmienna służy do przechowywania wszystkich generowanych plików pośrednich zamiast $PROJECT_PATH/obj. Zmienna to rozpoznane także przez firmę ndk-gdb.
  • Dodano obsługę tworzenia modułów z setkami, a nawet tysiącami źródeł. , definiując LOCAL_SHORT_COMMANDS na true w Android.mk.

    Ta zmiana wymusza w systemie kompilacji NDK umieszczanie większości opcji tagu łączącego lub archiwizatora do plików list, co pozwala obejść ograniczenia długości wiersza poleceń. Aby dowiedzieć się więcej, wejdź na docs/ANDROID-MK.html.

Inne poprawki błędów:
  • Naprawiono implementację android_getCpuCount() w: cpufeatures z biblioteki pomocniczej. Na niektórych urządzeniach, w których rdzenie są dynamicznie włączane przez system, poprzednia wartość implementacja zwróci łączną liczbę aktywnych rdzeni przy pierwszym użyciu funkcji a nie łączną liczbę fizycznie dostępnych rdzeni.

Ta wersja pakietu NDK zawiera poprawki dla natywnych kompilacji dla systemu Windows, Cygwin i wielu innych ulepszenia:

Ważne poprawki błędów:
  • Zaktualizowano: sys/atomics.h, aby uniknąć problemów z poprawność na niektórych wielordzeniowych urządzeniach z procesorami ARM. Odbuduj niezmodyfikowane źródła za pomocą tego wersji NDK i ten problem powinien zostać całkowicie wyeliminowany. Więcej informacji: docs/ANDROID-ATOMICS.html.
  • Przywrócono binutils 2.19, aby rozwiązać problemy z debugowaniem, które pojawiło się w wersji NDK r7 (tj. wersji binutils 2.20.1).
  • Naprawiono ndk-build w 32-bitowym systemie Linux. Błąd pakietu powoduje umieszczenie na stronie wersji 64-bitowej. z pliku wykonywalnego awk w pakiecie prebuilt/linux-x86/bin w NDK r7.
  • Poprawiona kompilacja natywnego systemu Windows (ndk-build.cmd). Inne tryby kompilacji nie były dotkniętych problemem. Poprawki obejmują:
    • Usunięto błąd nieskończonej pętli / przepełnienia stosu, który występował podczas próby aby zadzwonić pod numer ndk-build.cmd z katalogu, który nie znajdował się na samej górze ścieżki projektu (np. w dowolnym jego podkatalogu).
    • Rozwiązaliśmy problem, który powodował, że automatycznie generowane pliki zależności były ignorowane. Ten oznaczało, że zaktualizowanie nagłówka nie spowodowało ponownej kompilacji źródeł zawierających .
    • Rozwiązaliśmy problem, który powodował, że w plikach lub ścieżkach inne niż spacje i znaki specjalne cudzysłowy nie zostały poprawnie obsłużone.
  • Naprawiono samodzielny łańcuch narzędzi, aby generował prawidłowe pliki binarne przy użyciu -lstdc++ (tzn. połączenie w środowisku wykonawczym GNU libstdc++ w C++). Ty użyj -lgnustl_shared, jeśli chcesz połączyć z zasobami wspólnych lub -lstdc++ w przypadku wersji statycznej.

    Więcej informacji o tej poprawce znajdziesz na docs/STANDALONE-TOOLCHAIN.html.

  • Naprawiono gnustl_shared w systemie Cygwin. Łączący powiedział, że nie może znaleźć libsupc++.a, mimo że plik znajdował się we właściwej lokalizacji.
  • Naprawiono link Cygwin C++, gdy nie używasz żadnego konkretnego środowiska C++ przez APP_STL
Inne zmiany:
  • Jeśli 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, musisz wykonać jedną z tych czynności:

    • bezpośrednio w modułach włącz wyjątki lub RTTI, albo Application.mk (zalecane)
    • Zdefiniuj pojęcie APP_GNUSTL_FORCE_CPP_FEATURES'exceptions', 'rtti' albo obie w Application.mk. Zobacz docs/APPLICATION-MK.html, aby uzyskać więcej informacji.
  • ndk-gdb działa teraz prawidłowo, gdy aplikacja ma usługi prywatne działające w niezależnych procesach. Debuguje główny proces aplikacji zamiast pierwszy proces wymieniony przez ps, co zwykle jest procesem usługi.
  • Naprawiliśmy rzadki błąd polegający na tym, że pakiet NDK r7 nie respektował wartości LOCAL_ARM_MODE. i zawsze kompilować niektóre pliki źródłowe (ale nie wszystkie) do instrukcji 32-bitowych.
  • STLport: odświeża źródła, aby pasowały do wersji platformy Androida. Ten aktualizacja zawiera kilka drobnych błędów:
    • Naprawiono instancję niepełnego typu
    • Poprawiono drobne „==” a „=” literówka
    • W aplikacji string::assign użyto memmove zamiast memcpy
    • Dodano lepszą obsługę kart IsNANorINF, IsINF, IsNegNAN, ip.

    Szczegółowe informacje znajdziesz w logu zatwierdzenia.

  • STLport: usunięto z biblioteki 5 zbędnych inicjatorów statycznych.
  • 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 właściwego Interfejs ABI powinien zapewnić nieco większą wydajność.
  • Biblioteka pomocnicza cpu-features została zaktualizowana i w raportach pojawiają się 3 opcjonalne Procesor x86 (SSSE3, MOVBE i POPCNT). Zobacz docs/CPU-FEATURES.html, aby uzyskać więcej informacji.
  • Plik docs/NDK-BUILD.html został zaktualizowany, aby dodać wzmiankę o: NDK_APPLICATION_MK z NDK_APP_APPLICATION_MK, aby wybrać niestandardowy plik Application.mk.
  • Cygwin: ndk-build nie tworzy już pustej wartości „NUL” w bieżącym pliku katalogu po wywołaniu.
  • Cygwin: dodaliśmy lepsze wykrywanie zależności automatycznych. W poprzedniej wersji nie działało prawidłowo w tych przypadkach:
    • Gdy prefiks dysku Cygwin nie miał nazwy /cygdrive.
    • Korzysta się z niego na przykład w sytuacji, gdy Cygwin tłumaczy /home do: \\server\subdir zamiast C:\Some\Dir.
  • Cygwin: ndk-build nie próbuje używać natywnych narzędzi systemu Windows $NDK/prebuilt/windows/bin z określonymi wersjami programu Cygwin lub GNU Make.

Ta wersja pakietu NDK zawiera nowe funkcje na platformę Android 4.0 o wiele innych dodatków i ulepszeń:

Nowe funkcje
  • Dodaliśmy oficjalne interfejsy API NDK na Androida 4.0 (poziom API 14), co dodaje: natywne funkcje platformy:
    • Dodano natywny interfejs API multimedialny oparty na technologii OpenMAX AL 1.0.1 Khronos Group. standardowy. Nowe <OMXAL/OpenMAXAL.h> oraz Nagłówki <OMXAL/OpenMAXAL_Android.h> umożliwiają kierowanie na aplikacje API poziomu 14 do wykonywania multimedialnych danych wyjściowych bezpośrednio z kodu natywnego przy użyciu nowego Interfejs kolejki bufora specyficzny dla Androida. Więcej informacji: docs/openmaxal/index.html i http://www.khronos.org/openmax/.
    • Zaktualizowano natywny interfejs API audio na podstawie OpenSL ES 1.0.1 grupy Khronos Group. standardowy. Interfejs API poziomu 14 umożliwia teraz dekodowanie skompresowanego dźwięku (np. MP3, AAC Vorbisa) do PCM. Więcej informacji: docs/opensles/index.html i http://www.khronos.org/opensles/
  • Dodano obsługę CCache. Aby przyśpieszyć przebudowę dużych, zdefiniuj zmienną środowiskową NDK_CCACHE do funkcji ccache (lub ścieżka do (plik binarny ccache). Po zadeklarowaniu system kompilacji NDK automatycznie używa CCache do kompilowania dowolnego pliku źródłowego. Na przykład:
    export NDK_CCACHE=ccache
    

    Uwaga: wersja NDK nie zawiera pamięci podręcznej CCache dlatego należy zainstalować ten program przed jego użyciem. Więcej informacji o CCache znajdziesz tutaj: http://ccache.samba.org

  • Dodano obsługę ustawienia APP_ABI na all, aby wskazać, że chcesz utworzyć moduły NDK dla wszystkich interfejsów ABI obsługiwanych przez dany pakiet NDK wersji. Oznacza to, że jeden z dwóch poniższych wierszy w pliku Wersja Application.mk jest odpowiednikiem tej wersji:
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    

    Działa to też, jeśli podczas połączenia zdefiniujesz parametr APP_ABI ndk-build z wiersza poleceń, aby szybko sprawdzić, czy dla wszystkich obsługiwanych interfejsów ABI bez zmiany Application.mk file Na przykład:

    ndk-build APP_ABI=all
    
  • Dodano zmienną LOCAL_CPP_FEATURES w obiekcie Android.mk, która pozwala zadeklarować funkcje C++ (RTTI lub Wyjątki), których używa moduł. Ten gwarantuje, że ostateczne połączenie będzie działać prawidłowo, jeśli masz gotowe moduły, które zależą dotyczące tych funkcji. Zobacz docs/ANDROID-MK.html i docs/CPLUSPLUS-SUPPORT.html, aby uzyskać więcej informacji.
  • Skrócone ścieżki do plików źródłowych i obiektów używanych w poleceniach kompilacji. Kiedy przez wywołanie $NDK/ndk-build ze ścieżki projektu, ścieżki do źródła obiektów, a pliki binarne przekazywane do poleceń kompilacji krótszą, ponieważ są one przekazywane względem bieżącego katalogu. To jest przydatne przy tworzeniu projektów z wieloma plikami źródłowymi, by uniknąć ograniczeń długości wiersza poleceń obsługiwanej przez system operacyjny hosta. Działanie nie zmienia się jeśli wywołujesz funkcję ndk-build z podkatalogu drzewa projektu lub wskazujemy, że NDK_PROJECT_PATH wskazuje konkretny katalog.
Funkcje eksperymentalne
Możesz teraz kompilować pliki źródłowe NDK w systemie Windows bez narzędzia Cygwin, wywołując metodę ndk-build.cmd skrypt z wiersza poleceń ze ścieżki projektu. skrypt przyjmuje dokładnie te same argumenty co oryginalny skrypt ndk-build. Pakiet Windows NDK zawiera własne gotowe pliki binarne GNU Make, Awk i innych i narzędzia wymagane przez kompilację. Nie musisz niczego instalować, aby otrzymać działającego systemu kompilacji.

Ważne: ndk-gdb nie działa na Windows, więc nadal musisz mieć program Cygwin do debugowania.

Ta funkcja jest nadal w fazie eksperymentalnej, więc możesz ją wypróbować i zgłosić problemy na publiczną bazę danych błędów lub forum publicznego. Wszystkie próbki i testy jednostkowe wysłany z pakietem NDK skompilował go z tą funkcją.

Poprawki ważnych błędów
  • Zaimportowane biblioteki udostępnione są teraz domyślnie instalowane w instalacji docelowej lokalizacja (libs/<abi>), jeśli nie zdefiniowano APP_MODULES w Application.mk. Jeśli na przykład moduł najwyższego poziomu foo importuje moduł bar, a następnie zarówno libfoo.so, jak i Kod libbar.so jest kopiowany do miejsca instalacji. Wcześniej tylko Arkusz libfoo.so został skopiowany, chyba że wymieniono użytkownika bar w O APP_MODULES. Jeśli wyraźnie zdefiniujesz atrybut APP_MODULES, parametr działanie pozostaje bez zmian.
  • ndk-gdb działa teraz prawidłowo w przypadku aktywności z wieloma kategoriami w GŁÓWNE filtry intencji.
  • Importy z bibliotek statycznych działają teraz prawidłowo. Na przykład, jeśli jednostka organizacyjna najwyższego poziomu moduł foo importuje bibliotekę statyczną bar, która importuje zasoby statyczne biblioteka zoo, libfoo.so będzie teraz połączona z obiema bibliotekami libbar.a i libzoo.a.
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: dodano brakującą dokumentację z EGL jako obsługiwanego stabilnego interfejsu API, począwszy od poziomu API 9.
  • download-toolchain-sources.sh: zaktualizowano, aby pobrać łańcuch narzędzi źródeł z android.googlesource.com, czyli nowa lokalizacja serwerów AOSP.
  • Dodano nowe środowisko wykonawcze C++ o nazwie gabi++. Więcej informacji są dostępne w zaktualizowanym docs/CPLUSPLUS-SUPPORT.html.
  • Dodano nowe środowisko wykonawcze C++ o nazwie gnustl_shared, które odpowiada do biblioteki udostępnionej w wersji GNU libstdc++ v3 (licencja GPLv3). Więcej informacji: docs/CPLUSPLUS-SUPPORT.html
  • Dodano obsługę RTTI w środowiskach wykonawczych ze standardem STLport C++ (brak obsługi wyjątki).
  • Dodano obsługę wielu rozszerzeń plików w pliku LOCAL_CPP_EXTENSION. Dla: na przykład do skompilowania zasobów foo.cpp i bar.cxx jako źródeł w języku C++, deklaruj, że:
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
  • Z bibliotek systemowych udostępnionych w czasie linku usunęliśmy wiele niechcianych symboli wyeksportowanych udostępniane przez NDK. Dzięki temu kod wygenerowany za pomocą niezależnego łańcucha narzędzi przypadkowe użycie niestabilnego symbolu ABI (np. libgcc.a, który zmienia się za każdym razem, gdy zmienia się łańcuch narzędzi użyty do utworzenia platformy)
  • Odświeżyliśmy nagłówki EGL i OpenGLES Khronos, aby obsługiwać więcej rozszerzeń. Notatka że nie zmienia to interfejsów NDK ABI dla odpowiednich bibliotek, bo każde rozszerzenie musi być sondowane w czasie działania przez aplikację kliencką.

    Dostępne rozszerzenia zależą od rzeczywistych sterowników urządzenia i GPU, a nie wersję platformy, na której działa urządzenie. Zmiany w nagłówku powodują dodanie nowych stałych i typów, aby ułatwić korzystanie z nich, gdy zostały z sondowaniem eglGetProcAddress() lub glGetProcAddress(). na liście poniżej znajdziesz opis nowych 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

Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją R6. Wersja R6b Rozwiązano następujące problemy w wersji R6:

Poprawki ważnych błędów
  • Naprawiono kompilację, gdy użyto APP_ABI="armeabi x86" dla wieloarchitekturowych.
  • Naprawiono lokalizację gotowych plików binarnych STLport w pakiecie wersji NDK. Błąd w skrypcie opakowania umieszczał je w niewłaściwym miejscu.
  • Rozwiązano problem z wykorzystaniem pakietu atexit() w bibliotekach udostępnionych dzięki pakietowi x86standalone. z łańcuchem narzędzi.
  • Naprawiono make-standalone-toolchain.sh --arch=x86. Kiedyś zawodziła aby skopiować odpowiednie pliki binarne GNU libstdc++ we właściwe miejsce.
  • Naprawiono ostrzeżenia o braku definicji i o braku rozmiaru symbolu __dso_handle (tylko ARM).
  • Poprawiono kolejność uwzględniania kompilacji x86 wynoszącą $(SYSROOT)/usr/include. Zobacz błąd dla: znajdziesz więcej informacji.
  • Naprawiono definicje elementów ptrdiff_t i size_t w: na systemy x86, gdy są one używane z samodzielnym łańcuchem narzędzi x86.

Ta wersja pakietu NDK zawiera obsługę interfejsu ABI x86 i inne drobne zmiany. Szczegółowe informacje o zmianach w tej wersji znajdziesz w CHANGES.HTML dokument w pakiecie NDK.

Uwagi ogólne:
  • Dodano obsługę interfejsu ABI x86, co umożliwia generowanie kodu maszynowego który działa na zgodnych urządzeniach z Androidem i procesorami x86. Główne funkcje procesora x86 np. łańcuchy narzędzi dla x86, nagłówki systemowe, biblioteki i i debugowaniu. Szczegółowe informacje na temat obsługi procesorów x86 znajdują się zobacz docs/CPU-X86.html w pakiecie NDK.

    Domyślnie kod jest generowany dla urządzeń z procesorami ARM, ale możesz dodać procesor x86 Definicja APP_ABI w pliku Application.mk do utworzenia na platformach x86. Na przykład ten wiersz zawiera instrukcje ndk-build aby skompilować kod dla 3 różnych interfejsów ABI:

    APP_ABI := armeabi armeabi-v7a x86

    Jeśli nie korzystasz ze źródeł montażu opartych na architekturze ARM, nie musisz klikać Android.mk, aby utworzyć kod maszyny x86.

  • Możesz utworzyć samodzielny łańcuch narzędzi x86 za pomocą --toolchain=x86-4.4.3 przy wywołaniu numeru make-standalone-toolchain.sh. Zobacz docs/STANDALONE-TOOLCHAIN.html, aby uzyskać więcej informacji.
  • Nowe narzędzie ndk-stack umożliwia tłumaczenie zrzutów stosu logcat generowane przez kod natywny. Narzędzie tłumaczy w czytelnym formacie zawierającym takie elementy jak jako funkcję, plik źródłowy i numer wiersza odpowiadający każdej ramce stosu. Więcej informacji i przykład użycia znajdziesz tutaj: docs/NDK-STACK.html.
Inne zmiany:
Usługa
arm-eabi-4.4.0, która została wycofana od NDK r5, została zostały usunięte z dystrybucji NDK.

Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją R5b. Wersja r5c rozwiązano te problemy w wersji r5b:

Ważne poprawki błędów:
  • ndk-build: usunięto rzadki błąd, który pojawiał się przy próbie uruchomienia równoległego kompilacje projektów z możliwością debugowania.
  • Naprawiliśmy literówkę, która uniemożliwiała działanie LOCAL_WHOLE_STATIC_LIBRARIES z nowym łańcuchem narzędzi i dodaną dokumentacją docs/ANDROID-MK.html
  • Usunięto błąd, który powodował awarię kodu połączonego z gnustl_static wersje platformy starsze niż API poziomu 8 (Android 2.2).
  • ndk-gdb: usunięto błąd, który powodował błąd segmentacji podczas debugowania Android 3.0 lub nowszym.
  • <android/input.h>: 2 funkcje wprowadzone na poziomie interfejsu API 9 (Android 2.3) jest nieprawidłowe i zostało naprawione. W tej sytuacji źródłowy interfejs API nie działa, interfejsu binarnego systemu pozostaje bez zmian. W nieprawidłowych funkcjach brakowało znaku history_index oraz poprawne definicje znajdziesz poniżej:
    float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );

    float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );
  • Zaktualizowano plik binarny ARM biblioteki C dla interfejsu API poziomu 9 (Android 2.3), aby poprawnie udostępniać czas połączenia nowych funkcji dodanych na tym poziomie interfejsu API (na przykład pthread_rwlock_init).
Drobne ulepszenia i poprawki:
  • Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej się pojawiają LOCAL_SRC_FILES Wcześniej tak się nie stało, ponieważ pliki pogrupowane według rozszerzeń źródła.
  • W przypadku błędu import-module drukuje listę katalogów, które były wyszukiwane. Pozwala to sprawdzić, czy definicja NDK_MODULE_PATH używane przez system kompilacji.
  • Jeśli operacja się uda, import-module drukuje katalog, w którym w dzienniku (widoczny dla: NDK_LOG=1).
  • Zwiększono szybkość kompilacji aplikacji z możliwością debugowania w przypadku bardzo dużej liczby uwzględniania katalogów w projekcie.
  • ndk-gdb: lepsze wykrywanie błędów adb shell i ulepszone wykrywanie komunikatów o błędach.
  • <pthread.h>: naprawiono definicję PTHREAD_RWLOCK_INITIALIZER w przypadku interfejsu API poziomu 9 (Android 2.3) lub nowszego.
  • Rozwiązaliśmy problem, który powodował, że moduł mógł sam się importować, który skutkował nieskończoną pętlą GNU Make.
  • Naprawiliśmy błąd, który powodował awarię kompilacji, jeśli zasada LOCAL_ARM_NEON miała wartość true (typu wartość „build/core/build-binary.mk”).
  • Naprawiliśmy błąd, który uniemożliwiał kompilację .s plików montażowych (.S plików było w porządku).

Ta wersja NDK nie zawiera żadnych nowych funkcji w porównaniu z wersją R5. Wersja R5b zwraca następujące problemy w wersji r5:

  • Pliki binarne r5 wymagają glibc 2.11, ale pliki binarne r5b są generowane ze specjalnym kodem łańcuch narzędzi, który jest kierowany na glibc w wersji 2.7 lub nowszej. Pliki binarne łańcucha narzędzi systemu Linux działają teraz na: Ubuntu 8.04 lub nowszy.
  • Poprawiono błąd kompilatora w łańcuchu narzędzi arm-linux-androideabi-4.4.3. Poprzedni plik binarny wygenerował nieprawidłowe sekwencje instrukcji kciuka, gdy ze znakami podpisanymi.
  • Dodaje brakującą dokumentację dla: „gnustl_static” dla APP_STL, która umożliwia powiązanie z statycznej wersji biblioteki GNU libstdc++.
  • ta
  • Rozwiązano te ndk-build problemy:
    • Błąd powodujący utworzenie niespójnych plików zależności, gdy w systemie Windows wystąpił błąd kompilacji. Uniemożliwiło to zbudowanie odpowiedniej kompilacji po że błąd został naprawiony w kodzie źródłowym.
    • Błąd związany z Cygwin: używanie bardzo krótkich ścieżek instalacji NDK na Androidzie lub ścieżka projektu doprowadziła do generowania nieprawidłowych plików zależności. W ten sposób powstały przyrostowe kompilacje niemożliwe.
    • Literówka, która uniemożliwiła poprawne działanie biblioteki procesorów dzięki nowemu łańcuchowi narzędzi NDK.
    • Kompilacje w aplikacji Cygwin są szybsze dzięki unikaniu wywołań funkcji cygpath -m z programu 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 działa ono poprawnie, zdefiniuj NDK_USE_CYGPATH=1 w: aby ponownie używać środowiska cygpath -m.
    • Instalacja Cygwin powiadamia teraz użytkownika o nieprawidłowych ścieżkach instalacji, które zawierają spacje. Wcześniej nieprawidłowa ścieżka zwróci błąd związany z nieprawidłową wersją pliku GNU Make, nawet jeśli zainstalowano właściwą.
  • Naprawiliśmy literówkę, która uniemożliwiała zmiennej środowiskowej NDK_MODULE_PATH działa prawidłowo, gdy zawierała wiele katalogów rozdzielonych dwukropkiem.
  • Skrypt prebuilt-common.sh zawiera poprawki, które umożliwiają sprawdzenie kompilatora pod kątem wersji 64-bitowej generowany kod maszynowy, zamiast polegać na tagu hosta, umożliwia prawidłową odbudowę 32-bitowego łańcucha narzędzi w systemie Snow Leopard. Skrypty odbudowy łańcucha narzędzi teraz obsługują też za pomocą 32-bitowego łańcucha narzędzi.
  • Brakująca deklaracja dotycząca atrybutu INET_ADDRSTRLEN została dodana do: <netinet/in.h>
  • Brak deklaracji dla: IN6_IS_ADDR_MC_NODELOCAL i IN6_IS_ADDR_MC_GLOBAL dodano do folderu <netinet/in6.h>.
  • „asm” zostało zastąpione przez „__asm__” w <asm/byteorder.h>, aby zezwolić kompilacja z -std=c99.

Ta wersja pakietu NDK zawiera wiele nowych interfejsów API, z których większość została wprowadzona wspierać tworzenie gier i podobnych aplikacji o dużym wykorzystaniu. kodu natywnego. Dzięki interfejsom API programiści mają bezpośredni, natywny dostęp do zdarzeń, zarządzania grafiką i oknami, zasobów oraz miejsca na dane. Programiści mogą też zaimplementować Cykl życia aplikacji na Androida w kodzie natywnym z pomocą NativeActivity zajęcia. Szczegółowe informacje o zmianach tego procesu przeczytaj dokument CHANGES.HTML dołączony do pobranego pakietu NDK pakietu SDK.

Uwagi ogólne:
  • Dodaje obsługę natywnych aktywności, dzięki czemu możesz zaimplementować Cykl życia aplikacji na Androida w kodzie natywnym.
  • Dodaje natywną obsługę tych elementów:
    • Podsystem wprowadzania danych (np. klawiatura i ekran dotykowy)
    • Dostęp do danych z czujników (akcelerometru, kompasu, żyroskopu itp.).
    • Interfejsy API pętli zdarzeń w oczekiwaniu na zdarzenia takie jak dane wejściowe i zdarzenia z czujnika.
    • Podsystem okien i powierzchni
    • Interfejsy API audio oparte na standardzie OpenSL ES, które obsługują odtwarzanie i nagrywanie oraz kontrolę nad efektami dźwiękowymi na platformie
    • Dostęp do zasobów spakowanych w pliku .apk.
  • Zawiera nowy łańcuch narzędzi (oparty na GCC 4.4.3), który generuje lepszy kod i również teraz mogą być używane jako osobny kompilator dla osób, które chcą tworzyć swoje rzeczy ./configure && make Zobacz docs/STANDALONE-NARZĘDZIE.html. Pliki binarne GCC 4.4.0 są nadal podane, ale pliki binarne w wersji 4.2.1 zostały usunięte.
  • Dodaje obsługę gotowych bibliotek statycznych i udostępnionych (docs/PREBUILTS.html) oraz część eksportowanie i importowanie, aby znacznie ułatwić udostępnianie i ponowne używanie modułów innych firm; (docs/IMPORT-MODULE.html wyjaśnia, dlaczego).
  • Udostępnia domyślną implementację języka C++ STL (opartą na STLport) jako moduł pomocniczy. it mogą być używane jako bibliotekę statyczną lub współdzieloną (szczegóły i przykłady użycia znajdują się source/android/stlport/README). Gotowe pliki binarne STLport (statyczne lub współdzielone) oraz GNU libstdc++ (tylko statyczne) możesz podać, jeśli wybierzesz kompilować z tymi bibliotekami zamiast domyślnej implementacji języka C++ STL. Wyjątki C++ i RTTI nie są obsługiwane w domyślnej implementacji STL. Więcej Więcej informacji zawiera docs/CPLUSPLUS-SUPPORT.HTML.
  • Zawiera ulepszenia biblioteki pomocniczej cpufeatures, raportowanie (niektóre urządzenia zgłaszały wcześniej procesor ARMv7, gdy ARMv6). Śr zaproponuj programistom, którzy korzystają z tej biblioteki do ponownego budowania aplikacji, prześlij ją do Google Play, aby skorzystać z ulepszeń.
  • Dodaje bibliotekę EGL, która umożliwia tworzenie tekstur OpenGL ES i zarządzanie nimi usług Google.
  • Dodaje nowe przykładowe aplikacje, native-plasma oraz native-activity, aby pokazać, jak napisać aktywność natywną.
  • zawiera wiele poprawek błędów i inne drobne ulepszenia; przejdź do strony docs/CHANGES.html, aby dowiedzieć się więcej szczegółową listę zmian.
Uwagi NDK r4b:

Zawiera poprawki kilku błędów dotyczących kompilacji NDK i skryptów debugowania, jeśli używasz NDK r4, zalecamy pobranie kompilacji NDK r4b. Szczegółowe informacje informacje opisujące zmiany wprowadzone w tej wersji można znaleźć w dokumencie CHANGES.TXT w pobranym pakiecie NDK.

Uwagi ogólne:
  • Udostępnia uproszczony system kompilacji za pomocą nowej kompilacji ndk-build .
  • Dodaje obsługę łatwego natywnego debugowania wygenerowanego kodu maszynowego w środowisku produkcyjnym urządzeń za pomocą nowego polecenia ndk-gdb.
  • Dodaje nowy interfejs ABI dostosowany do Androida dla architektur procesorów ARM. armeabi-v7a Nowy interfejs ABI rozszerza istniejący interfejs ABI armeabi do dołącz te rozszerzenia do zestawu instrukcji dotyczących procesora:
    • Instrukcje „Nie lubię”
    • Instrukcje dotyczące sprzętowego FPU VFP (VFPv3-D16)
    • Opcjonalna obsługa technologii ARM Advanced SIMD (NEON) GCC i VFPv3-D32. Ta funkcja jest obsługiwana przez takie urządzenia jak Verizon Droid firmy Motorola, Google Nexus One i reszta.
  • Dodaje nową bibliotekę statyczną cpufeatures (ze źródłami), która umożliwia aplikacja wykrywa funkcje procesora urządzenia w czasie działania. W szczególności aplikacje mogą sprawdź zgodność ze standardem ARMv7-A oraz VFPv3-D32 i NEON, a następnie udostępnij osobny ścieżek kodu.
  • Dodaje przykładową aplikację hello-neon, która ilustruje, jak korzystać z biblioteka cpufeatures do sprawdzania funkcji procesora i udostępniania zoptymalizowanej za pomocą NEON Instrinsics, jeśli obsługuje go procesor.
  • Umożliwia generowanie kodu maszynowego dla jednego lub obu obsługiwanych zestawów instrukcji przez NDK. Można na przykład tworzyć architektury ARMv5 i ARMv7-A w w tym samym czasie i przechowywać wszystkie informacje aż do .apk
  • Aby aplikacje były dostępne dla użytkowników tylko wtedy, gdy ich urządzenia ale można je uruchamiać, Google Play filtruje teraz aplikacje na podstawie informacje o zestawie instrukcji w Twojej aplikacji – nie musisz nic robić aby włączyć filtrowanie. Dodatkowo system Android aplikacji w momencie instalacji. Instalacja będzie kontynuowana tylko wtedy, gdy Aplikacja udostępnia bibliotekę skompilowaną dla architektury procesora urządzenia.
  • Dodano obsługę Androida 2.2, w tym nowy, stabilny interfejs API umożliwiający dostęp do piksela w buforach obiektów Bitmap z kodu natywnego.
Uwagi ogólne:
  • Dodaje obsługę natywnej biblioteki OpenGL ES 2.0.
  • Dodaje przykładową aplikację hello-gl2, która ilustruje użycie Moduły do 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 w GCC 4.4.0, kod maszynowy powinien być nieco bardziej zwarty i wydajny niż poprzedni. (4.2.1). Pakiet NDK nadal zapewnia pliki binarne w wersji 4.2.1, których możesz używać do tworzenia kodu.

Premiera pod nazwą „Android 1.6 NDK, wydanie 1”.

Uwagi ogólne:
  • Dodaje obsługę natywnej biblioteki OpenGL ES 1.1.
  • Dodaje przykładową aplikację (san-angeles), która renderuje grafikę 3D za pomocą natywnych interfejsów OpenGL ES, a jednocześnie zarządzać cyklem życia działań za pomocą obiektu GLSurfaceView.

Premiera pod nazwą „Android 1.5 NDK, wydanie 1”.

Uwagi ogólne:
  • Obejmuje obsługę kompilatora (GCC) dla instrukcji ARMv5TE, w tym Thumb-1 za instrukcje.
  • Zawiera nagłówki systemowe dla stabilnych natywnych interfejsów API, dokumentację i przykład aplikacji.