Verhaltensänderungen: alle Apps

Die Android 15-Plattform umfasst Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten für alle Apps, wenn sie unter Android 15 ausgeführt werden, unabhängig von targetSdkVersion. Sie sollten Ihre App testen und sie bei Bedarf so anpassen, dass sie diese Funktionen unterstützt.

Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich nur auf Apps auswirken, die auf Android 15 ausgerichtet sind.

Hauptfunktion

In Android 15 werden verschiedene Kernfunktionen des Android-Systems geändert oder erweitert.

Änderungen am Status „Angehalten“ von Paketen

Der Status „Paket FLAG_STOPPED“ (den Nutzer in AOSP-Builds durch langes Drücken auf ein App-Symbol und Auswahl von „Zwangsweise beenden“ aktivieren können) soll Apps in diesem Status halten, bis der Nutzer die App explizit daraus entfernt, indem er sie direkt startet oder indirekt mit ihr interagiert (z. B. über das Freigabe-Menü oder ein Widget oder indem er die App als Live-Hintergrund auswählt). In Android 15 haben wir das Verhalten des Systems an dieses beabsichtigte Verhalten angepasst. Apps sollten nur durch eine direkte oder indirekte Nutzeraktion aus dem Status „Angehalten“ entfernt werden.

Um das beabsichtigte Verhalten zu unterstützen, werden zusätzlich zu den bestehenden Einschränkungen alle ausstehenden Intents abgebrochen, wenn die App auf einem Gerät mit Android 15 den Status „Angehalten“ einnimmt. Wenn die App durch die Aktionen des Nutzers aus dem angehaltenen Status entfernt wird, wird die ACTION_BOOT_COMPLETED-Broadcast an die App gesendet. So können ausstehende Intents neu registriert werden.

Sie können die neue Methode ApplicationStartInfo.wasForceStopped() aufrufen, um zu prüfen, ob die App in den Status „Beendet“ versetzt wurde.

Unterstützung für Seitengrößen von 16 KB

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。

随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。

为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用

Benefits and performance gains

配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:

  • 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
  • 应用启动期间的功耗降低:平均降低了 4.56%
  • 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
  • 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)

这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。

Check if your app is impacted

如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题

如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。

Erforderliche Änderungen für einige Apps zur Unterstützung des vertraulichen Profils

Vertrauliche Profile sind eine neue Funktion in Android 15. Damit können Nutzer einen separaten Bereich auf ihrem Gerät erstellen, in dem sensible Apps durch eine zusätzliche Authentifizierung vor neugierigen Blicken geschützt werden. Da die Sichtbarkeit von Apps im vertraulichen Profil eingeschränkt ist, müssen bei einigen Arten von Apps zusätzliche Schritte ausgeführt werden, damit sie im vertraulichen Profil eines Nutzers angezeigt werden und damit Nutzer mit ihnen interagieren können.

Alle Apps

Da Apps im privaten Bereich in einem separaten Nutzerprofil gespeichert werden, ähnlich wie Arbeitsprofile, sollten Apps nicht davon ausgehen, dass installierte Kopien ihrer App, die sich nicht im Hauptprofil befinden, sich im Arbeitsprofil befinden. Wenn Ihre App Logik für Apps mit Arbeitsprofil enthält, die diese Annahme treffen, müssen Sie diese Logik anpassen.

Medizinische Apps

Wenn ein Nutzer das vertrauliche Profil sperrt, werden alle Apps darin angehalten. Diese Apps können dann keine Aktivitäten im Vordergrund oder Hintergrund ausführen, z. B. keine Benachrichtigungen anzeigen. Dieses Verhalten kann sich erheblich auf die Nutzung und Funktion von medizinischen Apps auswirken, die im vertraulichen Profil installiert sind.

