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:
- 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 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.
Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:
OTP Redaction
Android will stop untrusted apps that implement a
NotificationListenerService
from reading unredacted content
from notifications where an OTP has been detected. Trusted apps such as
companion device manager associations are exempt from these restrictions.
Screenshare Protection
- Notification content is hidden during screen sharing sessions to preserve
the user's privacy. If the app implements
setPublicVersion()
, Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context. - Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
- Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
- Beyond Android's automatic identification of sensitive fields, developers
can manually mark parts of their app as sensitive using
setContentSensitivity
, which is hidden from remote viewers during screenshare. - Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.
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.
Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:
- Ensure that your app has been properly migrated to use the predictive back gesture.
- Ensure that your fragment transitions work with predictive back navigation.
- Migrate away from animation and framework transitions and use animator and androidx transitions instead.
- Migrate away from back stacks that
FragmentManager
doesn't know about. Use back stacks managed byFragmentManager
or by the Navigation component instead.
Widżety są wyłączane, gdy użytkownik wymuszająco zatrzyma aplikację
如果用户在搭载 Android 15 的设备上强行停止某个应用,系统会暂时停用该应用的所有 widget。这些 widget 会灰显,用户无法与它们互动。这是因为,从 Android 15 开始,当应用被强行停止时,系统会取消应用的所有待处理 intent。
系统会在用户下次启动应用时重新启用这些 widget。
如需了解详情,请参阅对软件包停止状态的更改。
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.