Platforma Android 15 zawiera 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, niezależnie od targetSdkVersion
. Przetestuj aplikację, a następnie w razie potrzeby zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.
Sprawdź też listę zmian w zachowaniu, 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 stanu zatrzymania pakietu
Celem stanu pakietu FLAG_STOPPED
(który użytkownicy mogą aktywować w wersjach AOSP przez długie naciśnięcie ikony aplikacji i wybranie „Wymuś zatrzymanie”) było zawsze utrzymywanie aplikacji w tym stanie, dopóki użytkownik nie usunie aplikacji z tego stanu, uruchamiając ją bezpośrednio lub pośrednio z aplikacją (za pomocą panelu udostępniania lub widżetu, wybierając aplikację jako tapetę na żywo itp.). W Androidzie 15 zaktualizowaliśmy działanie systemu, aby było zgodne z zamierzonym działaniem. Aplikacje powinny być usuwane z tylko w wyniku bezpośredniego lub pośredniego działania użytkownika.
Aby zapewnić pożądane działanie, oprócz obecnych ograniczeń system anuluje też wszystkie oczekujące intencje, gdy aplikacja przechodzi w stan zatrzymania na urządzeniu z Androidem 15. Gdy działania użytkownika wyprowadzą aplikację ze stanu zatrzymania, zostanie wysłana do niej transmisja ACTION_BOOT_COMPLETED
, co umożliwi ponowne zarejestrowanie oczekujących intencji.
Aby sprawdzić, czy aplikacja została zatrzymana, możesz wywołać nową metodę ApplicationStartInfo.wasForceStopped()
.
Obsługa rozmiarów stron 16 KB
W przeszłości Android obsługiwał tylko strony pamięci o rozmiarze 4 KB, co optymalizowało wydajność pamięci systemowej pod kątem średniej ilości pamięci całkowitej, jaką zwykle miały urządzenia z Androidem. Od Androida 15 AOSP obsługuje urządzenia skonfigurowane do używania rozmiaru strony 16 KB (urządzenia 16 KB). Jeśli Twoja aplikacja używa bibliotek NDK bezpośrednio lub pośrednio za pomocą pakietu SDK, musisz ją przebudować, aby działała na urządzeniach o rozmiarze strony 16 KB.
Producenci urządzeń nadal tworzą urządzenia z większą ilością pamięci fizycznej (RAM). Wiele z nich będzie korzystać ze stron o rozmiarze 16 KB (a w przyszłości większych), aby zoptymalizować wydajność urządzenia. Dodanie obsługi urządzeń ze stronami o rozmiarze 16 KB umożliwia uruchamianie aplikacji na tych urządzeniach i korzystanie z powiązanych z tym ulepszeń wydajności. Bez ponownej kompilacji aplikacje nie będą działać na urządzeniach 16 KB w przyszłych wersjach Androida.
Aby pomóc Ci dodać obsługę w aplikacji, przygotowaliśmy wskazówki dotyczące sprawdzania, czy zmiana ma wpływ na Twoją aplikację, ponownego jej kompilowania (w odpowiednich przypadkach) oraz testowania aplikacji w środowisku 16 KB przy użyciu emulatorów (w tym obrazów systemu Android 15 dla emulatora Androida).
优势和性能提升
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
检查您的应用是否受到影响
Jeśli Twoja aplikacja używa kodu natywnego, zrekompiluj ją, aby obsługiwała urządzenia 16-kilobajtowe. Jeśli nie masz pewności, czy Twoja aplikacja używa kodu natywnego, możesz za pomocą narzędzia APK Analyzer sprawdzić, czy zawiera ona kod natywny, a następnie sprawdzić wyrównanie segmentów ELF w przypadku znalezionych bibliotek współdzielonych. Android Studio udostępnia też funkcje, które pomagają automatycznie wykrywać problemy z wyrównaniem.
Jeśli Twoja aplikacja używa tylko kodu napisanego w języku programowania Java lub Kotlin, w tym wszystkich bibliotek i pakietów SDK, to już obsługuje urządzenia 16-bitowe. Zalecamy jednak przetestowanie aplikacji w środowisku 16 KB, aby sprawdzić, czy nie występują nieoczekiwane regresje w jej działaniu.
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
.
Czcionka emotikonów oparta na PNG została usunięta
我们移除了基于 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 do 24
Android 15 基于
在 Android 14 中进行的更改,并扩展了
安全性。在 Android 15 中,
无法安装低于 24 的 targetSdkVersion
。
要求应用符合现代 API 级别有助于确保更好的安全性和
保护隐私。
恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私
更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion
22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
在升级到 Android 15 的设备上,targetSdkVersion
级别较低的任何应用
安装在 Google Play 上
如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:
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
Android 15 wprowadza te zmiany w działaniu aparatu i multimediów we wszystkich aplikacjach.
Bezpośrednie i przeniesione odtwarzanie dźwięku unieważnia wcześniej otwarte bezpośrednie lub przeniesione ścieżki audio po osiągnięciu limitów zasobów.
在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack
。
从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack
对象失效,以防止执行新轨道请求。
(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)
Interfejs użytkownika i systemu
Android 15 zawiera kilka zmian, które mają na celu zapewnienie bardziej spójnej i intuicyjnej obsługi.
Animacje przewidywanego przejścia wstecz włączone w przypadku aplikacji, które wyraziły na to zgodę
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 wyłączane, gdy użytkownik wymusi zatrzymanie aplikacji
Jeśli użytkownik wymusi zatrzymanie aplikacji na urządzeniu z Androidem 15, system tymczasowo wyłączy wszystkie widżety tej aplikacji. Widgety są wyszarzone i użytkownik nie może z nimi wchodzić w interakcję. Dzieje się tak, ponieważ od Androida 15 system anuluje wszystkie oczekujące intencje aplikacji, gdy zostanie ona zatrzymana.
System ponownie włączy te widżety, gdy użytkownik uruchomi aplikację.
Więcej informacji znajdziesz w artykule Zmiany stanu zatrzymania pakietu.
Pasek stanu projekcji multimediów informuje użytkowników o udostępnianiu, przesyłaniu i nagrywaniu ekranu
Wykorzystanie funkcji udostępniania ekranu ujawnia prywatne dane użytkowników, takie jak informacje finansowe, ponieważ użytkownicy nie zdają sobie sprawy, że ich ekran jest udostępniany.
W przypadku aplikacji działających na urządzeniach z Androidem 15 QPR1 lub nowszym na pasku stanu wyświetla się duży i wyróżniony element, który informuje użytkowników o trwającej projekcji ekranu. Użytkownicy mogą kliknąć element, aby zatrzymać udostępnianie, przesyłanie lub nagrywanie ekranu. Projekcja ekranu jest też automatycznie zatrzymywana, gdy ekran urządzenia jest zablokowany.

Sprawdź, czy Twoja aplikacja jest objęta ograniczeniami
Domyślnie aplikacja zawiera element na pasku stanu i automatycznie zawiesza projekcję ekranu po włączeniu ekranu blokady.
Więcej informacji o testowaniu aplikacji w takich przypadkach użycia znajdziesz w artykule Pasek stanu, element sterujący i automatyczne zatrzymywanie.
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
Z każdą kolejną wersją niektóre interfejsy API Androida mogą stać się przestarzałe lub wymagać refaktoryzacji, aby zapewnić deweloperom większy komfort pracy lub obsługiwać nowe funkcje platformy. W takich przypadkach oficjalnie wycofujemy przestarzałe interfejsy API i kierujemy deweloperów do alternatywnych interfejsów API, których mogą używać zamiast nich.
Wycofanie oznacza, że zakończyliśmy oficjalne wsparcie dla interfejsów API, ale nadal będą one dostępne dla deweloperów. Więcej informacji o ważnych wycofaniach w tej wersji Androida znajdziesz na stronie wycofań.