Przejdź do treści głównej

React Native 0.81 - wsparcie dla Androida 16, szybsze kompilacje iOS i więcej

· 9 minut czytania
Moti Zilberman
Moti Zilberman
Software Engineer @ Meta
Vitali Zaidman
Vitali Zaidman
Software Engineer @ Meta
Gabriel Donadel Dall'Agnol
Gabriel Donadel Dall'Agnol
Software Engineer @ Expo
Christian Falch
Christian Falch
Software Engineer @ Expo
Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Dziś z dumą ogłaszamy wydanie React Native 0.81!

Ta wersja wprowadza wsparcie dla Androida 16 (poziom API 36) oraz zawiera różnorodne ulepszenia stabilności i poprawki błędów, a także eksperymentalne wsparcie dla szybszych kompilacji iOS przy użyciu prekompilacji.

Najważniejsze zmiany

Najważniejsze zmiany

Wsparcie dla Androida 16

Aplikacje Android budowane w React Native 0.81 będą teraz domyślnie kierowane na Android 16 (poziom API 36).

Jak wcześniej zapowiedział Google, Android 16 wymaga, aby aplikacje były wyświetlane od krawędzi do krawędzi bez możliwości rezygnacji.

Aby to umożliwić, oznaczamy komponent <SafeAreaView> jako przestarzały jak wcześniej zapowiedziano na rzecz alternatyw. Zobacz poniżej, które zapewnią lepsze wsparcie dla wyświetlania od krawędzi do krawędzi.

Dodajemy również nową właściwość gradle edgeToEdgeEnabled, która pozwala wybrać, czy chcesz włączyć wyświetlanie od krawędzi do krawędzi na wszystkich obsługiwanych wersjach Androida poniżej 16.

Gest przewidywania cofania jest teraz domyślnie włączony dla aplikacji kierowanych na Android 16. API BackHandler powinno działać tak jak dotychczas w większości przypadków użycia. Jednak jeśli twoja aplikacja opiera się na własnym kodzie natywnym do obsługi cofania (takim jak nadpisywanie metody onBackPressed()), możesz potrzebować ręcznie zmigrować kod lub tymczasowo zrezygnować. Po aktualizacji przetestuj dokładnie nawigację wsteczną w swojej aplikacji.

Google oczekuje teraz, że aplikacje będą obsługiwać układy adaptacyjne na urządzeniach z dużymi ekranami, niezależnie od orientacji lub ograniczeń rozmiaru. Choć na razie możesz zrezygnować, zaleca się przetestowanie i zaktualizowanie aplikacji pod kątem responsywnego interfejsu na dużych ekranach przed wydaniem Androida 17.

Od 1 listopada 2025 wszystkie aplikacje przesyłane do Google Play muszą spełniać wymóg rozmiaru strony 16 KB dla binariów natywnych. Dotyczy to nowych aplikacji i aktualizacji kierowanych na urządzenia z Androidem 15+. React Native jest już zgodny z wymogiem 16KB rozmiaru strony. Upewnij się, że twój kod natywny i biblioteki stron trzecich również są zgodne.

Więcej szczegółów na temat zmian w Androidzie 16 i kroków migracji znajdziesz w tym poście w repozytorium discussions-and-proposals.

Oznaczenie SafeAreaView jako przestarzałego

The built-in <SafeAreaView> component was originally designed to provide limited, iOS-only support for keeping content in the “safe areas” of the screen (away from camera notches, rounded corners, etc). It is not compatible with edge-to-edge rendering on Android, and does not permit customization beyond padding. As a result, many apps have opted for more portable and flexible solutions, such as react-native-safe-area-context.

W React Native 0.81 starszy komponent <SafeAreaView> jest oznaczony jako przestarzały, a w React Native DevTools zobaczysz ostrzeżenia, jeśli twoja aplikacja go używa.

Zostanie usunięty w przyszłej wersji React Native. Zalecamy migrację do react-native-safe-area-context lub podobnej biblioteki, aby zapewnić aplikacji optymalny wygląd na wszystkich platformach.

Wsparcie dla JavaScriptCore utrzymywane przez społeczność

Jak zapowiedzieliśmy w zeszłym roku, wsparcie dla silnika JavaScriptCore (JSC) zostało przeniesione do pakietu utrzymywanego przez społeczność, który jest wydawany niezależnie od samego React Native. W wersji React Native 0.81 usuwamy wbudowaną wersję JavaScriptCore. Wszystkie aplikacje wymagające JavaScriptCore powinny teraz używać pakietu społecznościowego, aby móc przejść na wersję 0.81. Szczegóły instalacji znajdziesz w instrukcji.

Ta zmiana nie wpływa na aplikacje korzystające z Hermesa.

Eksperymentalne prekompilowane buildy dla iOS

React Native 0.81 wprowadza prekompilowane buildy dla iOS, skracając czasy kompilacji nawet 10-krotnie w projektach, gdzie React Native jest główną zależnością. To wynik współpracy między Expo i Meta, rozszerzający naszą wcześniejszą pracę dostarczoną w React Native 0.80.

Ta funkcja jest nadal eksperymentalna, ale mamy nadzieję włączyć ją dla wszystkich aplikacji w przyszłej wersji. Jeśli chcesz wypróbować prekompilowane buildy we własnej aplikacji, możesz je włączyć, określając następujące zmienne środowiskowe podczas uruchamiania pod install:

RCT_USE_RN_DEP=1 RCT_USE_PREBUILT_RNCORE=1 bundle exec pod install

Prosimy o przekazanie opinii w tej dyskusji na GitHubie.