Bei der Einrichtung des vertraulichen Profils werden Nutzer darauf hingewiesen, dass es sich nicht für Apps eignet, die wichtige Aktivitäten im Vordergrund oder Hintergrund ausführen müssen, z. B. die Anzeige von Benachrichtigungen von medizinischen Apps. Apps können jedoch nicht feststellen, ob sie im privaten Profil verwendet werden, und können dem Nutzer daher in diesem Fall keine Warnung anzeigen.

Wenn Sie also eine medizinische App entwickeln, sollten Sie prüfen, wie sich diese Funktion auf Ihre App auswirken könnte, und entsprechende Maßnahmen ergreifen, z. B. Ihre Nutzer darüber informieren, dass sie Ihre App nicht in einem vertraulichen Profil installieren sollen, um Unterbrechungen wichtiger App-Funktionen zu vermeiden.

Launcher-Apps

Wenn Sie eine Launcher-App entwickeln, müssen Sie Folgendes tun, damit Apps im privaten Bereich sichtbar sind:

  1. Ihre App muss als Standard-Launcher-App für das Gerät zugewiesen sein, d. h. sie muss die Rolle ROLE_HOME haben.
  2. Ihre App muss die normale Berechtigung ACCESS_HIDDEN_PROFILES in der Manifestdatei Ihrer App deklarieren.

Launcher-Apps, die die Berechtigung ACCESS_HIDDEN_PROFILES angeben, müssen die folgenden Anwendungsfälle für vertrauliche Profile unterstützen:

  1. Ihre App muss einen separaten Launcher-Container für Apps haben, die im vertraulichen Profil installiert sind. Mit der Methode getLauncherUserInfo() kannst du feststellen, welcher Nutzerprofiltyp verarbeitet wird.
  2. Der Nutzer muss den Container für das vertrauliche Profil ausblenden und einblenden können.
  3. Der Nutzer muss den Container für das vertrauliche Profil sperren und entsperren können. Verwenden Sie die Methode requestQuietModeEnabled(), um das vertrauliche Profil zu sperren (true übergeben) oder zu entsperren (false übergeben).
  4. Wenn das vertrauliche Profil gesperrt ist, sollten keine Apps im Container des vertraulichen Profils sichtbar sein oder über Mechanismen wie die Suche gefunden werden können. Ihre App sollte einen Empfänger für die Übertragungen von ACTION_PROFILE_AVAILABLE und ACTION_PROFILE_UNAVAILABLE registrieren und die Benutzeroberfläche in Ihrer App aktualisieren, wenn sich der gesperrte oder entsperrte Status des Containers für den privaten Bereich ändert. Beide Streams enthalten EXTRA_USER, mit dem sich in Ihrer App auf den Nutzer mit privatem Profil Bezug nehmen lässt.

    Sie können auch die Methode isQuietModeEnabled() verwenden, um zu prüfen, ob das Profil des privaten Bereichs gesperrt ist.

App-Shop-Apps

Das vertrauliche Profil enthält die Schaltfläche „Apps installieren“, über die Apps implizit im vertraulichen Profil des Nutzers installiert werden. Damit Ihre App diese implizite Absicht erhält, müssen Sie in der Manifestdatei Ihrer App eine <intent-filter> mit einer <category> von CATEGORY_APP_MARKET deklarieren.

PNG-basierte Emoji-Schriftart entfernt

The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf) has been removed, leaving just the vector-based file. Beginning with Android 13 (API level 33), the emoji font file used by the system emoji renderer changed from a PNG-based file to a vector based file. The system retained the legacy font file in Android 13 and 14 for compatibility reasons, so that apps with their own font renderers could continue to use the legacy font file until they were able to upgrade.

To check if your app is affected, search your app's code for references to the NotoColorEmojiLegacy.ttf file.

You can choose to adapt your app in a number of ways:

  • Use platform APIs for text rendering. You can render text to a bitmap-backed Canvas and use that to get a raw image if necessary.
  • Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
  • As a last resort, you can bundle the legacy emoji font file (NotoColorEmoji.ttf) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.

Die Mindest-SDK-Zielversion wurde von 23 auf 24 erhöht.

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

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

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

