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, niezależnie od targetSdkVersion. Przetestuj aplikację i w razie potrzeby wprowadź w niej zmiany, aby zapewnić prawidłowe działanie aplikacji.

Zapoznaj się też z listą zmian w działaniu, które wpływają tylko na aplikacje kierowane 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ą

Obszar prywatny 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 nieupoważnionymi aplikacjami dzięki dodatkowej warstwie uwierzytelniania. Aplikacje w obszarze prywatnym mają ograniczoną widoczność, dlatego niektóre typy aplikacji muszą wykonać dodatkowe czynności, aby móc wyświetlać aplikacje w przestrzeni prywatnej użytkownika i wchodzić z nimi w interakcje.

Wszystkie aplikacje

Aplikacje w obszarze prywatnym są przechowywane w osobnym profilu użytkownika (podobnie jak w przypadku profili służbowych). Aplikacje nie powinny zakładać, że wszystkie zainstalowane kopie ich aplikacji, których nie ma w profilu głównym, znajdują się w profilu służbowym. Jeśli Twoja aplikacja obsługuje logikę związaną z aplikacjami z profilu służbowym, które przyjęły takie założenia, musisz dostosować tę logikę.

Launchery

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

  1. Aplikacja musi być przypisana jako domyślna aplikacja uruchamiająca na urządzeniu, czyli mieć przypisaną rolę ROLE_HOME.
  2. Aplikacja musi zadeklarować normalne uprawnienia ACCESS_HIDDEN_PROFILES w pliku manifestu.

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

  1. Aplikacja musi mieć osobny kontener programu uruchamiającego dla aplikacji zainstalowanych w obszarze prywatnym.
  2. Użytkownik musi mieć możliwość ukrycia i wyświetlenia kontenera obszaru prywatnego.
  3. Użytkownik musi mieć możliwość zablokowania i odblokowania kontenera obszaru prywatnego.
  4. Gdy to zrobisz, żadne aplikacje w kontenerze obszaru prywatnego nie powinny być widoczne ani możliwe do znalezienia za pomocą takich mechanizmów jak wyszukiwanie.

Aplikacje ze sklepu z aplikacjami

Obszar prywatny zawiera przycisk „Zainstaluj aplikacje”, który uruchamia niejawną chęć instalowania aplikacji w obszarze prywatnym użytkownika. Aby aplikacja otrzymywała tę intencję niejawną, zadeklaruj w jej pliku manifestu <intent-filter> z wartością <category> o wartości CATEGORY_APP_MARKET.

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

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

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

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

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

Aparat i multimedia

Android 15 wprowadza te zmiany w działaniu aparatu i multimediów we wszystkich aplikacjach.

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 wprowadzono kilka zmian, które mają zapewnić użytkownikom bardziej spójne i intuicyjne wrażenia.

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ć refaktoryzacji, aby zapewnić lepsze wrażenia programistów lub obsługiwać nowe funkcje platform. W takich przypadkach oficjalnie wycofujemy przestarzałe interfejsy API i kierujemy deweloperów do alternatywnych interfejsów API, aby mogli zamiast nich korzystać.

Wycofanie oznacza, że zakończyliśmy oficjalną obsługę tych interfejsów API, ale nadal będą one dostępne dla deweloperów. Więcej informacji o ważnych wycofaniu tej wersji Androida znajdziesz na stronie wycofywania.