Zmiany w działaniu: wszystkie aplikacje

Platforma Android 14 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 14, niezależnie od targetSdkVersion. W razie potrzeby przetestuj aplikację i zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.

Zapoznaj się też z listą zmian w zachowaniu, które mają wpływ tylko na aplikacje kierowane na Androida 14.

Główna funkcja

Domyślnie odrzucane są prośby o zaplanowanie alarmów precyzyjnych

Alarmy precyzyjne są przeznaczone do powiadomień, które użytkownik chce otrzymać, lub do działań, które muszą być wykonane w określonym czasie. Od Androida 14 uprawnienia SCHEDULE_EXACT_ALARM nie są wstępnie przyznawane większości nowo instalowanych aplikacji kierowanych na Androida 13 i nowsze wersje – domyślnie są one odrzucane.

Dowiedz się więcej o zmianach w uprawnieniach dotyczących planowania dokładnych alarmów.

Zarejestrowane w kontekście transmisje są umieszczane w kolejce, gdy aplikacje są przechowywane w pamięci podręcznej

在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。

当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。

Aplikacje mogą kończyć tylko własne procesy działające w tle

Począwszy od Androida 14, gdy Twoja aplikacja wywołuje killBackgroundProcesses(), interfejs API może zakończyć tylko procesy w tle Twojej aplikacji.

Jeśli podasz nazwę pakietu innej aplikacji, ta metoda nie będzie miała wpływu na procesy w tle tej aplikacji. W Logcat pojawi się wtedy taki komunikat:

Invalid packageName: com.example.anotherapp

Aplikacja nie powinna używać interfejsu API killBackgroundProcesses() ani w inny sposób próbować wpływa na cykl życia innych aplikacji, nawet w starszych wersjach systemów operacyjnych. Android został zaprojektowany tak, aby utrzymywał w tle aplikacje z pamięci podręcznej i zabijał je automatycznie, gdy system potrzebuje pamięci. Jeśli aplikacja wyłącza inne aplikacje może zmniejszyć wydajność systemu i zwiększyć zużycie baterii, wymagając późniejszego pełnego ponownego uruchomienia, co zajmuje znacznie niż wznowienie istniejącej aplikacji w pamięci podręcznej.

Wartość MTU jest ustawiona na 517 w przypadku pierwszego klienta GATT, który wysyła żądanie MTU.

从 Android 14 开始,Android 蓝牙堆栈会更严格地遵循 蓝牙核心规范 5.2 版,并在第一个 GATT 客户端使用 BluetoothGatt#requestMtu(int) API 请求 MTU 时将 BLE ATT MTU 请求设为 517 字节,并忽略该 ACL 连接上的所有后续 MTU 请求。

如需解决此更改并使您的应用更为稳健,请考虑以下选项:

  • 您的外围设备应使用外围设备可以容纳的合理值来响应 Android 设备的 MTU 请求。最终协商的值将是 Android 请求的值和远程提供的值(例如 min(517, remoteMtu))的较小值
    • 实现此修复程序可能需要更新外围设备的固件
  • 或者,您也可以根据外围设备的已知支持值与收到的 MTU 更改值之间的最小值来限制 GATT 特征写入
    • 提醒您,应将标头的支持大小减小 5 个字节
    • 例如:arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Nowy powód, dla którego aplikacja może zostać umieszczona w ograniczonym zasobniku stanu gotowości

Android 14 引入了一种可将应用放入受限待机模式存储分区的新原因。由于 onStartJobonStopJobonBind 方法超时,应用的作业多次触发 ANR 错误。(如需了解对 onStartJobonStopJob 的更改,请参阅 JobScheduler 强化了回调和网络行为。)

如需跟踪应用是否已进入受限待机分桶,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket() 进行日志记录,或在应用启动时使用 UsageStatsManager.queryEventsForSelf() 进行日志记录。

mlock ograniczony do 64 KB

在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试