adb install --bypass-low-target-sdk-block FILENAME.apk

Sicherheit und Datenschutz

Android 15 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

Kamera und Medien

In Android 15 werden die folgenden Änderungen am Kamera- und Medienverhalten für alle Apps vorgenommen.

Durch die direkte und ausgelagerte Audiowiedergabe werden zuvor geöffnete direkte oder ausgelagerte Audiotracks ungültig, wenn Ressourcenlimits erreicht werden.

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

Nutzererfahrung und System-UI

Android 15 enthält einige Änderungen, die für eine einheitlichere und intuitivere User Experience sorgen sollen.

Animationen für intelligente „Zurück“-Touchgeste für Apps aktiviert, die sich dafür registriert haben

Ab Android 15 wurde die Entwickleroption für intelligente „Zurück“-Touch-Gesten entfernt. Systemanimationen wie das Zurückgehen zum Startbildschirm, das Wechseln zwischen Aufgaben und das Wechseln zwischen Aktivitäten werden jetzt für Apps angezeigt, die die vorhersagende Geste zum Zurückgehen entweder vollständig oder auf Aktivitätsebene aktiviert haben. Wenn Ihre App betroffen ist, gehen Sie so vor:

  • Prüfen Sie, ob Ihre App richtig migriert wurde, um die vorweggenommene Zurück-Geste zu verwenden.
  • Achten Sie darauf, dass Ihre Fragmentübergänge mit der vorausschauenden Navigation zurück funktionieren.
  • Verwenden Sie stattdessen Animator- und androidx-Übergänge.
  • Migrieren Sie von Backstacks weg, die FragmentManager nicht kennt. Verwenden Sie stattdessen Backstacks, die von FragmentManager oder der Navigationskomponente verwaltet werden.

Widgets werden deaktiviert, wenn ein Nutzer eine App erzwingt, dass sie beendet wird

Wenn ein Nutzer eine App auf einem Gerät mit Android 15 erzwungen beendet, deaktiviert das System vorübergehend alle Widgets der App. Die Widgets sind ausgegraut und der Nutzer kann nicht mit ihnen interagieren. Das liegt daran, dass ab Android 15 alle ausstehenden Intents einer App vom System abgebrochen werden, wenn die App erzwungen beendet wird.

Das System aktiviert diese Widgets wieder, wenn der Nutzer die App das nächste Mal startet.

Weitere Informationen finden Sie unter Änderungen am Status „Angehalten“ für Pakete.

Chip in der Statusleiste für die Medienprojektion informiert Nutzer über Bildschirmfreigabe, Streaming und Aufzeichnung

屏幕投影漏洞会泄露用户的私密数据(例如财务信息),因为用户不知道自己的设备屏幕正在共享。

对于搭载 Android 15 QPR1 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。

Chip in der Statusleiste für die Bildschirmfreigabe, das Streaming und die Aufzeichnung.

Prüfen, ob Ihre App betroffen ist

Ihre App enthält standardmäßig den Statusleisten-Chip und die Bildschirmprojektion wird automatisch pausiert, wenn der Sperrbildschirm aktiviert wird.

Weitere Informationen zum Testen Ihrer App für diese Anwendungsfälle finden Sie unter Statusleiste – Chip und automatischer Stopp.

Einschränkungen für den Netzwerkzugriff im Hintergrund

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

Einstellung

Mit jeder Veröffentlichung können bestimmte Android-APIs veraltet sein oder müssen refaktoriert werden, um ein besseres Entwicklererlebnis zu bieten oder neue Plattformfunktionen zu unterstützen. In diesen Fällen werden die veralteten APIs offiziell eingestellt und Entwickler werden auf alternative APIs verwiesen.

Das bedeutet, dass wir den offiziellen Support für die APIs eingestellt haben, sie aber weiterhin für Entwickler verfügbar sind. Weitere Informationen zu wichtigen Einstellungen in dieser Version von Android finden Sie auf der Seite zu Einstellungen.