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.
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.
Keystore-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
Beginning with Android 17, when the device's configuration changes (for example, through rotation), and this is not handled by the app itself, the previous IME visibility is not restored.
If your app undergoes a configuration change that it does not handle, and the app needs the keyboard to be visible after the change, you must explicitly request this. You can make this request in one of the following ways:
- Set the
android:windowSoftInputModeattribute tostateAlwaysVisible. - Programmatically request the soft keyboard in your activity's
onCreate()method, or add theonConfigurationChanged()method.
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
Beginning with Android 17, if an app requests pointer capture using
View.requestPointerCapture() and the user uses a touchpad, the system
recognizes pointer movement and scrolling gestures from the user's touches and
reports them to the app in the same way as pointer and scroll wheel movements
from a captured mouse. In most cases, this removes the need for apps that
support captured mice to add special handling logic for touchpads. For more
details, see the documentation for View.POINTER_CAPTURE_MODE_RELATIVE.
Previously, the system did not attempt to recognize gestures from the touchpad,
and instead delivered the raw, absolute finger locations to the app in a similar
format to touchscreen touches. If an app still requires this absolute data, it
should call the new View.requestPointerCapture(int) method with
View.POINTER_CAPTURE_MODE_ABSOLUTE instead.
Medien
Android 17 enthält die folgenden Änderungen am Media-Verhalten.
Härtung von Audio im Hintergrund
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
If the app tries to call audio APIs while the app is not in a valid lifecycle,
the audio playback and volume change APIs fail silently without throwing an
exception or providing a failure message. The audio focus API fails with the
result code AUDIOFOCUS_REQUEST_FAILED.
For more information, including mitigation strategies, see Background audio hardening.
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