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.
Android NDK r26 LTS (wrzesień 2023 r.)
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.
Android NDK r25 LTS (lipiec 2022 r.)
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.
Android NDK r24 (marzec 2022 r.)
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.
-
Program GNU Assembler (GAS) został usunięty. Jeśli tworzysz materiały z
Android NDK r23 LTS (sierpień 2021 r.)
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).
-
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
Android NDK r22b (marzec 2021 r.)
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 zas
bezpośrednio, użyjclang
. - 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.
-
Problem
1258:
-
Narzędzie GNU binutils zostało wycofane i zostanie usunięte w najbliższej wersji NDK
wersji. Pamiętaj, że narzędzie GNU Assemb (
Android NDK r21e LTS (styczeń 2021 r.)
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)
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.
-
Android NDK r20b (czerwiec 2019 r.)
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.
-
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
Android NDK r19c (styczeń 2019 r.)
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: 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$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp 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.
-
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
Android NDK r18b (wrzesień 2018 r.)
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.
Android NDK r17c (czerwiec 2018 r.)
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.
Android NDK r16b (grudzień 2017 r.)
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 r17libc++
to domyślny STL dla CMake i samodzielnych łańcuchów narzędzi. Jeśli wybrano ręczne inny STL, zdecydowanie zalecamy przejście nalibc++
. 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.
Android NDK r15c (lipiec 2017 r.)
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.
- 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 zasadaAPP_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.
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.
- 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.
Android NDK r14b (marzec 2017 r.)
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ą.
- 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:
Więcej informacji na temat nowości i zmian w tej wersji znajdziesz w dziennik zmian.
Android NDK r13b (październik 2016 r.)
- 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
-
-
Dodatkowe poprawki dotyczące brakującego elementu
__cxa_bad_cast
.
-
Dodatkowe poprawki dotyczące brakującego elementu
- 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.
Android NDK r12b (czerwiec 2016 r.)
- 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ę, żemake_standalone_toolchain.py
spełnia Twoje potrzeby. - Zgłoś problemy na GitHub.
- 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).
- Pełne informacje o tych zmianach znajdziesz w artykule tej liście zmian.
- Dodaliśmy implementację samodzielnych łańcuchów narzędzi w Pythonie:
build/tools/make_standalone_toolchain.py
- Użytkownicy systemu Windows nie 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ń zINFO_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
iclang++.exe
w 32-bitowym Pakiet Windows jest w rzeczywistości 64-bitowy. 32-bitowy plik wykonywalny ma nazwęclang_32.exe
Tym razem aplikacja - Pliki wykonywalne
- 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.
__thread
powinna działać na żywo.
Android NDK r12 (czerwiec 2016 r.)
- 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ę domake_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 wykonywalneclang++.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ówACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
został umieszczony przez przypadek i zostanie usunięty w następnej wersji. UżywajACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (marzec 2016 r.)
- 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)
Android NDK r11b (marzec 2016 r.)
- 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
wmake-standalone-toolchain.sh
- Problem z
- Ważne ogłoszenia
- 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.
Android NDK r11 (marzec 2016 r.)
- 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.
- Zdecydowanie zalecamy przejście na język 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.
- Kompilator obsługuje teraz interfejs
- Clang obsługuje teraz emulację protokołu TLS.
- Ważne ogłoszenia
- 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.
- Do projektu
- 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.
- Wyłączono obsługę
- Inne zmiany
- Zmieniono samodzielne łańcuchy narzędzi ARM na domyślne na arm7.
- Można przywrócić stare zachowanie, podając parametr
-target
jakoarmv5te-linux-androideabi
.
- Można przywrócić stare zachowanie, podając parametr
- 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ę.
- Zmieniono samodzielne łańcuchy narzędzi ARM na domyślne na arm7.
- 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
iuchar.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.
- Ważne ogłoszenia
- Binutils
-
- Dodane
- Dodano nową opcję:
--pic-veneer
.
- Dodano nową opcję:
- 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).
- Dodane
- 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.
- Usunięcia
- Treści YASM
-
- Zmiany
- Zaktualizowano YASM do wersji 1.3.0.
- Zmiany
- 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 zdynamic_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.
Android NDK r10e (maj 2015 r.)
- 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
.
- Aby skompilować z użyciem wielowątkowości, użyj opcji
- Uaktualniono GDB/gdbserver do wersji 7.7 dla wszystkich architektur.
- Usunęliśmy pakiet NDK dla 32-bitowego Darwina.
- Zintegrowano obejście dla modelu Cortex-A53 Erratum 843419 w
- 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
iandroid-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
imips64
, 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
i1
. 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 poleceniendk-build.cmd
z systemugradle
. (Problem 66937). - Dodano biblioteki
libatomic.a
ilibgomp.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 nadalld.bfd
. Aby jawnie włączyć interfejsld.gold
, dodaj-fuse-ld=gold
do ZmiennąLOCAL_LDFLAGS
lubAPP_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.
- Dodano
Android NDK r10d (grudzień 2014 r.)
- 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 wykonywaniamake-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 parametruPIE
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.
- 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
- 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)
- 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ę,
- 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 wstdlib.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
orazgl2ext.h
,dlext.h
,fts.h
,sgidefs.h
dla interfejsu API poziomu 21. - Zmodyfikowano plik
sys/user.h
, aby zmienić nazwęmxcsr_mask
namxcr_mask
. oraz zmienić typ danych dlau_ar0
z: - Zmieniono typ wartości zwróconej funkcji
sysconf()
zint
nalong
- Poprawiono obsługę polecenia
thumb
przez kompilację ndk w przypadkuLOCAL_ARM_MODE
: w r10d, ndk-build domyślnie dodaje parametrLOCAL_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
czyAndroidManifest.xml
obejmująceandroid: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);
unsigned long
do struct user_regs_struct*.
Android NDK r10c (październik 2014 r.)
- Ważne zmiany:
-
- Wprowadziliśmy te zmiany w strukturze pobierania:
- Każdy pakiet zawiera teraz 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,
- 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. - 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świetlprebuilt/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.
- Przejdź do Przewodnika dla programistów NDK (
- Udokumentowana pomoc dla usługi
_FORTIFY_SOURCE
wheaders/libs/android-21
. który pojawiał się w r10 (kiedyandroid-21
nadal nazywał sięAndroid-L
), ale nie mają dokumentów.
Więcej szczegółowych informacji znajdziesz w sekcji Poprawki ważnych błędów poniżej.
Podczas migracji z projektów przy użyciu GCC możesz używać:
-Wno-invalid-command-line-argument
i-Wno-unused-command-line-argument
ignorując nieużywane flagi, dopóki nie zdecydujesz się, co zrobić z nimi w dłuższej perspektywie. - Ważne poprawki błędów:
-
- Naprawiliśmy wewnętrzny błąd kompilatora w przypadku pakietu GCC4.9/aarch64, który powodował komunikat o błędzie (problem 77564):
- Usunięto nieprawidłowe generowanie kodu z GCC4.9/arm. (Problem 77567).
- Naprawiliśmy wewnętrzny błąd kompilatora w przypadku pakietu GCC4.9/mips, który dotyczył zestawu wewnętrznego. (Problem 77568).
- Naprawiliśmy nieprawidłowy kod, który GCC4.9/grupa generował dla grupy
x = (cond) ? y : x
. (Numer 77569) - Poprawiono GCC4.9/aarch64 i Clang3.5/aarch64, aby obejść
Cortex-A53 erratum (835769). Wyłącz obejście, określając
-mno-fix-cortex-a53-835769
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Inne poprawki błędów:
-
- Wprowadziliśmy 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
iASensor_isWakeUpSensor
. - Naprawiliśmy
stdatomic.h
, aby zwiększyć zgodność z GCC 4.6 i zapewnić wsparcie dla nagłówka<atomic>
. - Dodano
sys/ucontext.h
isys/user.h
do wszystkich poziomów interfejsu API. Nagłóweksignal.h
zawiera teraz<sys/ucontext.h>
. Możesz usuń istniejącą definicję słowastruct 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
iclock_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
idlmalloc
. - Z architektur 64-bitowych usunęliśmy te funkcje:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Z architektur 32-bitowych usunęliśmy tę funkcję:
__signalfd4
- Zmieniono typ trzeciego argumentu z
size_t
naint
w te funkcje:strtoll_l
,strtoull_l
,wcstoll_l
iwcstoull_l
. - Te funkcje zostały przywrócone do architektury 64-bitowej:
arc4random
,arc4random_buf
iarc4random_uniform
. - Przeniesiono z powrotem operatory
cxa_*
oraznew
idelete
dolibstdc++.so
. Ta zmiana przywraca działanie r9d. poprzednie wersje r10 zawiera pliki zastępcze.
- Dodano więcej kodów klawiszy TV:
- 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=
wmake-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/
.
- Wprowadziliśmy następujące poprawki nagłówka i biblioteki w
- 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łówkiinclude-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: - Poprawiono literówkę w pliku
build-binary.mk.
(problem 76992).
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Ulepszono
- Ważne znane problemy:
-
- Określenie -Os (
-fauto-profile
) w GCC4.9 może spowodować awarię. (Numer 77571)
- Określenie -Os (
Android NDK r10b (wrzesień 2014 r.)
- Ważne uwagi:
-
- Ze względu na ograniczenie rozmiaru 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:
- Inne poprawki błędów:
-
- Usunięto plik
stdio.h
z katalogówinclude-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/
isources/third_party/googletest/README.NDK
. (Numer sprawy 74069). - Wprowadziliśmy te poprawki w nagłówkach Android-L:
- Do
ctype.h
iwchar.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()
. - Nazwa
cmsg_nxthdr
została zmieniona na__cmsg_nxthdr
. - Użytkownik
__libc_malloc_dispatch
został usunięty. - Zmieniono prototyp
ptrace()
nalong ptrace(int, ...);
. - Użytkownik
sha1.h
został usunięty. - Rozszerzono zakres
android_dlextinfo
na językandroid/dlext.h
. - Adnotacje
__NDK_FPABI__
do funkcji odbierających lub zwracających wartości typu zmiennoprzecinkowego lub podwójnego wstdlib.h
,time.h
,wchar.h
icomplex.h
.
- Usunięto plik
- Inne zmiany:
-
- Zaktualizowano
mipsel-linux-android-4.9
imips64el-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).
- Zaktualizowano
Android NDK r10 (lipiec 2014 r.)
- 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
iall64
ustawienia usługiAPP_ABI
.APP_ABI=all32
jest odpowiednikiem funkcjiAPP_ABI=armeabi,armeabi-v7a,x86,mips
APP_ABI=all64
jest odpowiednikiem funkcjiAPP_ABI=arm64-v8a,x86_64,mips64
APP_ABI=all
wybiera wszystkie interfejsy ABI.
- Nowa wersja GNU libstdc++ w Androidzie-L zawiera wszystkie
<tr1/cmath>
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ługiApplication.mk
lub wyeksportuj je jako plik zmienną środowiskową z wiersza poleceń. - W przypadku samodzielnego łańcucha narzędzi użyj opcji
--toolchain=
w Skryptmake-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
lub4.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: - Naprawiliśmy tę awarię w Clang 3.3/3.4:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(numer 57381).): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018
. (Numer 66950). - Naprawiono libc++, dzięki czemu kompilacja to
- Inne poprawki błędów:
-
- Stałe nagłówki:
- Poprawiono 32-bitowy tag
ssize_t
naint
zamiastlong int
. - Naprawiono
WCHAR_MIN
iWCHAR_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 znakipread64
,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: - 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żywastrrchr()
zamiaststrchr()
, 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ć.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Lista zmian 91185). - 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
- Do łańcucha narzędzi x86 dodano komponent
Android NDK r9d (marzec 2014 r.)
- 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: Skompilowana biblioteka zostanie skopiowana do folderuTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
. Dla majsterkowiczów działa zgodnie z oczekiwaniami, nie możesz określić zarównoarmeabi-v7a
, jak iarmeabi-v7a-hard
jako wartości docelowe (np. w wierszu APP_ABI=). Spowoduje to zignorowanie jednego z nich. Pamiętaj, żeAPP_ABI=all
nadal jest odpowiednikiem funkcjiarmeabi armeabi-v7a x86 mips
- Skrypt
make-standalone-toolchain.sh
kopiuje się biblioteki dodatkowe w katalogach/hard
. Dodaj powyższeCFLAGS
iLFLAGS
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
. iEXPORT_ASMFLAGS
flag dla procesorów x86 celów. Skryptndk-build
używaprebuilts/*/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
lubAPP_STL := c++_shared
w aplikacjiApplication.mk
. Możesz odbudować ze źródła przezLIBCXX_FORCE_REBUILD := true
- Wykonaj polecenie
make-standalone-toolchain.sh --stl=libc++
aby utworzyć samodzielny łańcuch narzędzi z nagłówkami libc++/lib.
CPLUSPLUS-SUPPORT.html
(Numer 36496) - Dodaj
- Dodano obsługę kompilatora Clang 3.4.
Opcja
- 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
- Mac OS X:
- 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 listJNI_OnLoad
iJNI_OnUnload
w:jni.h
. Pamiętaj, żeJNICALL
jest zdefiniowane jako__NDK_FPABI__
. Aby dowiedzieć się więcej, zobaczsys/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):
- 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 Zscalblnl
na x86libm.so
w przypadku interfejsów API w wersji 18 i nowszych. - Poprawiono literówkę w dokumencie
sources/android/support/include/iconv.h
(Numer 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Naprawiono brakujący
- Poprawiono gabi++
std::unexpected()
, aby zadzwonićstd::terminate()
, tak aby może zostać uruchomiony zdefiniowany przez użytkownika moduł obsługistd::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ługild.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ściSHELL
jako zmienna środowiskowa zamiast przekazywać go dopython.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łokicmd.exe
i MinGW nie rozumiają, dowiązania symboliczne utworzone przez narzędzie cygwin.
- Poprawki nagłówków:
- Inne zmiany:
-
- Zastosowano uprawnienia do wykonywania do wszystkich
*cmd
skryptów przeznaczone do użytku tylko w powłocecmd.exe
, na wypadek, deweloperzy wolą używaćndk-build.cmd
w cygwin zamiast zalecany skryptndk-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.
- Zastosowano uprawnienia do wykonywania do wszystkich
Android NDK r9c (grudzień 2013 r.)
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
napoll(struct pollfd *, nfds_t, int);
wpoll.h
. - Dodano
utimensat
do listylibc.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 Zclock_nanosleep()
natime.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,
iCLOCK_BOOTTIME_ALARM
w:time.h.
- Usunięto przestarzałe
CLOCK_REALTIME_HR
iCLOCK_MONOTONIC_HR.
- Zmieniono prototyp linii
- 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ższe.
- 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 Windowscmd.exe
, gdyLOCAL_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 Sekcjastack:
, która nie zawierapc
,eip
, czyip
. 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.
- Poprawki nagłówków:
- 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 dondk-build
Przy tym ustawieniundk-build
nie zmienia próba wyszukania hasłaNDK_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 parametruAPP_*
zawarte w tekścieApplication.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 skryptowindk-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ć raportAPP_ABI
na kompilację danych. - Użyto narzędzia
ar
w trybie deterministycznym (opcja)-D
), aby tworzyć biblioteki statyczne. (Numer 60705)
- Dodano
Android NDK r9b (październik 2013 r.)
- Ważne zmiany:
-
- Zaktualizowano
include/android/*h
imath.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 stronietests/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 wyeksportujGCC_COLORS
w następujący sposób: Więcej informacji: GCC Opcje niezależne od języka.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- 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.
- Zaktualizowano
- 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:
(Wydanie 58916, Problem z GCC)internal compiler error: verify_flow_info failed
- 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: (Poprawka do GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Rozwiązano problem z generowaniem 16-bitowego skoku względnego w
- Inne poprawki błędów:
-
- Poprawki nagłówków
- Naprawiliśmy brak podpisu w architekturze ARM
WCHAR_MIN
iWCHAR_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ówTCP_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
iimaxdiv
inttypes.h
- Rozwiązaliśmy problem z zwracanymi wartościami
pthread_exit()
ipthread_self()
. (Problem 60686) - Dodano brakującą funkcję
mkdtemp()
, która już istnieje wbionic
nagłówekstdlib.h
.
- Naprawiliśmy brak podpisu w architekturze ARM
- 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 zakresiessax-instructions
ifenv
. - 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)
- Poprawki nagłówków
- Inne zmiany:
-
- Włączono OpenMP we wszystkich kompilacji GCC. Aby korzystać z tej funkcji, dodaj następujące flagi do swojego
ustawienia kompilacji:
Przykłady kodu znajdziesz tutaj:LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
- Rozmiar pliku
ld.mcld
został znacznie zmniejszony (1,5 MB w porównaniu zld.bfd
3,5 MBld.gold
7,5 MB), co przyniosło wzrost szybkości o około 20%. - Dodano
LOCAL_CONLYFLAGS
iAPP_CONLYFLAGS
, aby określić opcje dotyczące tylko języka C, ale nie C++. IstniejącyLOCAL_CFLAGS
iAPP_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.
- Włączono OpenMP we wszystkich kompilacji GCC. Aby korzystać z tej funkcji, dodaj następujące flagi do swojego
ustawienia kompilacji:
Android NDK r9 (lipiec 2013 r.)
- 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 wyeksportujNDK_TOOLCHAIN_VERSION=4.8
lub dodaj go w:Application.mk
. - W przypadku samodzielnych kompilacji użyj opcji
--toolchain=
wmake-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 jaksources/cxx-stl/stlport/stlport/stl/config/features.h
, wiersz 311. Więcej Więcej informacji zawiera Zmień numer 55460Uwaga: 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ę. - W przypadku
- 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
lubAPP_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)
- Dodano obsługę Androida 4.3 (poziom interfejsu API 18). Więcej informacji:
- 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
ilibc.a
, aby umożliwić obsługę funkcjiwait4()
. (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 pliklinker.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
pozabx pc
lubblx pc
Instrukcja. (numer 56962, Numer sprawy 36149) - Poprawiono MIPS
gdbserver
w celu wyszukiwania zbioru danychDT_MIPS_RLD_MAP
zamiastDT_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)
- Usunięto potencjalny problem z obsługą zdarzeń w pliku
- 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 zndk-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 nieAPP_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ścitypedef
z_Unwind_Control_Block
. (numer 54426) - Naprawiono
awk
skryptu do obsługi plikówAndroidManifest.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
ipr2
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)
- Naprawiono skrypt
- Inne zmiany:
-
- Korekty nagłówków
- Zmieniono nagłówki, aby
__set_errno
stała się funkcją wbudowaną, ponieważ Środowisko__set_errno
w przeglądarceerrno.h
zostało wycofane, a usługalibc.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ówWCHAR_MAX
iWCHAR_MIN
- Poprawiono deklarację
<inttypes.h>
dotyczącą punktówPRI
iSCN
. (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, żewchat_t
jest 32-bitowy dla wszystkich Poziomy interfejsu API. Aby przywrócić poprzednie zachowanie, zdefiniuj_WCHAR_IS_8BIT
zmiennej logicznej. (numer 57267)
- Zmieniono nagłówki, aby
- 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 bibliotekignustl
, 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ówclang
iclang++
, 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ć polecenieconst_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 flagę
- Dodano
-mldc1-sdc1
do kompilatorów MIPS GCC i Clang. Domyślnie kompilatory odpowiednio wyrównaj 8-bajtowe obiekty i wysyłaj instrukcjeldc1
orazsdc1
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 operacjildc1
isdc1
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
wjni/Application.mk
, ponieważ NDK nie zawiera na wszystkich poziomach. W takim przypadku rzeczywisty poziom jest przesuwany w dół. PoleAPP_MIN_PLATFORM_LEVEL
jest określane przez parametrandroid:minSdkVersion
w plik manifestu aplikacji. (Numer 39752) - Dodano metody
android_getCpuIdArm()
iandroid_setCpuArm()
docpu-features.c
To dodanie ułatwia pobieranie identyfikatora CPUID ARM i informacjami o nich. (Numer 53689) - Zmodyfikowano
ndk-build
, aby używać danychas/ld
GCC 4.7 na potrzeby kompilacji w języku Clang.Uwaga: W GCC 4.7 nazwy
monotonic_clock
iis_monotonic
zostały zmienione nasteady_clock
iis_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.
- Dodano ostrzeżenia, jeśli
- Zaktualizowano skrypty kompilacji, tak aby jeśli element
APP_MODULES
nie był zdefiniowany i tylko statyczny są wymienione w biblioteceAndroid.mk
, skrypt wymusza ich kompilację. (Problem 53502) - Zaktualizowano
ndk-build
, by obsługiwać ścieżki bezwzględne w elemencieLOCAL_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 elementulibraries/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
.
- Korekty nagłówków
Android NDK r8e (marzec 2013 r.)
- Ważne zmiany:
-
- Dodano zestaw 64-bitowego łańcucha narzędzi hosta (sufiks nazwy pakietu
*-x86_64.*
). Więcej informacje można znaleźć w sekcjiCHANGES.HTML
iNDK-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
iLOCAL_SHARED_LIBRARIES
Więcej informacji:CHANGES.HTML
. (Numer 39378)
- Dodano zestaw 64-bitowego łańcucha narzędzi hosta (sufiks nazwy pakietu
- 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 wuncaught_exception()
. (Zmień 50236) - Usunięto
STLport
błąd magistrali przy obsłudze wyjątków spowodowany niedopasowanym dostępemDW_EH_PE_udata2
,DW_EH_PE_udata4
iDW_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)
- Naprawiliśmy skrypt kompilacji, aby utworzyć wszystkie łańcuchy narzędzi w usłudze
- Inne poprawki błędów:
-
- Poprawiono nagłówki NDK:
- Usunięto zbędne definicje
size_t
,ssize_t
iptrdiff_t
- Poprawiono nagłówek MIPS i ARM
fenv.h
. - Naprawiono atrybut
stddef.h
, przez co nie można było ponownie zdefiniować elementuoffsetof
, ponieważ już istnieje w łańcuchu narzędzi. - Naprawiono
elf.h
, aby uwzględnićElf32_auxv_t
iElf64_auxv_t
. (Numer 38441) - Naprawiono definicje
#ifdef
C++ wOpenSLES_AndroidConfiguration.h
. (Numer 53163)
- Usunięto zbędne definicje
- 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 bibliotekilibgcc_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
iclang++
w samodzielnym kompilatorze NDK w celu wykrycia-cc1
i nie określać-target
w przypadku znalezienia wartości. - Naprawiono
ndk-build
, aby obserwować ustawienieNDK_APP_OUT
wApplication.mk
. - Naprawiono X86
libc.so
ilib.a
, w których brakowałosigsetjmp
i funkcjisiglongjmp
są już zadeklarowane wsetjmp.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 definicjiLOCAL_PATH
. (Numer 42841)
- Poprawiono nagłówki NDK:
- 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 kataloguobj/local/<abi>/
projektu. (Problem 40302) - Usunięto reakcję
__ARM_ARCH_5*__
ze skryptu ARMtoolchains/*/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ługild.gold
w GCC 4.6/4.7. - Włączono
--text-reorder
dla usługild.gold
w GCC 4.7. - Skonfigurowano GNU libstdc++ z parametrem
_GLIBCXX_USE_C99_MATH
, który nie definiujeisinf
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łączenieNDK_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 zpentiumpro
igeneric
doi686
iatom
. - Ulepszone skrypty kompilacji łańcucha narzędzi:
- Naprawiono stan wyścigu w
build-gcc.sh
w przypadku kompilacjimingw
. co uniemożliwiało znaczną ilość równoległego przetwarzania kompilacji. - Zaktualizowano reguły
build-gabi++.sh
ibuild-stlport.sh
, dzięki czemu mogą teraz działać z pakietu NDK. (Numer 52835) - Naprawiono
run-tests.sh
w kolekcji narzędziMSys
. - 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
istlport_static.a
bez ukrytej widoczności.
- Naprawiono stan wyścigu w
Android NDK r8d (grudzień 2012 r.)
- 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ługiApplication.mk
. - W przypadku samodzielnych kompilacji dodaj opcję
--toolchain=
domake-standalone-toolchain.sh
, na przykład:--toolchain=arm-linux-androideabi-4.7
Uwaga: ta funkcja jest eksperymentalna. Spróbuj i zgłoś ewentualne problemy.
- W przypadku
- Dodano obsługę wyjątków
stlport
przez gabi++. Pamiętaj, że nowa strona gabi++ zależy od elementudlopen
i powiązanego kodu, co oznacza, że:- Nie możesz już tworzyć statycznego pliku wykonywalnego za pomocą interfejsu
-static
lub uwzględnijlibstlport_static.a
przy użyciuAPP_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
.
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.
- Nie możesz już tworzyć statycznego pliku wykonywalnego za pomocą interfejsu
- 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 dosources/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).
- 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:
- 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:
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.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Usunęliśmy opcje
-x c++
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)
- Rozwiązano niepotrzebne ponowne kompilowanie plików obiektów w przypadku korzystania ze skryptu
- Inne poprawki błędów:
-
- Poprawki pliku nagłówka NDK:
- Poprawiono ustawienie
__WINT_TYPE__
iwint_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__
wsys/cdefs.h
. (numer 14627) - Zmieniono uporządkowanie nagłówków w sekcjach
byteswap.h
idirent.h
. - Poprawiono
limits.h
, aby uwzględnićpage.h
, który zapewniaPAGE_SIZE
ustawieniach. (Numer 39983) - Stały typ zwrotu:
glGetAttribLocation()
iglGetUniformLocation()
odint
doGLint
. - Poprawiono stałą
__BYTE_ORDER
w przypadku kompilacji x86. (Numer 39824)
- Poprawiono ustawienie
- 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ługiHOST_MAKE
. - Rozwiązano problem z poleceniem
ld.gold
wfsck_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.
- Poprawki pliku nagłówka NDK:
- 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 wlib32/
.
Android NDK r8c (listopad 2012 r.)
- 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
wyeksportujNDK_TOOLCHAIN_VERSION=clang3.1
lub dodaj to ustawienie zmiennej środowiskowej do bibliotekiApplication.mk
. - W przypadku samodzielnych kompilacji dodaj
--llvm-version=3.1
domake-standalone-toolchain.sh
i zastąpCC
orazCXX
w utwórz plik z<tool-path>/bin/clang
i<tool-path>/bin/clang++
. ZobaczSTANDALONE-TOOLCHAIN.html
: .
Uwaga: ta funkcja jest eksperymentalna. Spróbuj i zgłoś ewentualne problemy.
- W przypadku
- 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ącLOCAL_LDFLAGS += -fuse-ld=bfd
doAndroid.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]
indk-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
doandroid-13
w:APP_PLATFORM
,project.properties
lubdefault.properties
link doandroid-9
zamiastandroid-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 opcjaAPP_PIE
umożliwia kontrolowanie tego zachowania. Aby dowiedzieć się więcej, wejdź naAPPLICATION-MK.html
.Uwaga: wszystkie poziomy interfejsu API powyżej 14 nadal są połączone z tabelą
platforms/android-14
i nie dodano żadnych nowychplatforms/android-N
. - Zmodyfikowano
ndk-build
, aby wyświetlać ostrzeżenia, jeśli zmieniony poziom interfejsu API jest większy niżandroid:minSdkVersion
wAndroidManifest.xml
projektu.
- Zmodyfikowano logikę kompilacji, tak aby projekty, które określają
- Zaktualizowaliśmy bibliotekę pomocniczą
cpu-features
, aby obejmowała więcej funkcji związanych z architekturą ARM. Aby dowiedzieć się więcej, wejdź nasources/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 icrt*.o
dla wersji 7 są prawidłowo połączone. - Dodano
-mfpu=vfpv3-d16
do listyndk-build
zamiast Opcja-mfpu=vfp
używana w poprzednich wersjach.
- Zmodyfikowano ten typ kompilacji, aby przekazywać parametr
- 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:
- 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łądgdb.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ć nazwtypeinfo
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.6cp/mangle.c::write_unscoped_name
, gdzie GCC może ulec awarii, gdy kontekst jestnull
i usunięty wTREE_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*()
funkcjiSTLport
. 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 funkcjiAPP_STL
Skrypty (ndk-build
) wyszukały wcześniej pliki C++ w języku:LOCAL_SRC_FILES
dodanie ścieżek STLheader/lib
do kompilacji. Zmodyfikowanondk-build
na odfiltruj sufiksy.arm
i.neon
przed wyszukiwaniem, w przeciwnym razie elementy w językuLOCAL_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 beztag_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ącmake-standalone-toolchain.sh
w celu zapełnieniaheaders/libs
w podkataloguarmv7-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 zchar
. (numer GCC 50099) - Naprawiliśmy błąd wewnętrzny kompilatora z wartością przesunięcia ujemnego. (Problem z GCC)
- Poprawiono architekturę ARM GCC 4.4.3/4.6
- Poprawiono ustawienie
-fstack-protector
dla X86, które jest również domyślną wartością dlandk-build
Środowisko docelowe ABI x86. - Poprawki dotyczące MIPS:
- Naprawiono
STLport
przez ustawienie wartości_STLP_LITTLE_ENDIAN
na 1, gdy: kompiluję MIPSlibstlport_*
. - 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)
- Naprawiono
- 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
, gdyAPP_ABI
zawieraall
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ń wsolib
. (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 numeremsvr4_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ę wdlopen-ed
biblioteki. (Numer 34856) - Usunięto
SIGILL
w dynamicznym tagu łączącym podczas wywoływania funkcjidlopen()
w systemie gdzie/system/bin/linker
bez symboli i symboli Komponentrtld_db_dlactivity()
jest zaimplementowany jakoThumb
ze względu na brak zachowywania danychLSB
zsym_addr
. (Numer 37147)
- 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
- Rozwiązaliśmy problem z uruchamianiem aplikacji
- 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
wlinux/sysctl.h
ilinux/icmp.h
, aby uniknąć konfliktu z:#define __unused
wsys/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ęzykustdint.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
iULONG_LONG_MAX
od<pthread.h>
do<limits.h>
.
- Naprawiono
- 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, gdySTLport
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ć danychatexit()
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ówplt
do wygenerowania bardziej czytelnego formularzafunction@plt
. - Usunęliśmy te symbole wprowadzone w GCC 4.6
libgcc.a
z bibliotekalibc.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 MIPScrt*_so.S
- Zaktualizowano
ndk-gdb
, tak aby zajmował tylko ostatni wiersz danych wyjściowychndk-build
:DUMP_XXXX
. Ta zmiana sprawi, że jeśliApplication.mk
lubAndroid.mk
drukuje coś ze składnią$(info ...)
– nie otrzymuje wstrzyknięto do wyniku funkcjiDUMP_XXXX
. (Więcej informacji)
- Poprawiono nagłówki NDK:
- Inne zmiany:
-
- Nagłówki
arch-x86
iarch-mips
zostały usunięte zplatforms/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 7native-activity
z Androida 9 na Androida 10native-audio
z Androida 9 na Androida 10native-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 wcrtbegin_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
istandalone/run.sh
z różnymi warunkami. Uruchomiono skryptrun-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
- Nagłówki
Android NDK r8b (lipiec 2012 r.)
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ęcgdb
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 symbolesolib
po wywołaniu funkcjidlopen()
).
- Zaktualizowany narzędzie do przekazywania flag
- 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, gdymake
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.
- Rozwiązano
- Ważne zmiany:
-
- Dodano łańcuch narzędzi GCC 4.6 (
binutils
2.21 zgold
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
wApplication.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. DodajLOCAL_LDLIBS += -fuse-ld=gold
w aplikacjiAndroid.mk
, aby ją włączyć. - Programy skompilowane z użyciem
-fPIE
wymagają do debugowania nowego interfejsuGDB
. plików binarnych w obrazach systemowych Androida 4.1 (poziom interfejsu API 16). - Narzędzie
binutils
2.21ld
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 poleceniap_align
ip_flags
w sekcjiGNU_RELRO
, jeśli są prawidłowe. Bez tej poprawki Nie udało się debugować kompilacji za pomocą-fPIE
. (mor e info)
- Naprawiono
- Wyłączono optymalizację
sincos()
w celu zapewnienia zgodności ze starszymi platform.
- GCC 4.6 to teraz domyślny łańcuch narzędzi. Możesz ustawić
- 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:
- Wyłącz ochronę NX, ustawiając opcję
--execstack
dla a tagi-z execstack
dla tagu łączącego. - Wyłącz wzmacnianie zabezpieczeń danych wewnętrznych za pomocą ustawień
-z norelro
i Opcje (-z lazy
) tagu łączącego. - 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
. - Wyłącz ochronę NX, ustawiając opcję
- Dodano pakiet
- Dodano markę w przypadku plików wykonywalnych na Androida w sekcji
.note.ABI-tag
(wcrtbegin_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 */ }
- Dodano łańcuch narzędzi GCC 4.6 (
- Inne poprawki błędów:
-
- Naprawiono obcięcie relokacji typu
mips-linux-gnu
, aby pasowało doR_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
itwo-libs
, dzięki czemu znajdujący się pod nim projekttests
może się skompilować.
- Naprawiono obcięcie relokacji typu
- Inne zmiany:
-
- Zmieniono lokalizacje plików binarnych:
- Przeniesiono
gdbserver
ztoolchain/<arch-os-ver>/prebuilt/gdbserver
doprebuilt/android-<arch>/gdbserver/gdbserver
- Nazwa prefiksu łańcucha narzędzi x86 została zmieniona z
i686-android-linux-
nai686-linux-android-
- Przeniesiono
sources/cxx-stl/gnu-libstdc++/include
ilib
dosources/cxx-stl/gnu-libstdc++/4.6
w przypadku skompilowania z GCC 4.6 lubsources/cxx-stl/gnu-libstdc++/4.4.3
po skompilowaniu z GCC 4.4.3. - Przeniesiono
libbfd.a
ilibintl.a
z:lib/
do:lib32/
.
- Przeniesiono
- 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 poleceniaclone
i używaniucheckout
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
ibuild-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 .
- Dodano narzędzie
- Usunięto nagłówek
if_dl.h
ze wszystkich platform i architektur. Opisane przez niego elementyAF_LINK
isockaddr_dl
są charakterystyczne dla BSD (czyli nie istnieją) w systemie Linux).
- Zmieniono lokalizacje plików binarnych:
Android NDK r8 (maj 2012 r.)
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ę polaAPP_ABI
w plikuApplication.mk
, aby utworzyć dla platform MIPS. Na przykład ten wiersz zawiera instrukcjendk-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 numerumake-standalone-toolchain.sh
. Zobaczdocs/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.
- 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
- Ważne poprawki błędów:
-
- Poprawiliśmy literówkę w implementacji GAbi++, w wyniku której wynikiem
dynamic_cast<D>(b)
obiektu klasy podstawowejb
do klasy derywowanejD
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ł kopiowanylibsupc++.*
- Poprawiliśmy literówkę w implementacji GAbi++, w wyniku której wynikiem
- Inne poprawki błędów:
-
- Naprawiono
ndk-build.cmd
, aby umożliwić prawidłowe działaniendk-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.
- Naprawiono
Android NDK r7c (kwiecień 2012 r.)
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
iexpf
).
- 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.
- 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
natrue
wAndroid.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
.
- Dodano obsługę niestandardowych katalogów wyjściowych w
- 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.
- Naprawiono implementację
Android NDK r7b (luty 2012 r.)
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. wersjibinutils
2.20.1). - Naprawiono
ndk-build
w 32-bitowym systemie Linux. Błąd pakietu powoduje umieszczenie na stronie wersji 64-bitowej. z pliku wykonywalnegoawk
w pakiecieprebuilt/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.
- Usunięto błąd nieskończonej pętli / przepełnienia stosu, który występował podczas próby
aby zadzwonić pod numer
- Naprawiono samodzielny łańcuch narzędzi, aby generował prawidłowe pliki binarne przy użyciu
-lstdc++
(tzn. połączenie w środowisku wykonawczym GNUlibstdc++
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
- Zaktualizowano:
- 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 wApplication.mk
. Zobaczdocs/APPLICATION-MK.html
, aby uzyskać więcej informacji.
- bezpośrednio w modułach włącz wyjątki lub RTTI, albo
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 przezps
, 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żytomemmove
zamiastmemcpy
- 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
iPOPCNT
). Zobaczdocs/CPU-FEATURES.html
, aby uzyskać więcej informacji. - Plik
docs/NDK-BUILD.html
został zaktualizowany, aby dodać wzmiankę o:NDK_APPLICATION_MK
zNDK_APP_APPLICATION_MK
, aby wybrać niestandardowy plikApplication.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
zamiastC:\Some\Dir
.
- Gdy prefiks dysku Cygwin nie miał nazwy
- 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.
- Jeśli Twoja aplikacja korzysta ze środowiska wykonawczego GNU
Android NDK r7 (listopad 2011 r.)
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 natywny interfejs API multimedialny oparty na technologii OpenMAX AL 1.0.1 Khronos Group.
standardowy. Nowe
- Dodano obsługę CCache. Aby przyśpieszyć przebudowę dużych, zdefiniuj
zmienną środowiskową
NDK_CCACHE
do funkcjiccache
(lub ścieżka do (plik binarnyccache
). 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
naall
, 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 WersjaApplication.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 zmianyApplication.mk file
Na przykład:ndk-build APP_ABI=all
- Dodano zmienną
LOCAL_CPP_FEATURES
w obiekcieAndroid.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. Zobaczdocs/ANDROID-MK.html
idocs/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, żeNDK_PROJECT_PATH
wskazuje konkretny katalog.
- Dodaliśmy oficjalne interfejsy API NDK na Androida 4.0 (poziom API 14), co dodaje:
natywne funkcje platformy:
- 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 skryptndk-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 zdefiniowanoAPP_MODULES
wApplication.mk
. Jeśli na przykład moduł najwyższego poziomufoo
importuje modułbar
, a następnie zarównolibfoo.so
, jak i Kodlibbar.so
jest kopiowany do miejsca instalacji. Wcześniej tylko Arkuszlibfoo.so
został skopiowany, chyba że wymieniono użytkownikabar
w OAPP_MODULES
. Jeśli wyraźnie zdefiniujesz atrybutAPP_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 bibliotekazoo
,libfoo.so
będzie teraz połączona z obiema bibliotekamilibbar.a
ilibzoo.a
.
- Zaimportowane biblioteki udostępnione są teraz domyślnie instalowane w instalacji docelowej
lokalizacja (
- 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 zaktualizowanymdocs/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ówfoo.cpp
ibar.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()
lubglGetProcAddress()
. 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
Android NDK r6b (sierpień 2011 r.)
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
isize_t
w: na systemy x86, gdy są one używane z samodzielnym łańcuchem narzędzi x86.
- Naprawiono kompilację, gdy użyto
Android NDK r6 (lipiec 2011 r.)
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 plikuApplication.mk
do utworzenia na platformach x86. Na przykład ten wiersz zawiera instrukcjendk-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 numerumake-standalone-toolchain.sh
. Zobaczdocs/STANDALONE-TOOLCHAIN.html
, aby uzyskać więcej informacji. - Nowe narzędzie
ndk-stack
umożliwia tłumaczenie zrzutów stosulogcat
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
.
- 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
- 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.
Android NDK r5c (czerwiec 2011 r.)
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 znakuhistory_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 definicjaNDK_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ówadb 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).
- Pliki obiektów są teraz zawsze połączone w kolejności, w jakiej się pojawiają
Android NDK r5b (styczeń 2011 r.)
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, zdefiniujNDK_USE_CYGPATH=1
w: aby ponownie używać środowiskacygpath -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
iIN6_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
.
Android NDK r5 (grudzień 2010 r.)
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
oraznative-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.
Android NDK r4b (czerwiec 2010 r.)
- 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 ABIarmeabi
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 bibliotekacpufeatures
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.
- Udostępnia uproszczony system kompilacji za pomocą nowej kompilacji
Android NDK r3 (marzec 2010 r.)
- 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.
Android NDK r2 (wrzesień 2009 r.)
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ą obiektuGLSurfaceView
.
Android NDK r1 (czerwiec 2009 r.)
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.