Znamy już dwa ograniczenia i pracujemy nad ich usunięciem:

  • W prekompilowanych buildach nie możesz debugować i wchodzić krok po kroku w kod wewnętrzny React Native. Nadal możesz debugować własny kod natywny używając prekompilowanej wersji React Native.

  • Prebuildy nie są obsługiwane w Xcode 26 Beta, ponieważ IDE buduje wszystkie cele z włączonymi Swift explicit modules. Aby używać prekompilowanych buildów z Xcode 26, ustaw flagę SWIFT_ENABLE_EXPLICIT_MODULES na NO w swoim projekcie Xcode. Naprawimy to w nadchodzącym wydaniu patchowym.

Więcej informacji o tej funkcji znajdziesz w pełnym wpisie na blogu Expo: Prekompilowany React Native dla iOS: Szybsze buildy już w wersji 0.81.

Zmiany łamiące kompatybilność

Minimalna wersja Node.js podniesiona do 20

React Native wymaga teraz Node.js w wersji 20.19.4 (najnowsza wersja Maintenance LTS w chwili pisania) lub nowszej. Może być konieczne zaktualizowanie Node.js w twoim środowisku deweloperskim lub CI przy aktualizacji do React Native 0.81.

Minimalna wersja Xcode podniesiona do 16.1

React Native wymaga teraz Xcode 16.1 lub nowszego do budowania projektów iOS. Może być konieczna aktualizacja Xcode w twoim środowisku deweloperskim lub CI przy aktualizacji do React Native 0.81.

Metro: Lepsze wsparcie zaawansowanej konfiguracji w projektach Community CLI

Metro now respects the resolveRequest and getModulesRunBeforeMainModule options if specified in the metro.config.js file of a React Native Community CLI project. Previously, setting them would have no effect. If you have custom values for these options in your metro.config.js file, you may need to delete them in order to restore the previous behavior.

Ulepszone raportowanie nieprzechwyconych błędów JavaScript

React Native DevTools teraz wyświetla oryginalną wiadomość i ślad stosu nieprzechwyconych błędów JavaScript, a także ich przyczynę (jeśli istnieje) oraz Stos właściciela dla błędów zgłoszonych przez komponenty. To ułatwia debugowanie i naprawę błędów.

Przykładowy błąd zawierający przyczynę i Stos właściciela

Jeśli logujesz błędy JavaScript do swojego backendu lub zewnętrznego serwisu raportowania błędów, ta zmiana może wpłynąć na logi po aktualizacji do React Native 0.81 (np. możesz zobaczyć więcej zgłoszonych błędów, które wcześniej były raportowane przez console.error). Może być konieczna odpowiednia aktualizacja logiki backendu.

RN_SERIALIZABLE_STATE i flagi C++

W tej wersji React Native wprowadziliśmy nowe makro RN_SERIALIZABLE_STATE obsługujące serializowalny stan komponentów w Nowej Architekturze.

Jeśli jesteś autorem biblioteki i posiadasz własny plik CMakeLists.txt, musisz określić to makro w swoim pliku CMakeLists.txt – w przeciwnym razie kompilacja kodu C++ może zakończyć się niepowodzeniem.

Wprowadzamy nową funkcję CMake target_compile_reactnative_options, która automatycznie konfiguruje to makro i wszystkie niezbędne flagi C++. Możesz ją wywołać w pliku CMakeLists w następujący sposób:

target_compile_reactnative_options(myLibraryName PRIVATE)

Przykład konfiguracji tego makra możesz zobaczyć w implementacji react-native-screens.

Zmiana dotyczy tylko bardziej zaawansowanych i złożonych bibliotek. Jeśli twoja biblioteka używa codegen i nie posiada własnego pliku CMake, nie wpłynie to na nią.

Inne zmiany łamiące kompatybilność

Poniższa lista zawiera inne zmiany łamiące kompatybilność, które mogą mieć niewielki wpływ na kod produktu i warto je odnotować:

Android

  • Uczyniliśmy kilka klas wewnętrznymi. Nie są częścią publicznego API i nie powinny być używane. Powiadomiliśmy lub przesłaliśmy poprawki do dotkniętych bibliotek:

    • com.facebook.react.fabric.mounting.MountingManager
    • com.facebook.react.views.text.TextLayoutManager
  • Przenieśliśmy właściwość natywną textAlignVertical z TextAttribute.h do ParagraphAttribute.h

    • Właściwość textAlignVertical dotyczy tylko najbardziej zewnętrznego widoku tekstu (widoku akapitu). Mimo to istniała we właściwościach atrybutów tekstu. To przeniesienie lepiej odzwierciedla ograniczenia platformy.
    • Zmiana nie wpływa na interfejs JS komponentu <Text>.
    • Dotyczy tylko implementacji komponentów Fabric współdziałających z API tekstu C++.
    • W razie potrzeby zastąp TextAttributes.h przez ParagraphAttribute.h w kodzie.

Pełną listę zmian łamiących kompatybilność znajdziesz w dzienniku zmian wersji 0.81.

Podziękowania

React Native 0.81 zawiera ponad 1110 commitów od 110 współtwórców. Dziękujemy za waszą ciężką pracę!

Specjalne podziękowania kierujemy do członków społeczności, którzy wnieśli znaczący wkład w tę wersję:

Aktualizacja do wersji 0.81

Do sprawdzenia zmian w kodzie między wersjami React Native w istniejących projektach, oprócz dokumentacji aktualizacji, użyj React Native Upgrade Helper.

Aby utworzyć nowy projekt:

npx @react-native-community/cli@latest init MyProject --version latest

Jeśli używasz Expo, React Native 0.81 będzie obsługiwany w nadchodzącej wersji Expo SDK 54 jako domyślna wersja React Native.

informacja

0.81 to obecnie najnowsza stabilna wersja React Native, a wersja 0.78.x przechodzi do stanu nieobsługiwanego. Więcej informacji znajdziesz w polityce wsparcia React Native.