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 obecny kod natywny, 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:
- musi być ustawiona jako domyślny program uruchamiający na urządzeniu,
jest użytkownikiem
ROLE_HOME
. - 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:
- 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. - Użytkownik musi mieć możliwość ukrywania i wyświetlania kontenera przestrzeni prywatnej.
- Użytkownik musi mieć możliwość zablokowania i odblokowania kontenera przestrzeni prywatnej. Używaj
metodę
requestQuietModeEnabled()
do zablokowania (przez przekroczenie wartościtrue
) lub odblokowanie (przez przekazanie danychfalse
) przestrzeni prywatnej. 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
iACTION_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 przezFragmentManager
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
Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.
Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.
To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.
Benefits and performance gains
The new media projection status bar chip enhances the user experience as follows:
- Alerts users to in-progress screen sharing, casting, or recording
- Enable users to terminate screen projection by tapping the chip
Automatic suspension of screen projection when the device screen is locked ensures user privacy.
Check if your app is impacted
By default, your app includes the new status bar chip and automatically suspends
screen projection when the lock screen activates. Test your app by implementing
the
onStop()
method of the
MediaProjection.Callback
.
Verify that your app responds appropriately when the screen projection stops as
a result of the user tapping the status bar chip or when the lock screen
activates.
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.