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 ändern, 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 von der targetSdkVersion Ihrer App.
Hauptfunktion
Android 17 enthält die folgenden Änderungen, die verschiedene Kernfunktionen des Android-Systems ändern oder erweitern.
Neue sperrfreie 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 jetzt nicht mehr geändert werden
Apps unter Android 17 oder höher, die auf Android 17 (API-Level 37) oder höher ausgerichtet sind, können static final-Felder nicht ändern. Wenn eine App versucht, ein static final-Feld mithilfe der Reflektion zu ändern, wird eine IllegalAccessException ausgelöst. Wenn Sie versuchen, eines dieser Felder über JNI-APIs (z. B. SetStaticLongField()) zu ändern, stürzt die App ab.
Bedienungshilfen
In Android 17 wurden die folgenden Änderungen vorgenommen, um die Bedienungshilfen zu verbessern.
Unterstützung von Bedienungshilfen für die Eingabe über die physische Tastatur bei komplexen IME-Systemen
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 Ereignisse zur Barrierefreiheit 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 Festlegen 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 ein benutzerdefiniertes
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 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, um den Datenschutz für Nutzer zu verbessern.
ECH (Encrypted Client Hello) opportunistisch aktiviert
Mit Android 17 wird die Plattformunterstützung für Encrypted Client Hello (ECH) eingeführt, eine TLS-Erweiterung, die den Datenschutz von Nutzern verbessert, indem sie die Server Name Indication (SNI) im TLS-Handshake verschlüsselt. Diese Verschlüsselung verhindert, dass Netzwerkbeobachter die spezifische Domain, mit der Ihre App eine Verbindung herstellt, leicht identifizieren können.
Bei Apps, die auf Android 17 (API-Level 37) oder höher ausgerichtet sind, wird ECH opportunistisch für TLS-Verbindungen verwendet. ECH ist nur aktiv, wenn die von der App verwendete Netzwerkbibliothek (z. B. HttpEngine, WebView oder OkHttp) die ECH-Unterstützung integriert hat und der Remoteserver das ECH-Protokoll ebenfalls unterstützt. Wenn ECH nicht ausgehandelt werden kann, wird die Verbindung automatisch auf einen Standard-TLS-Handshake ohne SNI-Verschlüsselung zurückgesetzt.
Damit Apps dieses Verhalten anpassen können, wird in Android 17 der Konfigurationsdatei für die Netzwerksicherheit ein neues
<domainEncryption>-Element hinzugefügt.
Entwickler können <domainEncryption> innerhalb von <base-config> oder
<domain-config>-Tags verwenden, um einen ECH-Modus (z. B.
"opportunistic", "enabled" oder "disabled") global oder pro Domain
auszuwählen.
Weitere Informationen finden Sie in der Dokumentation zu Encrypted Client Hello.
Berechtigung für das lokale Netzwerk für Apps erforderlich, die auf Android 17 ausgerichtet sind
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
If an app targets Android 17 (API level 37) or higher and the user is using
a physical input device (for example, an external keyboard), the Android
operating system applies the new show_passwords_physical setting to all
characters in the password field. By default, that setting hides all password
characters.
The Android system shows the last-typed password character to help the user see if they mistyped the password. However, this is much less necessary with larger external keyboards. In addition, devices with external keyboards often have larger displays, which increases the danger of someone seeing the typed password.
If the user is using the device's touchscreen, the system applies the new
show_passwords_touch setting.
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, Interaction Hijacking und Confused Deputy-Angriffe zu minimieren. Mit diesem Update müssen Entwickler neue Sicherheitsstandards explizit aktivieren, um die Kompatibilität ihrer Apps und den Schutz ihrer Nutzer zu gewährleisten.
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 Einhaltung zukünftiger SDK-Anforderungen für die Zielgruppe 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.
Sicherere 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 personenbezogenen Daten 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
For apps targeting Android 17 (API level Android 17 (API level 37)) and
higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when
the ContactsContract.Data table is accessed without
READ_CONTACTS permission.
With this change, if an app doesn't have READ_CONTACTS
permission, StrictColumns and
StrictGrammar options are set when querying
the ContactsContract.Data table. If a query
uses a pattern that isn't compatible with these, it will be
rejected and cause an exception to be thrown.
Formfaktoren von Geräten
Android 17 enthält die folgenden Änderungen, um die Nutzerfreundlichkeit auf einer Reihe von Geräten mit unterschiedlichen Größen und Formfaktoren zu verbessern.
Änderungen an der Plattform-API, um Einschränkungen für Ausrichtung, Größenänderung und Seitenverhältnis auf großen Displays zu ignorieren (sw>=600dp)
We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 (API level 37) or higher.
For more information, see Restrictions on orientation and resizability are ignored.