Zmiany w działaniu: wszystkie aplikacje

Platforma Android 15 obejmuje zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu mają zastosowanie do wszystkich aplikacji działających na Androidzie 15: bez względu na wartość targetSdkVersion. Przetestuj aplikację, a potem wprowadź w niej zmiany w razie potrzeby, aby je prawidłowo obsługiwać.

Przejrzyj też listę zmian w działaniu, które wpływają tylko na aplikacje kierowanych na Androida 15.

Główna funkcja

Android 15 zmienia lub rozszerza różne podstawowe funkcje systemu Android.

Zmiany stanu zatrzymania pakietu

Intencją stanu pakietu FLAG_STOPPED (który użytkownicy mogą korzystać z kompilacji AOSP przez przytrzymanie ikony aplikacji i wybranie „Wymuś zatrzymanie”) zawsze polegał na utrzymywaniu aplikacji w tym stanie do momentu, gdy użytkownik wyraźnie usunie ją z tego stanu, bezpośrednio ją uruchamiając lub pośrednio wchodząc z nią w interakcję (np. za pomocą arkusza udostępniania lub widżetu, wybierając ją jako animowaną tapetę itp.). W Androidzie 15 aktualizujemy działanie systemu, aby dostosować je do zamierzonego działania. Aplikacje można usuwać ze stanu zatrzymania tylko poprzez bezpośrednie lub pośrednie działania użytkownika.

Aby umożliwić działanie zamierzonego działania, oprócz dotychczasowych ograniczeń system anuluje też wszystkie intencje oczekujące, gdy aplikacja zostanie zatrzymana na urządzeniu z Androidem 15. Gdy działanie użytkownika spowoduje usunięcie aplikacji ze stanu zatrzymania, transmisja ACTION_BOOT_COMPLETED jest dostarczana do aplikacji, co umożliwia ponowne zarejestrowanie wszystkich oczekujących intencji.

Możesz wywołać nową metodę ApplicationStartInfo.wasForceStopped(), aby sprawdzić, czy aplikacja została zatrzymana.

Obsługa rozmiarów stron o rozmiarze 16 KB.

Do tej pory Android obsługiwał tylko strony o rozmiarze 4 KB, co zapewniało optymalną wydajność pamięci systemowej pod kątem średniej ilości pamięci dostępnej zwykle na urządzeniach z Androidem. Począwszy od Androida 15, Android obsługuje urządzenia, na których rozmiar strony wynosi 16 KB (16 KB).

Producenci wciąż tworzą urządzenia z większą ilością pamięci RAM, dlatego wiele z nich zostanie prawdopodobnie skonfigurowanych tak, aby rozmiar strony wynosił 16 KB (i w miarę potrzeby można zwiększyć ich wydajność). Dodanie obsługi urządzeń 16 KB umożliwia działanie aplikacji na tych urządzeniach i ułatwia jej poprawę wydajności. Aby Ci w tym pomóc, przygotowaliśmy wskazówki dotyczące sprawdzania, czy dotyczy to Twojej aplikacji, odtwarzania aplikacji (w stosownych przypadkach) oraz przetestowania aplikacji w środowisku o rozmiarze 16 KB przy użyciu emulatorów i urządzeń fizycznych.

Korzyści i wzrost skuteczności

Urządzenia o rozmiarze stron o rozmiarze 16 KB zużywają średnio trochę więcej pamięci, ale poprawiają też wydajność zarówno systemu, jak i aplikacji:

  • Krótszy czas uruchamiania aplikacji, gdy system wykorzystuje pamięć: średnio o 3,16% krótszy niż w przypadku niektórych testowanych aplikacji
  • Mniejsze wykorzystanie energii podczas uruchamiania aplikacji: średnio o 4,56%
  • Szybsze uruchamianie kamery: średnio o 4,48% szybsze uruchomienia z pamięci i o 6,60% szybsze uruchomienia „na zimno”
  • Skrócony czas uruchamiania systemu: średnio o 1,5% (około 0,8 sekundy).

