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 utworzyć na urządzeniu osobne miejsce, w którym mogą trzymać poufne aplikacje z dala od siebie; pod kątem dodatkowej warstwy uwierzytelniania. Ponieważ aplikacje w w przestrzeni prywatnej jest ograniczona widoczność, niektóre typy aplikacji muszą dodatkowe czynności, które pozwalają wyświetlać aplikacje i wchodzić z nimi w interakcje w prywatnych usługach użytkownika kosmosu.

Wszystkie aplikacje

Ponieważ aplikacje w przestrzeni prywatnej są przechowywane w osobnym profilu użytkownika, podobnie jak w profilach służbowych, aplikacje nie powinny zakładać, że żadna z nich ich kopie aplikacji, które nie znajdują się w profilu głównym, znajdują się w profilu służbowym. Jeśli aplikacja ma logikę związaną z aplikacjami w profilu służbowym, które przyjmują to musisz dostosować tę logikę.

Medycyna

Gdy użytkownik zablokuje obszar prywatny, wszystkie aplikacje w przestrzeni prywatnej zostają zatrzymane i nie mogą wykonywać działań na pierwszym planie ani w tle, takich jak wyświetlania powiadomień. Takie działanie może mieć krytyczny wpływ na korzystanie funkcji aplikacji medycznych zainstalowanych w przestrzeni prywatnej.

Interfejs konfiguracji przestrzeni prywatnej ostrzega użytkowników, że przestrzeń prywatna nie jest odpowiednie dla aplikacji, które muszą działać na pierwszym planie lub w tle. aktywności, na przykład powiadomień z aplikacji medycznych. Pamiętaj jednak: aplikacje nie są w stanie określić, czy są używane w przestrzeni prywatnej więc nie będzie można wyświetlić ostrzeżenia użytkownika w tym przypadku.

Dlatego, jeśli tworzysz aplikację medyczną, sprawdź, jak ta funkcja może wpływać na aplikację i podejmować odpowiednie działania – np. uświadomić użytkownikom, zainstalować aplikację w przestrzeni prywatnej, aby nie zakłócać działania ważnej aplikacji funkcje zabezpieczeń.

Menu z aplikacjami

Jeśli tworzysz program uruchamiający, musisz wykonać te czynności przed aplikacjami w przestrzeń prywatna będzie widoczna:

  1. musi być ustawiona jako domyślny program uruchamiający na urządzeniu, jest użytkownikiem ROLE_HOME.
  2. Aplikacja musi zadeklarować uprawnienie ACCESS_HIDDEN_PROFILES w pliku manifestu aplikacji.

Aplikacje z aplikacjami deklarującymi uprawnienia ACCESS_HIDDEN_PROFILES muszą obsługiwać w tych przypadkach użycia przestrzeni prywatnej:

  1. Aplikacja musi mieć osobny kontener programu uruchamiającego dla aplikacji zainstalowanych w w przestrzeni prywatnej. Użyj metody getLauncherUserInfo(), aby określają, jaki typ profilu użytkownika 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żywaj metodę requestQuietModeEnabled() do zablokowania (przez przekroczenie wartości true) lub odblokowanie (przez przekazanie danych false) przestrzeni prywatnej.
  4. Po zablokowaniu żadna aplikacja w kontenerze obszaru prywatnego nie powinna być widoczna ani wykrywalne za pomocą takich mechanizmów jak wyszukiwarka. Aplikacja powinna zarejestrować odbiornika ACTION_PROFILE_AVAILABLE i ACTION_PROFILE_UNAVAILABLE transmituje i aktualizuje Interfejs w aplikacji po zablokowaniu lub odblokowaniu obszaru prywatnego. zmian w kontenerze. Obie te transmisje obejmują EXTRA_USER, za pomocą którego aplikacja może określać 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 obejmuje opcję „Zainstaluj aplikacje” uruchamiający niejawny zamiar instalowania aplikacji w przestrzeni prywatnej użytkownika. Aby aplikacja dla tej intencji ogólnej, zadeklaruj <intent-filter> w pliku manifestu aplikacji z <category> wartością 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ę.

Aby sprawdzić, czy dotyczy to Twojej aplikacji, wyszukaj w jej kodzie odniesienia do NotoColorEmojiLegacy.ttf.

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.