Unter Android 10 wurden Änderungen am Systemverhalten vorgenommen, die sich auf deine App auswirken können.
Die auf dieser Seite aufgeführten Änderungen gelten ausschließlich für Apps mit Ausrichtung auf
API 29 oder höher. Wenn deine App targetSdkVersion
auf „29“ festlegt oder
sollten Sie Ihre App an diese
Verhaltensweisen anpassen,
sofern zutreffend.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die alle Apps betreffen mit Android 10.
Hinweis : Zusätzlich zu den auf dieser Seite aufgeführten Änderungen kann Android 10 führt eine große Anzahl datenschutzbasierter Änderungen und Einschränkungen ein, darunter Folgendes:
- Begrenzter Speicher
- Zugriff auf die Seriennummer des USB-Geräts
- Möglichkeit, WLAN zu aktivieren, zu deaktivieren und zu konfigurieren
- Berechtigungen zur Standortermittlung für Konnektivitäts-APIs
Diese Änderungen betreffen Apps, die auf API-Level 29 oder höher ausgerichtet sind, den Datenschutz für Nutzer zu verbessern. Weitere Informationen zur Unterstützung dieser Änderungen finden Sie unter auf der Seite Änderungen beim Datenschutz.
Aktualisierungen von Einschränkungen für Nicht-SDK-Schnittstellen
Um die Stabilität und Kompatibilität der Apps sicherzustellen, wurden Einschränkungen mit denen Nicht-SDK-Schnittstellen deine App unter Android 9 (API-Level 28) verwenden kann. Android 10 enthält aktualisierte Listen eingeschränkter Nicht-SDK-Schnittstellen basierend auf der Zusammenarbeit mit Android-Entwicklern und die neuesten internen Tests. Unser Ziel ist es, Alternativen sind verfügbar, bevor wir Nicht-SDK-Schnittstellen einschränken.
Wenn deine App nicht auf Android 10 (API-Level 29) ausgerichtet ist, gibt es einige dieser Änderungen nicht sofort betreffen. Obwohl Sie derzeit einige Nicht-SDK-Schnittstellen (abhängig vom Ziel-API-Level Ihrer App) die Verwendung einer Nicht-SDK-Methode oder eines Nicht-SDK-Felds birgt immer ein hohes Risiko, dass Ihre
Wenn Sie sich nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie Ihre App testen, um dies herauszufinden. Wenn Ihre App Nicht-SDK-Schnittstellen benötigt, sollten Sie mit der Planung auf SDK-Alternativen umstellen. Dennoch ist uns bewusst, dass einige Apps Anwendungsfälle für die Verwendung von Nicht-SDK-Schnittstellen. Wenn Sie keine Alternative finden eine Nicht-SDK-Schnittstelle für eine Funktion in Ihrer App nutzen, Neue öffentliche API anfordern
Weitere Informationen findest du unter Updates zu Einschränkungen für Nicht-SDK-Schnittstellen in Android 10. und siehe Einschränkungen für Nicht-SDK-Schnittstellen.
Geteilte Erinnerung
Ashmem hat das Format von Dalvik-Karten in /proc/<pid>/maps geändert. und betrifft Apps, die die Kartendatei direkt parsen. App-Entwickler sollten das Format „/proc/<pid>/maps“ auf Geräten mit Android 10 oder höher testen und entsprechend parsen, wenn die App von Dalvik-Map-Formaten abhängt.
Für Android 10 ausgerichtete Apps können Ashmem nicht direkt verwenden
(/dev/ashmem) und müssen stattdessen über die
ASharedMemory
-Klasse.
Außerdem können Apps keine direkten IOCTLs an vorhandene Ashmem-Dateideskriptoren erstellen.
Stattdessen muss entweder die ASharedMemory
-Klasse des NDK oder die Android-Java-
APIs zum Erstellen von Regionen im gemeinsamen Arbeitsspeicher Diese Änderung erhöht die Sicherheit und
Robustheit bei der Arbeit mit gemeinsam genutztem Arbeitsspeicher, wodurch Leistung und Sicherheit verbessert werden
von Android insgesamt.
Ausführungsberechtigung für Basisverzeichnis der App entfernt
Die Ausführung von Dateien aus dem beschreibbaren Basisverzeichnis der App ist ein W^X-Verstoß. Apps sollten nur den Binärcode laden, der in der APK-Datei einer App eingebettet ist.
Nicht vertrauenswürdige Apps, die auf Android 10 ausgerichtet sind, können execve()
nicht aufrufen
direkt für Dateien im Basisverzeichnis der App.
Außerdem können Apps, die auf Android 10 ausgerichtet sind, ausführbaren Code aus Dateien, die mit dlopen()
geöffnet wurden, nicht im Arbeitsspeicher ändern und erwarten, dass diese Änderungen auf die Festplatte geschrieben werden, da die Bibliothek nicht über einen beschreibbaren Dateideskriptor PROT_EXEC
zugeordnet werden kann. Dazu gehören alle
Dateien mit gemeinsam genutzten Objekten (.so
) mit Textverschiebungen
Die Android-Laufzeit akzeptiert nur vom System generierte OAT-Dateien
Die Android-Laufzeit (ART) ruft dex2oat
nicht mehr über die Anwendung auf
. Diese Änderung bedeutet, dass ART nur OAT-Dateien akzeptiert, die vom
generiert hat.
AOT-Korrektheit in ART erzwingen
Früher wurde die von Android-Geräten durchgeführte Kompilierung im Voraus Laufzeit (ART) konnte zu Laufzeitabstürzen führen, wenn die Klassenpfadumgebung nicht bei der Kompilierungszeit und der Laufzeit identisch. Unter Android 10 und höher müssen diese Umgebungskontexte immer gleich sein. Dies führt zu den folgenden Verhaltensänderungen:
- Benutzerdefinierte Lader, also von Apps geschriebene Lader, werden im Gegensatz zu Ladern aus dem Paket
dalvik.system
nicht AOT-kompiliert. Das liegt daran, dass ART zur Laufzeit nicht über die benutzerdefinierte Implementierung der Klassensuche Bescheid weiß. - Sekundäre DEX-Dateien – d. h. die manuell von Apps geladenen DEX-Dateien, die nicht im primäres APK, werden im Hintergrund per AOT kompiliert. Das liegt daran, dass die Erstnutzung kann die Kompilierung zu teuer sein, was zu unerwünschter Latenz Ausführung. Beachten Sie, dass es bei Apps die Aufteilung von Splits und die Abkehr von sekundären DEX-Dateien werden empfohlen.
- Freigegebene Bibliotheken in Android (die Einträge <library> und <uses-library> in einem Android-Manifest) werden mit einer anderen Hierarchie des Klassenladers implementiert als in früheren Versionen der Plattform.
Änderungen an Berechtigungen für Fullscreen-Intents
Apps, die auf Android 10 oder höher ausgerichtet sind und Benachrichtigungen mit
Vollbild
Intents müssen
die
USE_FULL_SCREEN_INTENT
in der Manifest-Datei der App. Da es sich um eine normale Berechtigung handelt, wird sie der anfragenden App automatisch gewährt.
Wenn eine App, die auf Android 10 oder höher ausgerichtet ist, versucht, eine Benachrichtigung mit einem Full-Screen-Intent zu erstellen, ohne die erforderliche Berechtigung anzufordern, ignoriert das System den Full-Screen-Intent und gibt die folgende Protokollmeldung aus:
Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
Unterstützung faltbarer Geräte
Unter Android 10 gibt es Änderungen, die faltbare Geräte und Geräte mit großem Display unterstützen.
Wenn eine App unter Android 10 läuft,
onResume()
und
onPause()
-Methoden funktionieren
unterschiedlich. Wenn mehrere Apps gleichzeitig im Mehrfenstermodus oder
Multi-Display-Modus, alle fokussierbaren Top-Aktivitäten in sichtbaren Stacks
wieder aktiviert sind, aber nur eine davon, die „höchste fortgesetzt“, Aktivitäten,
der Fokus liegt. Bei älteren Versionen als Android 10 wird nur eine
können einzelne Aktivitäten im System fortgesetzt werden, alle anderen sichtbaren
Aktivitäten pausiert sind.
„Fokus“ nicht verwechseln mit dem „höchsten fortgesetzt“ Aktivitäten. Das System weist der Prioritäten zu Aktivitäten basierend auf der Z-Reihenfolge, um den die Aktivitäten, mit denen der Nutzer zuletzt interagiert hat. Eine Aktivität kann oben fortgesetzt, aber nicht im Fokus (wenn beispielsweise die Benachrichtigungsleiste maximiert).
Unter Android 10 (API-Level 29) und höher können Sie den
onTopResumedActivityChanged()
-Callback
um benachrichtigt zu werden, wenn Ihre Aktivität die oberste
. Dies entspricht dem Status „Fortsetzen“ vor Android 10 und kann nützlich sein.
um zu sehen, ob Ihre App exklusive oder Singleton-Ressourcen verwendet, die möglicherweise
die mit anderen Apps geteilt werden.
Auch das Verhalten des Manifestattributs resizeableActivity
hat sich geändert. Wenn eine App
resizeableActivity=false
unter Android 10 (API-Level 29) oder höher verwenden, wird möglicherweise in den Kompatibilitätsmodus versetzt
wenn sich die verfügbare Bildschirmgröße ändert oder die App von einem Bildschirm
eine andere.
Apps können die
android:minAspectRatio
das in Android 10 eingeführt wurde, um den Bildschirm
Seitenverhältnisse, die Ihre App unterstützt.
Ab Version 3.5 enthält das Emulator-Tool von Android Studio virtuelle Geräte mit einem Bildschirm von 7,3 Zoll und 8 Zoll, um Ihren Code auf größeren Bildschirmen zu testen.
Weitere Informationen finden Sie unter Apps für faltbare Geräte entwickeln.