Te ulepszenia są oparte na naszych wstępnych testach, więc wyniki na rzeczywistych urządzeniach będą się prawdopodobnie różnić. W trakcie testów będziemy przeprowadzać dodatkową analizę potencjalnych korzyści związanych z aplikacjami.

Sprawdź, czy ta zmiana dotyczy Twojej aplikacji

Jeśli Twoja aplikacja korzysta z kodu natywnego, musisz odbudować ją na urządzeniach z obsługą 16 KB. Jeśli nie masz pewności, czy Twoja aplikacja używa kodu natywnego, możesz skorzystać z Analizatora plików APK, by sprawdzić, czy w aplikacji znajduje się kod natywny.

Jeśli Twoja aplikacja używa tylko kodu napisanego w języku Java lub w Kotlin, w tym wszystkich bibliotek i pakietów SDK, obsługuje już urządzenia z 16 KB. Zalecamy jednak przetestowanie aplikacji w środowisku 16 KB, aby sprawdzić, czy w jej działaniu nie występują nieoczekiwane regresje.

Zmiany wymagane w przypadku niektórych aplikacji obsługujących przestrzeń prywatną

Przestrzeń prywatna to nowa funkcja Androida 15, która umożliwia użytkownikom utworzenie na urządzeniu osobnego obszaru, w którym mogą chronić poufne aplikacje przed niepowołanymi osobami, w ramach dodatkowej warstwy uwierzytelniania. Aplikacje w przestrzeni prywatnej mają ograniczoną widoczność, dlatego niektóre ich typy muszą podjąć dodatkowe działania, aby wyświetlać aplikacje w przestrzeni prywatnym użytkownika i wchodzić z nimi w interakcję.

Wszystkie aplikacje

Aplikacje w przestrzeni prywatnej są przechowywane w osobnym profilu użytkownika, podobnie jak w przypadku profili służbowych, dlatego nie powinny zakładać, że jakiekolwiek zainstalowane kopie aplikacji, które nie znajdują się w profilu głównym, znajdują się w profilu służbowym. Jeśli Twoja aplikacja ma logikę związaną z aplikacjami w profilu służbowym, które stosują takie założenia, musisz dostosować tę logikę.

Menu z aplikacjami

Jeśli tworzysz aplikację uruchamiającą, musisz wykonać te czynności, aby aplikacje w obszarze prywatnym były widoczne:

  1. Musisz przypisać aplikację jako domyślną aplikację uruchamiającą na urządzeniu – czyli mieć rolę ROLE_HOME.
  2. Aplikacja musi zadeklarować normalne uprawnienie ACCESS_HIDDEN_PROFILES w pliku manifestu aplikacji.

Aplikacje z Menu z aplikacjami, które deklarują uprawnienie ACCESS_HIDDEN_PROFILES, muszą obsługiwać te przypadki użycia przestrzeni prywatnej:

  1. Aplikacja musi mieć osobny kontener programu uruchamiającego na potrzeby aplikacji zainstalowanych w przestrzeni prywatnej. Metoda getLauncherUserInfo() pozwala określić typ profilu użytkownika, który jest obsługiwany.
  2. Użytkownik musi mieć możliwość ukrywania i wyświetlania kontenera przestrzeni prywatnej.
  3. Użytkownik musi mieć możliwość zablokowania i odblokowania kontenera przestrzeni prywatnej. Użyj metody requestQuietModeEnabled(), aby zablokować (przebiegając true) lub odblokować (przekazując false) przestrzeń prywatną.
  4. Po zablokowaniu żadne aplikacje w kontenerze przestrzeni prywatnej nie powinny być widoczne ani wykrywalne za pomocą takich mechanizmów jak wyszukiwanie. Aplikacja powinna zarejestrować odbiornik na potrzeby transmisji ACTION_PROFILE_AVAILABLE i ACTION_PROFILE_UNAVAILABLE oraz aktualizować interfejs w aplikacji w przypadku zmiany zablokowanego lub odblokowanego stanu kontenera przestrzeni prywatnej. Obie te komunikaty zawierają tag EXTRA_USER, którego aplikacja może używać w odniesieniu do użytkownika profilu prywatnego.

    Możesz też użyć metody isQuietModeEnabled(), aby sprawdzić, czy profil w przestrzeni prywatnej jest zablokowany.

