Platforma Android 15 zawiera zmiany zachowania, które mogą mieć wpływ na Twoją aplikację.
Opisane poniżej zmiany zachowania dotyczą wszystkich aplikacji, które działają na Androidzie 15, niezależnie od targetSdkVersion
. Należy przetestować aplikację, a następnie w razie potrzeby zmodyfikować ją w sposób umożliwiający prawidłowe działanie w tych przypadkach.
Sprawdź też listę zmian w działaniu, które dotyczą tylko aplikacji kierowanych na Androida 15.
Główna funkcja
Android 15 modyfikuje lub rozszerza różne podstawowe funkcje systemu Android.
Zmiany w stanie zatrzymania pakietu
软件包 FLAG_STOPPED
状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。
为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED
广播传送到应用,以便应用有机会重新注册所有待处理 intent。
您可以调用新的 ApplicationStartInfo.wasForceStopped()
方法来确认应用是否已进入停止状态。
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).
优势和性能提升
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.
检查您的应用是否受到影响
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 w Androidzie 15, która umożliwia użytkownikom tworzenie osobnej przestrzeni na urządzeniu, w której mogą ukryć aplikacje poufne przed ciekawskimi spojrzeniami, korzystając z dodatkowego poziomu uwierzytelniania. Aplikacje w przestrzeni prywatnej mają ograniczoną widoczność, dlatego niektóre z nich muszą wykonać dodatkowe czynności, aby móc wyświetlać aplikacje w przestrzeni prywatnej użytkownika i z nimi wchodzić w interakcje.
Wszystkie aplikacje
Aplikacje w przestrzeni prywatnej są przechowywane w oddzielnym profilu użytkownika, podobnie jak profil służbowy, dlatego nie powinny zakładać, że wszystkie zainstalowane kopie aplikacji, które nie znajdują się na głównym profilu, są na profilu służbowym. Jeśli Twoja aplikacja ma logikę związaną z aplikacjami na profilu służbowym, która zakłada, że ta logika jest prawidłowa, musisz ją dostosować.
Medycyna
Gdy użytkownik zablokuje przestrzeń prywatną, wszystkie aplikacje w niej są wstrzymywane i nie mogą wykonywać działań na pierwszym planie ani w tle, w tym wyświetlać powiadomień. Może to mieć poważny wpływ na korzystanie z aplikacji medycznych zainstalowanych w przestrzeni prywatnej.
Podczas konfigurowania przestrzeni prywatnej użytkownicy otrzymują ostrzeżenie, że przestrzeń prywatna nie jest odpowiednia dla aplikacji, które muszą wykonywać krytyczne czynności na pierwszym planie lub w tle, np. wyświetlać powiadomienia z aplikacji medycznych. Aplikacje nie mogą jednak określić, czy są używane w przestrzeni prywatnej, więc nie mogą wyświetlać użytkownikowi ostrzeżenia w takim przypadku.
Jeśli opracowujesz aplikację medyczną, sprawdź, jak ta funkcja może wpływać na Twoją aplikację, i podejmij odpowiednie działania, np. poinformuj użytkowników, aby nie instalowali aplikacji w przestrzeni prywatnej. Dzięki temu unikniesz zakłócenia jej kluczowych funkcji.
Aplikacje menu
Jeśli opracowujesz aplikację uruchamiającą, musisz wykonać te czynności, zanim aplikacje w prywatnej przestrzeni będą widoczne:
- Aplikacja musi być przypisana jako domyślna aplikacja uruchamiania na urządzeniu, czyli mieć rolę
ROLE_HOME
. - Aplikacja musi zadeklarować normalne uprawnienia
ACCESS_HIDDEN_PROFILES
w pliku manifestu aplikacji.
Aplikacje uruchamiające, które deklarują uprawnienie ACCESS_HIDDEN_PROFILES
, muszą obsługiwać te przypadki użycia przestrzeni prywatnej:
- Aplikacja musi mieć oddzielny kontener programu uruchamiającego dla aplikacji zainstalowanych w przestrzeni prywatnej. Aby określić, jaki typ profilu użytkownika jest obsługiwany, użyj metody
getLauncherUserInfo()
. - 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żyj metody
requestQuietModeEnabled()
, aby zablokować (przekazująctrue
) lub odblokować (przekazującfalse
) przestrzeń prywatną. Gdy przestrzeń prywatna jest zablokowana, żadne aplikacje w kontenerze przestrzeni prywatnej nie powinny być widoczne ani możliwe do znalezienia za pomocą mechanizmów takich jak wyszukiwarka. Aplikacja powinna zarejestrować odbiornik dla transmisji
ACTION_PROFILE_AVAILABLE
iACTION_PROFILE_UNAVAILABLE
oraz aktualizować interfejs użytkownika w aplikacji, gdy stan zablokowania lub odblokowania kontenera obszaru prywatnego ulegnie zmianie. Oba te transmisje zawierająEXTRA_USER
, którego aplikacja może używać do odwoływania się do użytkownika profilu prywatnego.Aby sprawdzić, czy profil przestrzeni prywatnej jest zablokowany, możesz też użyć metody
isQuietModeEnabled()
.
Aplikacje ze sklepów z aplikacjami
Przestrzeń prywatna zawiera przycisk „Zainstaluj aplikacje”, który uruchamia domyślny zamiar zainstalowania aplikacji w przestrzeni prywatnej użytkownika. Aby aplikacja mogła otrzymać tę niejawną intencję, w pliku manifestu aplikacji musisz zadeklarować uprawnienie <intent-filter>
z wartością <category>
CATEGORY_APP_MARKET
.
Usunięto czcionkę emotikonów opartą na pliku PNG.
我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf
),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。
如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf
文件的引用。
您可以通过多种方式自适应应用:
- 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的
Canvas
,并在必要时使用该Canvas
获取原始图片。 - 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
- 作为最后的手段,您可以将旧版表情符号字体文件 (
NotoColorEmoji.ttf
) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 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 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。
开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:
动态密码隐去
Android 会阻止实现 NotificationListenerService
的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。
屏幕共享保护
- 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了
setPublicVersion()
,Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。 - 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
- 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
- 除了 Android 自动识别敏感字段之外,开发者还可以使用
setContentSensitivity
手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。 - 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。
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
在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack
。
从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack
对象失效,以防止执行新轨道请求。
(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 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.
Od Androida 15 opcja dla programistów dotycząca animacji przewidywanego przejścia wstecz została usunięta. Systemowe animacje takie jak animacja powrotu do ekranu głównego, animacja przełączania zadań i animacja przełączania aktywności są teraz wyświetlane w aplikacjach, które włączyły przewidujący gest wsteczny w całości lub na poziomie aktywności. Jeśli Twoja aplikacja jest dotknięta, wykonaj te czynności:
- Upewnij się, że aplikacja została prawidłowo przeniesiona, aby można było używać przewidującego gestu wstecz.
- Upewnij się, że przejścia między fragmentami działają z przewidywaną nawigacją wstecz.
- Zrezygnuj z animacji i przejść w ramach, a zamiast nich używaj animatora i przejść androidx.
- Przejdź z poziomów podrzędnych, których
FragmentManager
nie zna. Używaj zamiast nich stosów powrotnych zarządzanych przezFragmentManager
lub komponent Nawigacja.
Widżety są wyłączane, gdy użytkownik wymusza zatrzymanie aplikacji
如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。
系统会在用户下次启动应用时重新启用这些微件。
如需了解详情,请参阅对软件包停止状态的更改。
Element na pasku stanu informujący o udostępnianiu ekranu, przesyłaniu i nagrywaniu
屏幕投影漏洞会泄露用户的私密数据(例如财务信息),因为用户不知道自己的设备屏幕正在共享。
对于搭载 Android 15 QPR1 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。

检查您的应用是否受到影响
默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。
如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止。
Ograniczenia dostępu do sieci w tle
W Androidzie 15 aplikacje, które inicjują żądanie sieciowe poza prawidłowym cyklem życia procesu, są traktowane jako wyjątki. Zazwyczaj jest to UnknownHostException
lub inny element związany z gniazdem IOException
. Żądania sieciowe, które występują poza prawidłowym cyklem życia, są zwykle spowodowane tym, że aplikacje nieświadomie kontynuują żądanie sieciowe nawet wtedy, gdy aplikacja nie jest już aktywna.
Aby uniknąć tego wyjątku, zadbaj o to, aby żądania sieci były świadome cyklu życia i były anulowane po zakończeniu prawidłowego cyklu procesu, używając komponentów świadomych cyklu życia. Jeśli ważne jest, aby żądanie sieciowe zostało wysłane nawet wtedy, gdy użytkownik opuści aplikację, rozważ zaplanowanie żądania sieciowego za pomocą WorkManagera lub kontynuowanie widocznego dla użytkownika zadania za pomocą usługi na pierwszym planie.
Wycofane
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 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.