Wie bei früheren Versionen enthält Android 17 Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten ausschließlich für Apps, die auf Android 17 oder höher ausgerichtet sind. Wenn Ihre App auf Android 17 oder höher ausgerichtet ist, sollten Sie sie gegebenenfalls so anpassen, dass sie diese Verhaltensweisen unterstützt.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich auf alle Apps auswirken, die unter Android 17 ausgeführt werden, unabhängig vom targetSdkVersion Ihrer App.
Nutzererfahrung und System-UI
Android 17 enthält die folgenden Änderungen, die für eine einheitlichere und intuitivere Nutzererfahrung sorgen sollen.
Widget „Arbeitsspeicherlimit“
Beginning with Android 17, for apps targeting
Android 17 (API level 37) or higher, the system enforces a strict memory
limit (1.5 * screen width * screen height * 4) against the combined memory usage
of both Bitmaps and Icons present in the RemoteViews parcel. Exceeding these
limits throws a fatal IllegalArgumentException and crashes the app's process.
For more information, see UpdateAppWidget.
Hauptfunktion
Android 17 umfasst die folgenden Änderungen, die verschiedene Kernfunktionen des Android-Systems modifizieren oder erweitern.
Neue sperrenfreie Implementierung von MessageQueue
Beginning with Android 17, apps targeting Android 17 (API level 37)
or higher receive a new lock-free implementation of
android.os.MessageQueue. The new implementation improves performance and
reduces missed frames, but may break clients that reflect on MessageQueue
private fields and methods.
For more information, including mitigation strategies, see MessageQueue behavior change guidance.
Statische finale Felder können nicht mehr geändert werden
Apps running on Android 17 or higher that target
Android 17 (API level 37) or higher cannot change static final fields. If
an app attempts to change a static final field by using reflection, it will
cause an IllegalAccessException. Attempting to modify one of these fields
through JNI APIs (such as SetStaticLongField()) will cause the app to crash.
Bedienungshilfen
In Android 17 werden die folgenden Änderungen vorgenommen, um die Barrierefreiheit zu verbessern.
Unterstützung von Bedienungshilfen für die Eingabe über physische Tastaturen mit komplexen IME-Methoden
Mit dieser Funktion werden neue AccessibilityEvent- und TextAttribute-APIs eingeführt, um das gesprochene Feedback von Screenreadern für die Eingabe von CJKV-Sprachen zu verbessern. CJKV-IME-Apps können jetzt signalisieren, ob während der Texterstellung ein Kandidat für die Textkonvertierung ausgewählt wurde. Apps mit Bearbeitungsfeldern können Textänderungstypen angeben, wenn sie Barrierefreiheitsereignisse für geänderten Text senden.
Apps können beispielsweise angeben, dass während der Texterstellung eine Textänderung vorgenommen wurde oder dass eine Textänderung durch einen Commit erfolgt ist.
So können Bedienungshilfen wie Screenreader genaueres Feedback geben, das auf der Art der Textänderung basiert.
App-Akzeptanz
IME-Apps:Beim Verfassen von Text in Bearbeitungsfeldern können IMEs mit
TextAttribute.Builder.setTextSuggestionSelected()angeben, ob ein bestimmter Konvertierungskandidat ausgewählt wurde.Apps mit „Felder bearbeiten“:Apps, die eine benutzerdefinierte
InputConnectionverwalten, können Kandidatenauswahldaten abrufen, indem sieTextAttribute.isTextSuggestionSelected()aufrufen. Diese Apps sollten dannAccessibilityEvent.setTextChangeTypes()aufrufen, wennTYPE_VIEW_TEXT_CHANGED-Ereignisse gesendet werden. Bei Apps, die auf Android 17 (API-Level 37) ausgerichtet sind und die Standard-TextViewverwenden, ist diese Funktion standardmäßig aktiviert.TextViewist also für das Abrufen von Daten aus der IME und das Festlegen von Textänderungstypen beim Senden von Ereignissen an Barrierefreiheitsdienste zuständig.Bedienungshilfen:Bedienungshilfen, die
TYPE_VIEW_TEXT_CHANGED-Ereignisse verarbeiten, könnenAccessibilityEvent.getTextChangeTypes()aufrufen, um die Art der Änderung zu ermitteln und ihre Feedbackstrategien entsprechend anzupassen.
Datenschutz
Android 17 enthält die folgenden Änderungen zur Verbesserung des Datenschutzes für Nutzer.
ECH (Encrypted Client Hello) aktiviert
Android 17 introduces platform support for Encrypted Client Hello (ECH), a TLS extension that enhances user privacy by encrypting the Server Name Indication (SNI) in the TLS handshake. This encryption helps prevent network observers from easily identifying the specific domain your app is connecting to.
For apps targeting Android 17 (API level 37) or higher, ECH is used for TLS connections. ECH is active only if the networking library used by the app (for example, HttpEngine, WebView, or OkHttp) has integrated ECH support and the remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See RFC 9849 for more details on how ECH GREASE works.
To allow apps to customize this behavior, Android 17 adds a new
<domainEncryption> element to the Network Security Configuration file.
Developers can use <domainEncryption> within <base-config> or
<domain-config> tags to select an ECH mode (for example,
"enabled" or "disabled") on a global or per-domain basis.
For more information, see the Encrypted Client Hello documentation.
Berechtigung für das lokale Netzwerk für Apps, die auf Android 17 ausgerichtet sind, erforderlich
Android 17 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
Passwörter auf physischen Geräten ausblenden
Wenn eine App auf Android 17 (API‑Level 37) oder höher ausgerichtet ist und der Nutzer ein physisches Eingabegerät (z. B. eine externe Tastatur) verwendet, wendet das Android-Betriebssystem die neue Einstellung show_passwords_physical auf alle Zeichen im Passwortfeld an. Standardmäßig werden alle Passwortzeichen ausgeblendet.
Das Android-System zeigt das zuletzt eingegebene Passwortzeichen an, damit der Nutzer sehen kann, ob er das Passwort falsch eingegeben hat. Bei größeren externen Tastaturen ist dies jedoch viel weniger notwendig. Außerdem haben Geräte mit externen Tastaturen oft größere Displays, was die Gefahr erhöht, dass jemand das eingegebene Passwort sieht.
Wenn der Nutzer den Touchscreen des Geräts verwendet, wendet das System die neue Einstellung show_passwords_touch an.
OTP-Schutz für Standard-SMS-Nachrichten
Ab Android 17 wird der SMS-OTP-Schutz von Android auf Standard-SMS-Nachrichten ausgeweitet (SMS-Nachrichten mit einem OTP, die nicht das WebOTP- oder SMS Retriever-Format verwenden). Bei den meisten Apps, die auf Android 17 (API‑Level 37) oder höher ausgerichtet sind, sind diese SMS erst drei Stunden nach Erhalt verfügbar. Diese Verzögerung soll dazu beitragen, das Abfangen von Einmalpasswörtern zu verhindern. Während dieser dreistündigen Verzögerung wird die SMS_RECEIVED_ACTION-Übertragung zurückgehalten und die Datenbankabfragen des SMS-Anbieters werden gefiltert. Die SMS ist nach der Verzögerung für diese Apps verfügbar.
Bestimmte Apps wie die standardmäßige SMS-Assistenten-App oder Companion-Apps für verbundene Geräte sind von dieser Verzögerung ausgenommen. Alle Apps, die zum Extrahieren von Einmalpasswörtern auf das Lesen von SMS angewiesen sind, sollten zur Aufrechterhaltung der Funktionalität auf die APIs SMS Retriever oder SMS User Consent umgestellt werden.
Sicherheit
In Android 17 wurden die folgenden Verbesserungen an der Geräte- und App-Sicherheit vorgenommen.
Aktivitätssicherheit
In Android 17 wird die Plattform weiterhin in Richtung einer „secure-by-default“-Architektur verschoben. Es werden eine Reihe von Verbesserungen eingeführt, die darauf ausgelegt sind, Exploits mit hohem Schweregrad wie Phishing, Hijacking von Interaktionen und Confused Deputy-Angriffe zu minimieren. Mit diesem Update müssen Entwickler explizit in neue Sicherheitsstandards einwilligen, um die App-Kompatibilität und den Nutzerschutz aufrechtzuerhalten.
Wichtige Auswirkungen für Entwickler:
- BAL-Härtung und verbesserte Einwilligung: Wir optimieren die Einschränkungen für den Start von Hintergrundaktivitäten (Background Activity Launch, BAL), indem wir den Schutz auf
IntentSenderausweiten. Entwickler müssen die alte KonstanteMODE_BACKGROUND_ACTIVITY_START_ALLOWEDnicht mehr verwenden. Stattdessen sollten Sie detaillierte Steuerelemente wieMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLEverwenden, die den Start von Aktivitäten auf Szenarien beschränken, in denen die aufrufende App sichtbar ist. Dadurch wird die Angriffsfläche erheblich verringert. - Tools zur Einführung:Entwickler sollten den Strict-Modus und aktualisierte Lint-Prüfungen verwenden, um alte Muster zu erkennen und die Kompatibilität mit zukünftigen Anforderungen an das Ziel-SDK sicherzustellen.
CT standardmäßig aktivieren
Wenn eine App auf Android 17 (API‑Level 37) oder höher ausgerichtet ist, ist Certificate Transparency (CT) standardmäßig aktiviert. Unter Android 16 ist CT verfügbar, aber Apps mussten aktiviert werden.
Safer Native DCL—C
If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.
All native files loaded using System.load() must be marked as read-only.
Otherwise, the system throws UnsatisfiedLinkError.
We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
Felder mit personenidentifizierbaren Informationen in der CP2-Datenansicht einschränken
Bei Apps, die auf Android 17 (API-Level 37) und höher ausgerichtet sind, werden in Contacts Provider 2 (CP2) bestimmte Spalten mit personenidentifizierbaren Informationen aus der Datenansicht entfernt. Wenn diese Änderung aktiviert ist, werden diese Spalten aus der Datenansicht entfernt, um den Datenschutz der Nutzer zu verbessern. Die eingeschränkten Spalten sind:
Apps, die diese Spalten aus ContactsContract.Data verwenden, können sie stattdessen aus ContactsContract.RawContacts extrahieren, indem sie mit RAW_CONTACT_ID verknüpft werden.
Strikte SQL-Prüfungen in CP2 erzwingen
Bei Apps, die auf Android 17 (API-Level 37) und höher ausgerichtet sind, erzwingt Contacts Provider 2 (CP2) eine strenge SQL-Abfragevalidierung, wenn ohne die Berechtigung READ_CONTACTS auf die Tabelle ContactsContract.Data zugegriffen wird.
Wenn eine App nicht die Berechtigung READ_CONTACTS hat, werden mit dieser Änderung beim Abfragen der Tabelle ContactsContract.Data die Optionen StrictColumns und StrictGrammar festgelegt. Wenn eine Abfrage ein Muster verwendet, das nicht mit diesen kompatibel ist, wird sie abgelehnt und es wird eine Ausnahme ausgelöst.
Intelligenz
Android 17 enthält die folgenden Änderungen an der System-KI.
Einstellung von setContentCaptureEnabled
Content Capture is enabled by default on certain devices to allow on-device AI features to analyze screen contents for intelligent experiences.
Starting in Android 17, the
ContentCaptureManager.setContentCaptureEnabled(boolean)
API method is deprecated. For apps that target Android 17 (API level 37) or
higher, calling setContentCaptureEnabled(false) no longer disables Content
Capture.
If your app needs to continue disabling Content Capture or restrict screen
contents from being captured by the system, you must transition to using the
FLAG_SECURE window layout parameter.
To disable Content Capture, set the FLAG_SECURE flag on your window as shown
in the following example:
Kotlin
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
Java
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
For more details, see the
WindowManager.LayoutParams.FLAG_SECURE reference
documentation.
Medien
Android 17 enthält die folgenden Änderungen am Media-Verhalten.
Härtung von Audio im Hintergrund
Ab Android 17 werden im Audio-Framework Einschränkungen für Audiointeraktionen im Hintergrund erzwungen, darunter Audiowiedergabe, Audiofokus-Anfragen und Lautstärkeänderungs-APIs. So soll sichergestellt werden, dass diese Änderungen vom Nutzer initiiert werden.
Für alle Apps gelten bestimmte Audioeinschränkungen. Die Einschränkungen sind jedoch strenger, wenn eine App auf Android 17 (API‑Level 37) ausgerichtet ist. Wenn eine dieser Apps im Hintergrund mit Audio interagiert, muss ein Dienst im Vordergrund ausgeführt werden. Außerdem muss die App eine oder beide der folgenden Anforderungen erfüllen:
- Der Dienst im Vordergrund muss die Berechtigung „Während der Nutzung“ haben.
- Die App muss die Berechtigung exact alarm haben und mit
USAGE_ALARM-Audiostreams interagieren.
Weitere Informationen, einschließlich Strategien zur Risikominderung, finden Sie unter Härten von Hintergrundaudio.
Formfaktoren von Geräten
Android 17 enthält die folgenden Änderungen, um die Nutzerfreundlichkeit auf einer Reihe von Gerätegrößen und ‑formfaktoren zu verbessern.
Plattform-API-Änderungen zum Ignorieren von Einschränkungen für Ausrichtung, Größenänderung und Seitenverhältnis auf großen Displays (sw>=600dp)
In Android 16 haben wir Änderungen an der Plattform-API eingeführt, um Einschränkungen für Ausrichtung, Seitenverhältnis und Größenänderung auf großen Displays (sw >= 600 dp) zu ignorieren für Apps, die auf API-Level 36 oder höher ausgerichtet sind. Entwickler haben die Möglichkeit, diese Änderungen mit SDK 36 zu deaktivieren. Diese Deaktivierung ist jedoch nicht mehr für Apps verfügbar, die auf Android 17 (API-Level 37) oder höher ausgerichtet sind.
Weitere Informationen finden Sie unter Einschränkungen für Ausrichtung und Größenänderung werden ignoriert.
Konnektivität
In Android 17 wird die folgende Änderung eingeführt, um die Konsistenz zu verbessern und das Verhalten von Bluetooth-RFCOMM-Sockets an das Standardverhalten von Java InputStream anzupassen.
Einheitliches BluetoothSocket-read()-Verhalten für RFCOMM
Bei Apps, die auf Android 17 (API-Level 37) ausgerichtet sind, gibt die Methode read() des InputStream, der von einem RFCOMM-basierten BluetoothSocket stammt, jetzt -1 zurück, wenn der Socket geschlossen oder die Verbindung getrennt wird.
Diese Änderung sorgt dafür, dass sich RFCOMM-Sockets genauso verhalten wie LE CoC-Sockets. Außerdem wird die Standarddokumentation InputStream.read() eingehalten, in der angegeben ist, dass -1 zurückgegeben wird, wenn das Ende des Streams erreicht ist.
Apps, die sich ausschließlich darauf verlassen, eine IOException abzufangen, um eine Leseschleife zu beenden, sind möglicherweise von dieser Änderung betroffen. Sie sollten die BluetoothSocket-Leseschleifen aktualisieren, um explizit nach einem Rückgabewert von -1 zu suchen. So wird sichergestellt, dass die Schleife korrekt beendet wird, wenn die Verbindung zum Remote-Gerät getrennt oder der Socket geschlossen wird. Ein Beispiel für die empfohlene Implementierung finden Sie im Code-Snippet im Leitfaden Bluetooth-Daten übertragen.