Aplikacje ze sklepu z aplikacjami

Przestrzeń prywatna zawiera przycisk „Zainstaluj aplikacje”, który powoduje uruchomienie ogólnej intencji instalacji aplikacji w przestrzeni prywatnej użytkownika. Aby Twoja aplikacja otrzymała tę intencję niejawną, zadeklaruj <intent-filter> w pliku manifestu aplikacji z wartością <category> równą CATEGORY_APP_MARKET.

Usunięto czcionkę emotikonów w formacie PNG

Starszy plik czcionki emotikonów w formacie PNG (NotoColorEmojiLegacy.ttf) został został usunięty, pozostawiając tylko plik wektorowy. Począwszy od Androida 13 (API poziomu 33), plik czcionki emotikonów używany przez systemowy mechanizm renderowania emotikonów zmienił się z PNG z plikami w formacie wektorowym. Zachowany system starsze pliki czcionek w Androidzie 13 i 14 ze względów zgodności. aplikacje z własnymi mechanizmami renderowania czcionek mogą nadal używać starszego pliku czcionek dopóki nie uda mu się przejść na wyższą wersję.

Aplikację można dostosować na różne sposoby:

  • Wykorzystaj interfejsy API platformy do renderowania tekstu. Możesz renderować tekst na bazie bitmapy Canvas i w razie potrzeby użyj ich do uzyskania nieprzetworzonego obrazu.
  • Dodaj obsługę czcionek COLRv1 do swojej aplikacji. Biblioteka open source FreeType obsługuje COLRv1 w wersji 2.13.0 oraz wyższe.
  • W ostateczności możesz połączyć starsze pliki czcionek emotikonów (NotoColorEmoji.ttf) do pliku APK, ale w takim przypadku aplikacja nie będzie miała najnowszych aktualizacji emotikonów. Dla: więcej informacji znajdziesz w projekcie Noto emoji GitHub .

Zwiększono minimalną docelową wersję pakietu SDK z 23 do 24

Android 15 bazuje na zmianach wprowadzonych w Androidzie 14 i jeszcze bardziej rozszerza te zabezpieczenia. W Androidzie 15 nie można instalować aplikacji z wartością targetSdkVersion mniejszą niż 24. Wymóg zgodności aplikacji z nowoczesnymi poziomami interfejsów API pomaga zapewnić lepsze zabezpieczenia i prywatność.

Złośliwe oprogramowanie często jest kierowane na niższe poziomy interfejsów API, aby ominąć zabezpieczenia i ochronę prywatności, które zostały wprowadzone w nowszych wersjach Androida. Na przykład w niektórych aplikacjach zawierających złośliwe oprogramowanie parametr targetSdkVersion ma wartość 22, co pozwala uniknąć podlegania modelowi uprawnień czasu działania wprowadzonemu w Androidzie 6.0 Marshmallow (poziom interfejsu API 23) w 2015 r. Ta zmiana w Androidzie 15 utrudnia złośliwym oprogramowaniem o ulepszenie zabezpieczeń i prywatności. Próba zainstalowania aplikacji kierowanej na interfejs API niższego poziomu zakończy się niepowodzeniem instalacji, a w narzędziu Logcat pojawi się komunikat podobny do tego:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

Na urządzeniach z Androidem 15 wszystkie aplikacje z wartością targetSdkVersion mniejszą niż 24 pozostaną zainstalowane.

Jeśli musisz przetestować aplikację kierowaną na starszy poziom interfejsu API, użyj tego polecenia ADB:

