Die Android 17-Plattform enthält 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 dann gegebenenfalls so ändern, dass sie diese Änderungen unterstützt.
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 ändern oder erweitern.
App-Arbeitsspeicherlimits
Mit Android 17 werden App-Speicherlimits eingeführt, die auf dem gesamten RAM des Geräts basieren. So soll eine stabilere und deterministischere Umgebung für Ihre Anwendungen und Android-Nutzer geschaffen werden. In Android 17 werden die Limits konservativ festgelegt, um Systembaselines zu erstellen und extreme Speicherlecks und andere Ausreißer zu erkennen, bevor sie systemweite Instabilität verursachen, die zu UI-Rucklern, schneller Akkuentladung und dem Beenden von Apps führt. Wir gehen davon aus, dass die Auswirkungen auf die meisten App-Sitzungen minimal sein werden. Wir empfehlen jedoch die folgenden Best Practices für den Speicher, einschließlich der Festlegung einer Baseline für den Speicher.
Sie können feststellen, ob Ihre App-Sitzung betroffen war, indem Sie
getDescription in ApplicationExitInfo aufrufen. Wenn Ihre App
betroffen war, ist der Grund für das Beenden REASON_OTHER und
die Beschreibung enthält den String "MemoryLimiter:AnonSwap" sowie
weitere Informationen. Sie können auch die triggerbasierte Profilerstellung mit
TRIGGER_TYPE_ANOMALY verwenden, um Heap-Dumps zu erhalten, die erfasst werden, wenn das
Speicherlimit erreicht wird.
Damit Sie Speicherlecks leichter finden können, wurde in Android Studio Panda die LeakCanary-Integration direkt in den Android Studio Profiler als spezielle Aufgabe hinzugefügt. Sie ist in die IDE eingebettet und vollständig in Ihren Quellcode integriert.
Sicherheit
Android 17 enthält die folgenden Verbesserungen für die Geräte- und App-Sicherheit.
Einstellungszeitplan für „usesClearTraffic“
In a future release, we plan to deprecate the usesCleartextTraffic element.
Apps that need to make unencrypted (HTTP) connections should migrate to
using a network security configuration file, which lets you
specify which domains your app needs to make cleartext connections to.
Be aware that network security configuration files are only supported on API levels 24 and higher. If your app has a minimum API level lower than 24, you should do both of the following:
- Set the
usesCleartextTrafficattribute totrue - Use a network configuration file
If your app's minimum API level is 24 or higher, you can use a network
configuration file and you don't need to set usesCleartextTraffic.
Implizite URI-Berechtigungen einschränken
Currently, if an app launches an intent with a URI that has the action Send,
SendMultiple, or ImageCapture, the system automatically grants the read and
write URI permissions to the target app. We plan to change this behavior in
Android 18. For this reason, we recommend that apps explicitly
grant the relevant URI permissions instead of relying on the system to grant
them.
Schlüsselspeicher-Limits pro App
Apps should avoid creating excessive numbers of keys in Android Keystore, because it is a shared resource for all apps on the device. Beginning with Android 17, the system enforces a limit on the number of keys an app can own. The limit is 50,000 keys for non-system apps targeting Android 17 (API level 37) or higher, and 200,000 keys for all other apps. System apps have a limit of 200,000 keys, regardless of which API level they target.
If an app attempts to create keys beyond the limit, the creation fails with a
KeyStoreException. The exception's message string contains information
about the key limit. If the app calls getNumericErrorCode() on the
exception, the return value depends on what API level the app targets:
- Apps targeting Android 17 (API level 37) or higher:
getNumericErrorCode()returns the newERROR_TOO_MANY_KEYSvalue. - All other apps:
getNumericErrorCode()returnsERROR_INCORRECT_USAGE.
Nutzererfahrung und System-UI
Android 17 enthält die folgenden Änderungen, die eine einheitlichere und intuitivere Nutzererfahrung schaffen sollen.
Standardmäßige IME-Sichtbarkeit nach Drehung wiederherstellen
Ab Android 17 wird die vorherige Sichtbarkeit der IME nicht wiederhergestellt, wenn sich die Konfiguration des Geräts ändert (z. B. durch Drehen) und dies nicht von der App selbst verarbeitet wird.
Wenn sich die Konfiguration Ihrer App ändert und die App diese Änderung nicht verarbeitet und das Keyboard nach der Änderung sichtbar sein muss, müssen Sie dies explizit anfordern. Sie können diese Anfrage auf eine der folgenden Arten stellen:
- Legen Sie das Attribut
android:windowSoftInputModeaufstateAlwaysVisiblefest. - Fordern Sie die Bildschirmtastatur programmatisch in der Methode
onCreate()Ihrer Activity an oder fügen Sie die MethodeonConfigurationChanged()hinzu.
Menschliche Eingabe
Android 17 enthält die folgenden Änderungen, die sich auf die Interaktion von Apps mit Eingabegeräten wie Tastaturen und Touchpads auswirken.
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,
die Zeigerbewegungen und Scrollgesten, die durch die Berührungen des Nutzers entstehen, und
meldet sie der App auf dieselbe Weise wie Zeiger- und Mausradbewegungen
einer erfassten Maus. In den meisten Fällen müssen Apps, die erfasste Mäuse unterstützen, daher keine 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, Gesten vom Touchpad zu erkennen, sondern die rohen, absoluten Fingerpositionen in einem ähnlichen Format wie bei 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 Medienverhalten.
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, um die Gerätekonnektivität zu verbessern.
Autonome Neuverknüpfung bei Verlust der Bluetooth-Verbindung
Android 17 introduces autonomous re-pairing, a system-level enhancement designed to automatically resolve Bluetooth bond loss.
Previously, if a bond was lost, users had to manually navigate to Settings to unpair and then re-pair the peripheral. This feature builds upon the security improvement of Android 16 by allowing the system to re-establish bonds in the background without requiring users to manually navigate to Settings to unpair and re-pair peripherals.
While most apps will not require code changes, developers should be aware of the following behavior changes in Bluetooth stack:
- New pairing context: The
ACTION_PAIRING_REQUESTnow includes theEXTRA_PAIRING_CONTEXTextra which allows apps to distinguish between a standard pairing request and an autonomous system-initiated re-pairing attempt. - Conditional key updates: Existing security keys will only be replaced if the re-pairing is successful and new connection meets or exceeds the security level of the previous bond.
- Modified intent timing: The
ACTION_KEY_MISSINGintent is now broadcast only if the autonomous re-pairing attempt fails. This reduces unnecessary error handling in the app if the system successfully recovers the bond in the background. - User notification: The system manages re-pairing via new UI notifications and dialogs. Users will be prompted to confirm the re-pairing attempt to ensure they are aware of the reconnection.
Peripheral device manufacturers and companion app developers should verify that hardware and app gracefully handle bond transitions. To test this behavior, simulate a remote bond loss using either of the following methods:
- Manually remove the bond information from the peripheral device
- Manually unpair the device in: Settings > Connected devices