Die Android 17-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 17 ausgeführt werden, unabhängig von targetSdkVersion. Sie sollten Ihre App testen und sie bei Bedarf an diese Änderungen anpassen.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich nur auf Apps auswirken, die auf Android 17 ausgerichtet sind.
Hauptfunktion
Android 17 (API‑Level 37) enthält die folgenden Änderungen, die verschiedene Kernfunktionen des Android-Systems modifizieren oder erweitern.
App-Arbeitsspeicherlimits
Android 17 引入了基于设备总 RAM 的应用内存限制,以便为应用和 Android 用户打造更稳定、更确定的环境。在 Android 17 中,限制设置得较为保守,旨在建立系统基准,在极端内存泄漏和其他异常情况导致系统范围内的不稳定(导致界面卡顿、耗电过快和应用被终止)之前,就将其检测出来。虽然我们预计此变化对绝大多数应用会话的影响微乎其微,但我们建议您遵循以下内存最佳实践,包括建立内存基准。
您可以通过在 ApplicationExitInfo 中调用 getDescription 来确定应用会话是否受到影响;如果应用受到影响,退出原因将为 REASON_OTHER,说明将包含字符串 "MemoryLimiter:AnonSwap" 以及其他信息。您还可以将 TRIGGER_TYPE_ANOMALY 与基于触发器的分析搭配使用,以获取在达到内存限制时收集的堆转储。
为了帮助您查找内存泄漏,Android Studio Panda 直接在 Android Studio 分析器中添加了 LeakCanary 集成,作为 IDE 中上下文相关的专用任务,并与您的源代码完全集成。
Sicherheit
Android 17 bietet die folgenden Verbesserungen für die Geräte- und App-Sicherheit.
Einstellungszeitplan für usesClearTraffic
In einer zukünftigen Version planen wir, das usesCleartextTraffic-Element einzustellen.
Apps, die unverschlüsselte (HTTP-)Verbindungen herstellen müssen, sollten auf die Verwendung einer Netzwerksicherheitskonfigurationsdatei umgestellt werden. Damit können Sie angeben, zu welchen Domains Ihre App Klartextverbindungen herstellen muss.
Beachten Sie, dass Dateien zur Netzwerksicherheitskonfiguration nur auf API-Ebenen 24 und höher unterstützt werden. Wenn das Mindest-API-Level Ihrer App niedriger als 24 ist, sollten Sie beides tun:
- Setzen Sie das Attribut
usesCleartextTrafficauftrue. - Netzwerkkonfigurationsdatei verwenden
Wenn das Mindest-API-Level Ihrer App 24 oder höher ist, können Sie eine Netzwerkkonfigurationsdatei verwenden und müssen usesCleartextTraffic nicht festlegen.
Implizite URI-Gewährungen einschränken
Wenn eine App derzeit einen Intent mit einem URI startet, der die Aktion Send, SendMultiple oder ImageCapture hat, gewährt das System der Ziel-App automatisch die Lese- und Schreib-URI-Berechtigungen. Wir planen, dieses Verhalten in Android 18 zu ändern. Aus diesem Grund empfehlen wir, dass Apps die entsprechenden URI-Berechtigungen explizit gewähren, anstatt sich darauf zu verlassen, dass das System sie gewährt.
Schlüsselspeicher-Limits pro App
Apps sollten nicht zu viele Schlüssel im Android Keystore erstellen, da es sich um eine gemeinsam genutzte Ressource für alle Apps auf dem Gerät handelt. Ab Android 17 erzwingt das System ein Limit für die Anzahl der Schlüssel, die eine App besitzen kann. Das Limit liegt bei 50.000 Schlüsseln für Nicht-System-Apps, die auf Android 17 (API-Level 37) oder höher ausgerichtet sind, und bei 200.000 Schlüsseln für alle anderen Apps. Für System-Apps gilt ein Limit von 200.000 Schlüsseln, unabhängig vom API-Level.
Wenn eine App versucht, mehr Schlüssel als das Limit zu erstellen, schlägt die Erstellung mit einem
KeyStoreException fehl. Die Meldungsstring der Ausnahme enthält Informationen zum Schlüssellimit. Wenn die App getNumericErrorCode() für die
Ausnahme aufruft, hängt der Rückgabewert davon ab, auf welches API-Level die App ausgerichtet ist:
- Apps, die auf Android 17 (API-Level 37) oder höher ausgerichtet sind:
getNumericErrorCode()gibt den neuen WertERROR_TOO_MANY_KEYSzurück. - Alle anderen Apps:
getNumericErrorCode()gibtERROR_INCORRECT_USAGEzurück.
Nutzererfahrung und System-UI
Android 17 enthält die folgenden Änderungen, die für eine einheitlichere, intuitive Nutzererfahrung sorgen sollen.
Standard-IME-Sichtbarkeit nach Drehung wiederherstellen
Ab Android 17 wird die vorherige IME-Sichtbarkeit nicht wiederhergestellt, wenn sich die Konfiguration des Geräts ändert (z. B. durch Drehen) und dies nicht von der App selbst verarbeitet wird.
Wenn in Ihrer App eine Konfigurationsänderung erfolgt, die nicht verarbeitet wird, und die App nach der Änderung die Tastatur benötigt, müssen Sie dies explizit anfordern. Sie können diesen Antrag auf eine der folgenden Arten stellen:
- Legen Sie das Attribut
android:windowSoftInputModeaufstateAlwaysVisiblefest. - Fordern Sie die Bildschirmtastatur programmatisch in der Methode
onCreate()Ihrer Aktivität an oder fügen Sie die MethodeonConfigurationChanged()hinzu.
Menschliche Eingabe
Android 17 enthält die folgenden Änderungen, die sich darauf auswirken, wie Apps mit Eingabegeräten wie Tastaturen und Touchpads interagieren.
Touchpads liefern standardmäßig relative Ereignisse während der Zeigererfassung
Ab Android 17 erkennt das System, wenn eine App mit View.requestPointerCapture() die Zeigererfassung anfordert und der Nutzer ein Touchpad verwendet, Zeigerbewegungen und Scrollgesten, die durch die Berührungen des Nutzers ausgelöst werden, und meldet sie der App auf dieselbe Weise wie Zeiger- und Mausradbewegungen einer erfassten Maus. In den meisten Fällen ist es dann nicht mehr erforderlich, dass Apps, die erfasste Mäuse unterstützen, eine spezielle Logik für Touchpads hinzufügen. Weitere Informationen finden Sie in der Dokumentation zu View.POINTER_CAPTURE_MODE_RELATIVE.
Bisher hat das System nicht versucht, Touchpad-Gesten zu erkennen, sondern die rohen, absoluten Fingerpositionen in einem ähnlichen Format wie Touchscreen-Berührungen an die App gesendet. Wenn eine App diese absoluten Daten weiterhin benötigt, sollte sie stattdessen die neue Methode View.requestPointerCapture(int) mit View.POINTER_CAPTURE_MODE_ABSOLUTE aufrufen.
Medien
Android 17 enthält die folgenden Änderungen am Media-Verhalten.
Härtung von Audio im Hintergrund
Ab Android 17 erzwingt das Audio-Framework Einschränkungen für Audiointeraktionen im Hintergrund, einschließlich Audiowiedergabe, Audiofokus-Anfragen und APIs zur Lautstärkeänderung. So soll sichergestellt werden, dass diese Änderungen vom Nutzer beabsichtigt sind.
Wenn die App versucht, Audio-APIs aufzurufen, während sie sich nicht in einem gültigen Lebenszyklus befindet, schlagen die APIs für die Audiowiedergabe und die Lautstärkeänderung im Hintergrund fehl, ohne eine Ausnahme auszulösen oder eine Fehlermeldung zu liefern. Die Audiofokus-API schlägt mit dem Ergebniscode AUDIOFOCUS_REQUEST_FAILED fehl.
Weitere Informationen, einschließlich Strategien zur Risikominderung, finden Sie unter Background audio hardening (Härtung von Audio im Hintergrund).
Konnektivität
Android 17 enthält die folgenden Änderungen zur Verbesserung der Gerätekonnektivität.
Autonome Neukopplung bei Verlust der Bluetooth-Verbindung
Mit Android 17 wird die autonome Neuverknüpfung eingeführt, eine Verbesserung auf Systemebene, die darauf ausgelegt ist, den Verlust von Bluetooth-Verknüpfungen automatisch zu beheben.
Bisher mussten Nutzer bei einem Verlust der Verknüpfung manuell die Einstellungen aufrufen, um die Verknüpfung mit dem Peripheriegerät aufzuheben und es dann neu zu verknüpfen. Diese Funktion baut auf der Sicherheitsverbesserung von Android 16 auf, indem sie es dem System ermöglicht, Verknüpfungen im Hintergrund wiederherzustellen, ohne dass Nutzer manuell die Einstellungen aufrufen müssen, um die Verknüpfung mit Peripheriegeräten aufzuheben und sie neu zu verknüpfen.
Bei den meisten Apps sind keine Codeänderungen erforderlich. Entwickler sollten jedoch die folgenden Verhaltensänderungen im Bluetooth-Stack beachten:
- Neuer Verknüpfungskontext: Die
ACTION_PAIRING_REQUESTenthält jetzt dieEXTRA_PAIRING_CONTEXTzusätzliche, mit der Apps zwischen einer Standardverknüpfungsanfrage und einem autonomen, vom System initiierten Neuverknüpfungsversuch unterscheiden können. - Bedingte Schlüsselaktualisierungen:Vorhandene Sicherheitsschlüssel werden nur ersetzt, wenn die Neuverknüpfung erfolgreich ist und die neue Verbindung das Sicherheitsniveau der vorherigen Verknüpfung erreicht oder übertrifft.
- Geänderte Intent-Zeitplanung:Der
ACTION_KEY_MISSINGIntent wird jetzt nur gesendet, wenn der autonome Neuverknüpfungsversuch fehlschlägt. Dadurch wird die unnötige Fehlerbehandlung in der App reduziert, wenn das System die Verknüpfung im Hintergrund erfolgreich wiederherstellt. - Benachrichtigung für Nutzer:Das System verwaltet die Neuverknüpfung über neue UI-Benachrichtigungen und ‑Dialogfelder. Nutzer werden aufgefordert, den Neuverknüpfungsversuch zu bestätigen, damit sie über die Wiederverbindung informiert sind.
Hersteller von Peripheriegeräten und Entwickler von Begleit-Apps sollten prüfen, ob Hardware und App Verknüpfungsübergänge ordnungsgemäß verarbeiten. Um dieses Verhalten zu testen, simulieren Sie einen Verlust der Remote-Verknüpfung mit einer der folgenden Methoden:
- Entfernen Sie die Verknüpfungsinformationen manuell vom Peripheriegerät.
- Heben Sie die Verknüpfung mit dem Gerät manuell auf: Einstellungen > Verbundene Geräte