System wymusza wykorzystanie zasobów aplikacji z pamięci podręcznej

Zgodnie z zamierzeniami, gdy aplikacja jest przeniesiona do tle i nie działają żadne inne komponenty procesu aplikacji, jej proces jest w stanie buforowania. Taki proces aplikacji może zostać przerwany z powodu obciążenia pamięci systemowej. Wszelkie działania wykonywane przez instancje Activity po wywołaniu i zwrocie metody onStop() są w tym stanie niewiarygodne i nie zalecamy ich wykonywania.

Android 14 wprowadza spójność i wymuszanie tego projektu. Krótko po tym, jak proces aplikacji wejdzie w stan pamięci podręcznej, praca w tle jest niedozwolona, dopóki komponent procesu nie wejdzie ponownie w stan aktywny cyklu życia.

Zmiany te nie powinny mieć wpływu na aplikacje, które korzystają z typowych interfejsów API obsługiwanych przez platformę, takich jak services, JobSchedulerJetpack WorkManager.

Interfejs użytkownika

Zmiany w sposobie wyświetlania powiadomień, których nie można zamknąć

如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。

这项变更适用于阻止用户关闭前台的应用 将 Notification.FLAG_ONGOING_EVENT 设置为 Notification.Builder#setOngoing(true)NotificationCompat.Builder#setOngoing(true)FLAG_ONGOING_EVENT 的行为已发生变化,使用户实际上能够关闭此类通知。

在以下情况下,此类通知仍不可关闭:

  • 当手机处于锁定状态时
  • 如果用户选择全部清除通知操作(有助于防止意外关闭)

此外,这一新行为不适用于以下用例中的通知:

  • CallStyle 条通知
  • 企业设备政策控制器 (DPC) 和支持软件包
  • 媒体通知
  • 默认的搜索选择器软件包

Informacje o bezpieczeństwie danych są bardziej widoczne

Aby zwiększyć prywatność użytkowników, w Androidzie 14 zwiększyliśmy liczbę miejsc, w których system pokazuje informacje zadeklarowane w formularzu w Konsoli Play. Obecnie użytkownicy mogą zobaczyć te informacje w sekcji Bezpieczeństwo danych na stronie aplikacji w Google Play.

Zachęcamy do przejrzenia zasad udostępniania danych o lokalizacji w aplikacji i wprowadzenia w niej odpowiednich zmian w sekcji Bezpieczeństwo danych w Google Play.

Więcej informacji o tym, jak informacje o bezpieczeństwie danych są bardziej widoczne w Androidzie 14, znajdziesz w tym przewodniku.

Ułatwienia dostępu

Nieliniowe skalowanie czcionki do 200%

从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。

如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。

Bezpieczeństwo

Minimalny poziom interfejsu API, na którym można zainstalować aplikację

Od Androida 14 nie można instalować aplikacji z wersją targetSdkVersion niższą niż 23. aplikacje muszą spełniać wymagania dotyczące minimalnego docelowego poziomu interfejsu API; zwiększają bezpieczeństwo i prywatność użytkowników.

Złośliwe oprogramowanie często atakuje starsze poziomy interfejsu API, aby ominąć zabezpieczenia i prywatność zabezpieczeń wprowadzonych w nowszych 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 14 utrudnia złośliwemu unikaniu zabezpieczeń i lepszą ochronę prywatności. Próba zainstalowania aplikacji kierowanej na niższy poziom interfejsu API spowoduje niepowodzenie instalacji i wyświetlenie tego komunikatu w Logcat:

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

na urządzeniach z Androidem 14 wszystkie aplikacje z wersją targetSdkVersion niższą niż 23.

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

Nazwy pakietów właścicieli multimediów mogą być zamazane

媒体库支持查询 OWNER_PACKAGE_NAME 列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:

  • 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
  • 查询媒体库的应用会请求 QUERY_ALL_PACKAGES 权限。

详细了解 Android 如何出于隐私保护目的而过滤软件包可见性