adb install --bypass-low-target-sdk-block FILENAME.apk

Aparat i multimedia

Android 15 wprowadza te zmiany w działaniu aparatu i multimediów u wszystkich użytkowników aplikacji.

Bezpośrednie i bez załadowania unieważniają teraz wcześniej otwarte ścieżki audio, które były bezpośrednio otwarte lub nie były wczytywane, po osiągnięciu limitów zasobów

Przed Androidem 15, jeśli aplikacja zażądała bezpośredniego odtwarzania dźwięku lub odciążenia go, gdy inna aplikacja odtwarzała dźwięk, a osiągnięto limity zasobów, aplikacja nie otwierała nowego AudioTrack.

Począwszy od Androida 15, gdy aplikacja prosi o odtwarzanie bezpośrednie lub odciążanie i osiągnięte zostaną limity zasobów, system unieważnia aktualnie otwarte obiekty AudioTrack, co uniemożliwia realizację nowego żądania śledzenia.

Ścieżki audio są zwykle otwierane w celu odtwarzania skompresowanych formatów audio. Typowym przypadkiem użycia bezpośredniego odtwarzania dźwięku jest przesyłanie dźwięku zakodowanego przez HDMI na telewizor. Ścieżki audio są zwykle używane do odtwarzania skompresowanego dźwięku na urządzeniu mobilnym ze sprzętową akceleracją DSP.

Wygoda użytkowania i interfejs systemu

W Androidzie 15 wprowadziliśmy kilka zmian, które mają zapewnić intuicyjną obsługę.

Animacje przewidywanego przejścia wstecz włączone w aplikacjach, które wyraziły zgodę

W Androidzie 15 opcja dla programistów dotycząca prognozowanych animacji wstecznych została usunięta. Animacje systemowe, np. powrót do ekranu głównego, wykonywanie różnych zadań czy wielozadaniowość, są teraz widoczne w aplikacjach, które włączyły gest przewidywanego przejścia wstecz w całości lub na poziomie aktywności. Jeśli dotyczy to Twojej aplikacji, wykonaj te czynności:

  • Aby korzystać z przewidywanego gestu wstecznego, upewnij się, że aplikacja została prawidłowo przeniesiona.
  • Upewnij się, że przejścia fragmentów działają z prognozowaniem poprzedniej nawigacji.
  • Zrezygnuj z przejścia animacji i platformy na rzecz animacji i przejścia androidx.
  • Przejdź z powrotem na stosy wsteczne, o których FragmentManager nie wie. Użyj zamiast nich stosów zwrotnych zarządzanych przez FragmentManager lub komponent Nawigacja.

Widżety są wyłączone, gdy użytkownik wymusza zatrzymanie aplikacji

Jeśli użytkownik wymusi zatrzymanie aplikacji na urządzeniu z Androidem 15, system tymczasowo wyłączy wszystkie widżety aplikacji. Widżety są wyszarzone i użytkownik nie może z nich korzystać. Dzieje się tak dlatego, że począwszy od Androida 15, gdy zostało wymuszone zatrzymanie aplikacji, system anuluje wszystkie oczekujące intencje.

System włączy je ponownie, gdy użytkownik uruchomi aplikację następnym razem.

Więcej informacji znajdziesz w artykule Zmiany w stanie zatrzymania pakietu.

Wycofania

W każdej wersji określone interfejsy API Androida mogą stać się przestarzałe lub wymagać refaktoryzowanych, aby zapewnić lepsze wrażenia programistów lub zapewnić obsługę nowej platformy; funkcje zabezpieczeń. W takich przypadkach oficjalnie wycofujemy przestarzałe interfejsy API, kierować programistów do alternatywnych interfejsów API.

Wycofanie oznacza, że zakończyliśmy oficjalną obsługę interfejsów API, ale będą nadal dostępne dla deweloperów. Aby dowiedzieć się więcej o godnych uwagi funkcji wycofanych w tej wersji Androida, przeczytaj stronę wycofywania.