Zmiany w działaniu: wszystkie aplikacje

Platforma Android 15 zawiera zmiany zachowania, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany zachowania dotyczą wszystkich aplikacji działających na Androidzie 15, niezależnie od targetSdkVersion. Należy przetestować aplikację, a następnie w razie potrzeby zmodyfikować ją, aby odpowiednio obsługiwała te funkcje.

Sprawdź też listę zmian zachowania, które mają wpływ tylko na aplikacje kierowane na Androida 15.

Główna funkcja

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

Zmiany w stanie 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 stron o rozmiarze 16 KB

W przeszłości Android obsługiwał jedynie strony o rozmiarze 4 KB, które obsługują zoptymalizowana wydajność pamięci systemowej dla średniej ilości pamięci Urządzenia z Androidem zwykle mają Począwszy od Androida 15, AOSP obsługuje urządzenia skonfigurowane pod kątem używania strony o rozmiarze 16 KB (16 KB). urządzenia). Jeśli aplikacja korzysta z jakichkolwiek bibliotek NDK, bezpośrednio lub pośrednio za pomocą pakietu SDK, musisz ponownie skompilować aplikację, na urządzeniach o rozmiarze 16 KB.

W miarę jak producenci tworzą urządzenia, na których jest coraz więcej pamięci fizycznej (RAM) wiele z tych urządzeń będzie miało rozmiar 16 KB, w celu optymalizacji wydajności urządzenia. Dodaję obsługa urządzeń o rozmiarze strony 16 KB umożliwia urządzeń i pomaga aplikacji czerpać korzyści z powiązanej wydajności wiele ulepszeń. Bez ponownej kompilacji aplikacje mogą nie działać na urządzeniach o rozmiarze 16 KB podczas produkcji w kolejnych wersjach Androida.

Aby pomóc Ci w obsłudze aplikacji, przygotowaliśmy wskazówki, jak sprawdzić, jeśli ma to wpływ na Twoją aplikację, jak stworzyć aplikację ponownie (w stosownych przypadkach) i jak przetestować ją środowisko o wielkości 16 KB z emulatorami (w tym Android 15). obrazów systemu dla emulatora Androida).

Korzyści i wzrost skuteczności

Urządzenia skonfigurowane z użyciem stron o rozmiarze 16 KB zużywają średnio nieco więcej pamięci, ale zyskują też różne ulepszenia wydajności zarówno systemu, jak i aplikacji:

  • Krótszy czas uruchamiania aplikacji, gdy system jest pod presją pamięci: średnio o 3,16% krótszy, a w przypadku niektórych testowanych aplikacji o znacznie więcej (do 30%).
  • Zmniejszone zużycie energii podczas uruchamiania aplikacji: średnio o 4,56%
  • Szybsze uruchamianie aparatu: średnio o 4,48% szybsze uruchomienia z pamięci i o 6,60% szybsze uruchomienia „na zimno”
  • Skrócony czas uruchamiania systemu: skrócenie o 8% (około 950 milisekund)

Te ulepszenia bazują na naszych wstępnych testach. Wyniki na rzeczywistych urządzeniach mogą się różnić. W miarę kontynuowania testów będziemy przeprowadzać dodatkową analizę potencjalnych zysków w przypadku aplikacji.

Sprawdź, czy ta zmiana dotyczy Twojej aplikacji

Jeśli aplikacja korzysta z kodu natywnego, musisz ponownie ją skompilować, aby obsługiwała urządzenia o pojemności 16 KB. Jeśli nie masz pewności, czy Twoja aplikacja używa kodu natywnego, użyj narzędzia APK Analyzer, aby sprawdzić, czy jest on obecny, a potem sprawdź wyrównanie segmentów ELF dla wszystkich znalezionych bibliotek współdzielonych.

Jeśli Twoja aplikacja używa tylko kodu napisanego w języku programowania Java lub Kotlin (w tym wszystkich bibliotekach i pakietach SDK), to jest już obsługiwana na urządzeniach o pojemności 16 KB. Zalecamy jednak przetestowanie aplikacji w środowisku 16 KB, aby sprawdzić, czy nie występują nieoczekiwane regresje w zachowaniu aplikacji.

Wymagane zmiany w niektórych aplikacjach, aby obsługiwały 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 opartą na pliku 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ększenie minimalnej docelowej wersji pakietu SDK z 23 na 24

Android 15 opiera się na zmian wprowadzonych w Androidzie 14 i rozszerzając te i zwiększaj bezpieczeństwo. Na Androidzie 15 aplikacje z Nie można zainstalować wersji targetSdkVersion o wartości niższej niż 24. Wymaganie, aby aplikacje spełniały wymagania dotyczące nowoczesnych poziomów interfejsu API, pomaga zapewnić bezpieczeństwo i prywatność.

Złośliwe oprogramowanie często trafia do interfejsów API na niższych poziomach, aby ominąć bezpieczeństwo i prywatność zabezpieczeń wprowadzonych w wyższych wersjach Androida. Przykład: niektóre złośliwe aplikacje używają tych zabezpieczeń: targetSdkVersion z 22, model uprawnień czasu działania wprowadzony w 2015 r. przez Androida 6.0 Marshmallow (API) poziom 23). Ta zmiana w Androidzie 15 utrudnia złośliwemu unikaniu zabezpieczeń i lepszą ochronę prywatności. Próba zainstalowania aplikacji kierowanej na niższy interfejs API spowoduje błąd instalacji i pojawi się komunikat podobny do tego: widoczne w dzienniku Logcat:

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

na urządzeniach z Androidem 15 i z Androidem w wersji starszej niż targetSdkVersion. pozostaną zainstalowane niż 24.

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

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

Prywatność i bezpieczeństwo

Android 15 wprowadza solidne środki zapobiegające oszustwom z użyciem jednorazowego hasła (OTP) oraz chroniące poufne treści użytkownika. Skupiono się na wzmocnieniu ochrony usługi Notification Listener i funkcji udostępniania ekranu. Najważniejsze ulepszenia obejmują ukrywanie kodów OTP w powiadomieniach dostępnych dla niezaufanych aplikacji, ukrywanie powiadomień podczas udostępniania ekranu oraz zabezpieczanie działań w aplikacji, gdy są publikowane kody OTP. Te zmiany mają na celu ochronę poufnych treści użytkownika przed nieupoważnionymi osobami.

Deweloperzy muszą pamiętać o tych kwestiach, aby zapewnić zgodność swoich aplikacji ze zmianami w Androidzie 15:

Usuwanie hasła jednorazowego

Android zablokuje niesprawdzone aplikacje, które implementują NotificationListenerService, przed odczytem nieocenzurowanych treści z powiadomień, w których wykryto kod OTP. Zaufane aplikacje, takie jak powiązania z menedżerem urządzeń towarzyszących, są zwolnione z tych ograniczeń.

Ochrona udostępniania ekranu

  • Treść powiadomienia jest ukryta podczas sesji udostępniania ekranu, aby chronić prywatność użytkownika. Jeśli aplikacja implementuje setPublicVersion(), Android wyświetla publiczną wersję powiadomienia, która zastępuje powiadomienie w niebezpiecznych kontekstach. W przeciwnym razie treść powiadomienia jest zaciemniona bez żadnego dodatkowego kontekstu.
  • Treści poufne, takie jak hasło, są ukryte przed widzami zdalnymi, aby zapobiec ujawnieniu poufnych informacji użytkownika.
  • Aktywności z aplikacji, które wysyłają powiadomienia podczas udostępniania ekranu, gdy wykryto kod OTP, będą ukryte. Treści aplikacji są niewidoczne dla widza zdalnego podczas uruchamiania.
  • Oprócz automatycznego rozpoznawania poufnych pól przez Androida deweloperzy mogą ręcznie oznaczać części aplikacji jako poufne, używając setContentSensitivity. Te elementy są ukryte przed widzami podczas udostępniania ekranu.
  • Deweloperzy mogą włączyć opcję Wyłącz zabezpieczenia przed udostępnianiem ekranu w sekcji Opcje dla deweloperów, aby wyłączyć zabezpieczenia przed udostępnianiem ekranu na potrzeby demonstracji lub testów. Domyślny systemowy rejestrator ekranu nie jest objęty tymi zmianami, ponieważ nagrania pozostają na urządzeniu.

Aparat i multimedia

W Androidzie 15 wprowadzono następujące zmiany w zachowaniu aparatu i multimediów we wszystkich aplikacjach.

Odtwarzanie dźwięku z płyty i z płyty z przesłanymi danymi powoduje unieważnienie wcześniej otwartych ścieżek audio z płyty lub z przesłanymi danymi po osiągnięciu limitu 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.

Wrażenia użytkownika i interfejs systemu

Android 15 zawiera kilka zmian, które mają na celu zapewnienie bardziej spójnego i intuicyjnego interfejsu.

Animacje przewidywanego przejścia wstecz są włączone w przypadku aplikacji, które zostały dodane do listy.

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łączane, gdy użytkownik wymuszająco zatrzyma aplikację

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.

Element sterujący na pasku stanu informuje użytkowników o udostępnianiu ekranu, przesyłaniu i nagrywaniu

Korzyści i wzrost wydajności

Sprawdź, czy zmiana wpłynie na Twoją aplikację

Wycofanie

Wraz z każdą nową wersją niektóre interfejsy API Androida mogą stać się przestarzałe lub wymagać przebudowy, aby zapewnić lepsze wrażenia deweloperom lub obsługiwać nowe funkcje platformy. W takich przypadkach oficjalnie wycofujemy przestarzałe interfejsy API i kierujemy deweloperów do alternatywnych interfejsów API.

Oznacza to, że zakończyliśmy oficjalne wsparcie dla tych interfejsów API, ale nadal będą one dostępne dla deweloperów. Więcej informacji o wycofanych funkcjach w tej wersji Androida znajdziesz na stronie wycofanych funkcji.