Android 10 enthält Verhaltensänderungen, die sich auf deine App auswirken können.
Die auf dieser Seite aufgeführten Änderungen gelten für Ihre App, wenn sie ausgeführt wird
unter Android 10, unabhängig vom targetSdkVersion
der App. Sie sollten
und passen Sie sie bei Bedarf an, damit diese Änderungen korrekt unterstützt werden.
Wenn die targetSdkVersion deiner App 29
oder höher ist, musst du außerdem Folgendes tun:
zusätzliche Änderungen
unterstützen. Lesen Sie unbedingt den Artikel Verhaltensänderungen bei Apps
Targeting 29 finden Sie weitere Informationen.
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:
- Hintergrundzugriff auf Gerätestandort
- Start der Hintergrundaktivität
- Affinitätsinformationen zu Kontakten
- Randomisierung der MAC-Adresse
- Kamerametadaten
- Berechtigungsmodell
Diese Änderungen betreffen alle Apps und verbessern den Datenschutz für Nutzer. Weitere Informationen über wie diese Änderungen umgesetzt werden können, Seite Änderungen beim Datenschutz.
Einschränkungen für Nicht-SDK-Schnittstellen
Um die Stabilität und Kompatibilität von Apps zu verbessern, hat die Plattform damit begonnen, einzuschränken, welche nicht zu SDKs gehörenden Schnittstellen Ihre 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 nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie Ihre App testen, finden Sie es heraus. 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 finden Sie unter Änderungen an den Einschränkungen für Nicht-SDK-Schnittstellen in Android 10 und Einschränkungen für Nicht-SDK-Schnittstellen.
Bedienung über Gesten
Ab Android 10 können Nutzer die Bedienung über Gesten auf dem . Wenn ein Nutzer die Bedienung über Gesten aktiviert, wirkt sich dies auf alle Apps auf dem Gerät unabhängig davon, ob die App auf API-Level 29 ausgerichtet ist. Wischt die nutzende Person beispielsweise vom Bildschirmrand erfasst, interpretiert das System diese Geste als „Zurück“- Navigation, es sei denn, eine App überschreibt diese Geste ausdrücklich für Teile des auf dem Bildschirm.
Damit Ihre App mit der Bedienung über Gesten kompatibel ist, sollten Sie die und mit in Konflikt stehenden Gesten konsequent umgehen zu können. Weitere Informationen finden Sie in der Dokumentation zur Gestennavigation.
Logo: NDK
Android 10 umfasst die folgenden NDK-Änderungen.
Gemeinsam genutzte Objekte dürfen keine Textverschiebungen enthalten
Android 6.0 (API-Level 23) Unzulässige Verwendung von Textverschiebungen in gemeinsamen Objekten. Der Code muss unverändert geladen werden und darf nicht geändert werden. Durch diese Änderung werden die Ladezeiten und die Sicherheit von Apps verbessert.
SELinux erzwingt diese Einschränkung für Apps, die auf Android 10 oder höher ausgerichtet sind. Wenn diese Apps weiterhin freigegebene Objekte verwenden, die Textumordnungen enthalten, besteht ein hohes Risiko, dass sie nicht mehr funktionieren.
Änderungen an Bionic-Bibliotheken und dynamischen Verknüpfungspfaden
Ab Android 10 sind mehrere Pfade symbolische Links statt normalen Dateien. Apps, die bisher reguläre Dateien als Pfade verwendet haben könnte fehlerhaft sein:
/system/lib/libc.so
->/apex/com.android.runtime/lib/bionic/libc.so
/system/lib/libm.so
->/apex/com.android.runtime/lib/bionic/libm.so
/system/lib/libdl.so
->/apex/com.android.runtime/lib/bionic/libdl.so
/system/bin/linker
->/apex/com.android.runtime/bin/linker
Diese Änderungen gelten auch für die 64-Bit-Varianten der Datei, wobei
lib/
durch lib64/
ersetzt.
Aus Kompatibilitätsgründen werden die Symlinks unter den alten Pfaden bereitgestellt. Beispielsweise ist /system/lib/libc.so
ein Symlink zu /apex/com.android.runtime/lib/bionic/libc.so
. Also
dlopen(“/system/lib/libc.so”)
funktioniert weiterhin, aber Apps finden
wenn sie tatsächlich versuchen,
die geladenen Bibliotheken zu untersuchen,
/proc/self/maps
oder ähnlich, was nicht üblich ist, aber wir haben festgestellt,
einige Apps tun dies als Teil ihres Anti-Hacking-Prozesses. Wenn ja, wird der
/apex/…
-Pfade sollten als gültige Pfade für die Bionic-Dateien hinzugefügt werden.
Systembinärdateien/-bibliotheken, die dem Ausführungsspeicher zugeordnet sind
Ab Android 10 werden ausführbare Segmente von System-Binärdateien
und die Bibliotheken
werden zur Härtung in einen schreibgeschützten
Methode zum Schutz vor
Angriffen aus der Code-Wiederverwendung. Wenn Ihre App Lesevorgänge in Speichersegmente ausführt, die als „Nur ausführen“ gekennzeichnet sind, sendet das System ein SIGSEGV
-Signal an Ihre App. Dies kann aufgrund eines Bugs, einer Sicherheitslücke oder einer beabsichtigten Speicherprüfung geschehen.
Sie können herausfinden, ob dieses Verhalten zu einem Absturz geführt hat, indem Sie die zugehörigen
Tombstone-Datei in /data/tombstones/
. Ein Absturz im Zusammenhang mit der Ausführung enthält die folgende Abbruchsmeldung:
Cause: execute-only (no-read) memory access error; likely due to data in .text.
Um dieses Problem zu umgehen und Vorgänge wie die Speicherprüfung auszuführen, können Sie Lese-/Ausführungssegmente durch Aufrufen von mprotect()
als Lese-/Ausführungssegmente kennzeichnen. Wir empfehlen jedoch dringend,
nur nach der Ausführung ausführen, da diese Einstellung
Schutz für Ihre App und Ihre Nutzer.
Sicherheit
Android 10 umfasst die folgenden Sicherheitsänderungen.
TLS 1.3 standardmäßig aktiviert
Unter Android 10 und höher ist TLS 1.3 standardmäßig für alle TLS-Verbindungen aktiviert. Hier ein paar wichtige Details zu TLS 1.3 Implementierung:
- Die TLS 1.3-Cipher Suites können nicht angepasst werden. Die unterstützten TLS 1.3-Chiffrengruppen sind immer aktiviert, wenn TLS 1.3 aktiviert ist. Jeder Versuch einer Deaktivierung
aufrufen, indem Sie
setEnabledCipherSuites()
wird ignoriert. - Wenn TLS 1.3 verhandelt wird, werden
HandshakeCompletedListener
-Objekte vor dem Hinzufügen von Sitzungen zum Sitzungscache aufgerufen. In TLS 1.2 und anderen früheren Versionen werden diese Objekte nach dem Hinzufügen von Sitzungen zum Sitzungscache aufgerufen. - In einigen Situationen, in denen
SSLEngine
-InstanzenSSLHandshakeException
aktiviert früheren Android-Versionen lösen diese Instanzen eine StattdessenSSLProtocolException
Android 10 und höher. - Der 0-RTT-Modus wird nicht unterstützt.
Bei Bedarf können Sie eine SSLContext
abrufen, für die TLS 1.3 deaktiviert ist, indem Sie Folgendes aufrufen:
SSLContext.getInstance("TLSv1.2")
Sie können Protokollversionen auch für jede Verbindung aktivieren oder deaktivieren.
setEnabledProtocols()
wird angerufen
auf ein geeignetes Objekt.
Mit SHA-1 signierte Zertifikate werden in TLS nicht als vertrauenswürdig eingestuft
Zertifikate unter Android 10, die den SHA-1-Hash-Algorithmus verwenden bei TLS-Verbindungen nicht vertrauenswürdig sind. Root-Zertifizierungsstellen haben kein solches Zertifikat ausgestellt und werden in Chrome und anderen gängigen Browsern nicht mehr vertraut.
Ein Verbindungsversuch schlägt fehl, wenn die Verbindung zu einer Website erfolgt, die ein mit SHA-1.
Änderungen und Verbesserungen des KeyChain-Verhaltens
In einigen Browsern wie Google Chrome können Nutzer ein Zertifikat auswählen, wenn ein TLS-Server im Rahmen eines TLS-Handshakes eine Zertifikatsanfrage sendet. Ab Android 10 werden bei KeyChain
-Objekten die Aussteller und Schlüsselspezifikationsparameter berücksichtigt, wenn KeyChain.choosePrivateKeyAlias()
aufgerufen wird, um Nutzern eine Aufforderung zur Zertifikatsauswahl anzuzeigen. Insbesondere geht es bei dieser Aufforderung nicht
Auswahlmöglichkeiten enthalten, die nicht den Serverspezifikationen entsprechen.
Wenn keine Zertifikate verfügbar sind, die vom Nutzer ausgewählt werden können, z. B. mit der Serverspezifikation übereinstimmen oder auf einem Gerät keine Zertifikate installiert haben, wird die Aufforderung zur Zertifikatsauswahl nicht angezeigt.
Außerdem ist es auf Geräten mit Android 10 oder höher nicht erforderlich,
Displaysperre, um Schlüssel oder CA-Zertifikate in ein KeyChain
-Objekt zu importieren.
Weitere Änderungen bei TLS und Kryptografie
An den TLS- und Kryptografiebibliotheken wurden einige kleinere Änderungen vorgenommen, ab Android 10 wirksam werden:
- Die Chiffren AES/GCM/NoPadding und ChaCha20/Poly1305/NoPadding geben mehr zurück
korrekte Puffergrößen von
getOutputSize()
. - Die
TLS_FALLBACK_SCSV
-Chiffrensammlung wird bei Verbindungsversuchen mit einem maximalen Protokoll von TLS 1.2 oder höher nicht berücksichtigt. Aufgrund von Verbesserungen am TLS-Server -Implementierungen, raten wir von einem externen TLS-Fallback ab. Stattdessen empfehlen wir die TLS-Versionenverhandlung. - ChaCha20-Poly1305 ist ein Alias für ChaCha20/Poly1305/NoPadding.
- Hostnamen mit abschließenden Punkten werden nicht als gültige SNI-Hostnamen betrachtet.
- Die Erweiterung „supported_signature_algorithms“ in
CertificateRequest
ist bei der Auswahl eines Signaturschlüssels für Zertifikatantworten berücksichtigt. - Undurchsichtige Signaturschlüssel wie diejenigen aus dem Android Keystore können mit RSA-PSS-Signaturen in TLS.
Wi-Fi Direct-Übertragungen
Unter Android 10: die folgenden Broadcasts in Zusammenhang mit WLAN Direkt sind nicht fixiert:
Wenn deine App diese Broadcasts bei der Registrierung bisher erhalten hat,
sie fixiert waren, verwenden Sie bei der Initialisierung die entsprechende get()
-Methode,
stattdessen die Informationen zu erhalten.
Wi-Fi Aware-Funktionen
Android 10 unterstützt das Erstellen von TCP/UDP-Sockets mithilfe von Wi‑Fi Aware-Datenpaden. Zum Erstellen eines TCP/UDP-Sockets, der eine Verbindung zu einem ServerSocket
herstellt, muss der Client
muss das Gerät die IPv6-Adresse und den Port des Servers kennen. Dies hatte zuvor
eine Out-of-Band-Kommunikation, z. B. BT oder Wi-Fi Aware.
2-Messaging oder In-Band-Erkennung mithilfe anderer Protokolle, wie z. B. mDNS. Mit
Android 10 können diese Informationen im Rahmen der Netzwerkeinrichtung übermittelt werden.
Der Server kann eine der folgenden Aktionen ausführen:
- Initialisieren Sie eine
ServerSocket
und legen Sie den zu verwendenden Port fest oder holen Sie ihn ab. - Geben Sie die Portinformationen als Teil der Wi-Fi Aware-Netzwerkanfrage an.
Im folgenden Codebeispiel wird gezeigt, wie Portinformationen als Teil der Netzwerkanfrage angegeben werden:
Kotlin
val ss = ServerSocket() val ns = WifiAwareNetworkSpecifier.Builder(discoverySession, peerHandle) .setPskPassphrase("some-password") .setPort(ss.localPort) .build() val myNetworkRequest = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE) .setNetworkSpecifier(ns) .build()
Java
ServerSocket ss = new ServerSocket(); WifiAwareNetworkSpecifier ns = new WifiAwareNetworkSpecifier .Builder(discoverySession, peerHandle) .setPskPassphrase(“some-password”) .setPort(ss.getLocalPort()) .build(); NetworkRequest myNetworkRequest = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE) .setNetworkSpecifier(ns) .build();
Der Client führt dann eine Wi‑Fi Aware-Netzwerkanfrage aus, um die vom Server bereitgestellte IPv6-Adresse und den Port abzurufen:
Kotlin
val callback = object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { ... } override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) { ... } override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { ... val ti = networkCapabilities.transportInfo if (ti is WifiAwareNetworkInfo) { val peerAddress = ti.peerIpv6Addr val peerPort = ti.port } } override fun onLost(network: Network) { ... } }; connMgr.requestNetwork(networkRequest, callback)
Java
callback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { ... } @Override public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) { ... } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { ... TransportInfo ti = networkCapabilities.getTransportInfo(); if (ti instanceof WifiAwareNetworkInfo) { WifiAwareNetworkInfo info = (WifiAwareNetworkInfo) ti; Inet6Address peerAddress = info.getPeerIpv6Addr(); int peerPort = info.getPort(); } } @Override public void onLost(Network network) { ... } }; connMgr.requestNetwork(networkRequest, callback);
SYSTEM_ALERT_WINDOW auf Go-Geräten
Apps, die auf Geräten mit Android 10 (Go-Edition) ausgeführt werden, können den
SYSTEM_ALERT_WINDOW
Berechtigung. Das liegt daran, dass das Zeichnen von Overlay-Fenstern
zu viel Arbeitsspeicher verbraucht.
was die Leistung von Android-Geräten mit wenig Arbeitsspeicher
Geräte.
Wenn eine App auf einem Gerät der Go-Edition mit Android 9 oder niedriger den
SYSTEM_ALERT_WINDOW
hat, behält die App die Berechtigung auch dann bei, wenn das
auf Android 10 aktualisiert wird. Apps, die das noch nicht
Berechtigung kann nach dem Upgrade des Geräts nicht mehr gewährt werden.
Wenn eine App auf einem Go-Gerät einen Intent mit der Aktion sendet
ACTION_MANAGE_OVERLAY_PERMISSION
,
lehnt das System die Anfrage automatisch ab und leitet den Nutzer zu einer
Auf dem Bildschirm Einstellungen wird angezeigt, dass die Berechtigung nicht erlaubt ist,
verlangsamt das Gerät. Wenn eine App auf einem Go-Gerät einen Anruf durchführt
Settings.canDrawOverlays()
,
gibt die Methode immer "false" zurück. Auch diese Einschränkungen gelten nicht für Apps.
die die Berechtigung SYSTEM_ALERT_WINDOW
erhalten hat, bevor das Gerät
auf Android 10 aktualisiert.
Warnungen für Apps, die auf ältere Android-Versionen ausgerichtet sind
Auf Geräten mit Android 10 oder höher werden Nutzer beim ersten Mal gewarnt werden alle Apps ausgeführt, die auf Android 5.1 (API-Level 22) oder niedriger ausgerichtet sind. Wenn die App vom Nutzer die Gewährung von Berechtigungen erfordert, hat er auch die Möglichkeit, die Berechtigungen der App anzupassen, bevor die App zum ersten Mal ausgeführt werden darf.
Aufgrund der Ziel-API von Google Play Anforderungen, Nutzer sehen diese Warnungen nur, wenn sie eine App ausführen, die nicht aktualisiert wurde vor Kurzem. Für Apps, die über andere App-Shops vertrieben werden, treten im Laufe des Jahres 2019 ähnliche Anforderungen an das Ziel-API-Level in Kraft. Weitere Informationen zu diesen siehe Anforderungen an die Erweiterung des Ziel-API-Levels in 2019
SHA-2-CBC-Cipher Suites entfernt
Die folgenden SHA-2-CBC-Cipher Suites wurden von der Plattform entfernt:
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Diese Cipher Suites sind weniger sicher als ähnliche Cipher Suites, die GCM verwenden. und die meisten Server unterstützen entweder die GCM- und die CBC-Variante dieser Chiffre oder keines davon unterstützen.
App-Nutzung
Mit Android 10 werden die folgenden Verhaltensänderungen im Zusammenhang mit der App-Nutzung eingeführt:
Verbesserungen bei der Nutzung von UsageStats App: Android 10 erfasst die App-Nutzung UsageStats, wenn Apps die im Splitscreen- oder Bild-im-Bild-Modus verwendet werden. Außerdem Unter Android 10 wird die Nutzung von Instant-Apps korrekt erfasst.
Graustufen pro App: Unter Android 10 kann für einzelne Apps ein Graustufenanzeigemodus festgelegt werden.
Ablenkungsstatus pro App: Android 10 kann Apps selektiv auf einen „Ablenkungsstatus“ setzen Wo? werden ihre Benachrichtigungen unterdrückt und nicht als vorgeschlagene Apps angezeigt.
Sperrung und Wiedergabe In Android 10 können gesperrte Apps keine Audioinhalte wiedergeben.
Änderungen der HTTPS-Verbindung
Wenn eine App mit Android 10 null
an
setSSLSocketFactory()
,
ein IllegalArgumentException
erfolgt. In früheren Versionen hatte das Übergeben von null
an setSSLSocketFactory()
denselben Effekt wie das Übergeben der aktuellen Standard-Fabrik.
Die Bibliothek „android.preference“ wurde eingestellt
Die android.preference
-Bibliothek wird mit Android 10 eingestellt.
Entwickler sollten stattdessen die AndroidX-Einstellungsbibliothek verwenden, die Teil der Android-
Jetpack Weitere Ressourcen zur Unterstützung bei der Migration und
finden Sie in den aktualisierten Einstellungen
Leitfaden mit unserem öffentlichen Beispiel
App
und die Referenzdokumentation.
Änderungen an der Dienstprogrammbibliothek für ZIP-Dateien
Mit Android 10 werden die folgenden Änderungen an Klassen im java.util.zip
eingeführt
-Paket, das ZIP-Dateien verarbeitet. Durch diese Änderungen wird das Verhalten der Bibliothek
zwischen Android und anderen Plattformen, die java.util.zip
verwenden, einheitlich sind.
Aufblasgerät
In früheren Versionen haben einige Methoden in der Klasse Inflater
den Fehler ausgelöst.
IllegalStateException
, wenn
wurden nach einem Aufruf von end()
aufgerufen.
In Android 10 lösen diese Methoden eine
NullPointerException
.
ZIP-Datei
Unter Android 10 und höher hat der Konstruktor für
ZipFile
nimmt Argumente vom Typ File
, int
und Charset
an.
ZipException
, wenn die bereitgestellte ZIP-Datei
enthält keine Dateien.
ZipOutputStream
Unter Android 10 und höher
Methode finish()
in
ZipOutputStream
wirft kein
ZipException
, wenn versucht wird,
Ausgabestream für eine ZIP-Datei, die keine Dateien enthält.
Kameraänderungen
Viele Kamera-Apps gehen davon aus, dass bei Geräten im Hochformat befindet sich das physische Gerät ebenfalls im Hochformat, wie in den Kameraausrichtung. Früher war das eine sichere Annahme, durch die Erweiterung verfügbarer Formfaktoren wie faltbare Smartphones verändert. Das auf diesen Geräten zu einer falschen Drehung oder Skalierung führen (oder Kamerasucher angezeigt wird.
Für Apps, die auf API-Level 24 oder höher ausgerichtet sind, muss Folgendes explizit festgelegt werden:
android:resizeableActivity
und stellen die erforderlichen Funktionen bereit,
mit dem Mehrfenstermodus.
Tracking der Akkunutzung
Ab Android 10
SystemHealthManager
wurde zurückgesetzt
seine Akkunutzungsstatistiken, wenn das Gerät nach einer größeren
Ladeereignis. Im Großen und Ganzen ist ein wichtiges Ladeereignis entweder: Das Gerät
vollständig aufgeladen ist oder das Gerät vollständig erschöpft ist,
geladen wurde.
Vor Android 10 wurden die Statistiken zur Akkunutzung jedes Mal zurückgesetzt, wenn das Gerät egal wie wenig sich der Batteriestand verändert hatte.
Einstellung von Android Beam
In Android 10 stellen wir Android Beam offiziell ein, eine ältere Funktion für Initiieren der geräteübergreifenden Datenfreigabe über Nahfeldkommunikation (NFC) Außerdem werden mehrere zugehörige NFC APIs eingestellt. Android Beam bleibt Geräteherstellern-Partnern zur Verfügung, die die App nutzen möchten. in der Entwicklung aktiv ist. Android unterstützt jedoch weiterhin andere NFC-Funktionen und ‑APIs. Anwendungsfälle wie das Lesen von Tags und Zahlungen funktionieren weiterhin wie erwartet.
java.math.BigDecimal.stripTrailingZeros() Verhaltensänderung
In BigDecimal.stripTrailingZeros()
werden nachgestellte Nullen nicht mehr als
Sonderfall, wenn der Eingabewert Null ist.
Verhaltensänderungen bei java.util.regex.Matcher und Muster
Das Ergebnis von split()
wurde geändert, sodass es nicht mehr mit einem leeren String
beginnt
(„“), wenn am Anfang der Eingabe eine Übereinstimmung mit Null Breite vorliegt. Dies gilt auch für
betrifft String.split()
. Beispiel: "x".split("")
gibt jetzt {"x"}
zurück.
Bei älteren Android-Versionen wurde hingegen {"", "x"}
zurückgegeben.
"aardvark".split("(?=a)"
gibt jetzt {"a", "ardv", "ark"}
statt
{"", "a", "ardv", "ark"}
Das Ausnahmeverhalten für ungültige Argumente wurde ebenfalls verbessert:
appendReplacement(StringBuffer, String)
gibt jetztIllegalArgumentException
anstelle vonIndexOutOfBoundsException
zurück, wenn der ErsatzString
mit einem einzelnen umgekehrten Schrägstrich endet, was unzulässig ist. Die dieselbe Ausnahme wird jetzt ausgelöst, wenn der Ersatz-String
mit einem$
endet. Zuvor wurde in diesem Szenario keine Ausnahme ausgelöst.replaceFirst(null)
ruftreset()
nicht mehr fürMatcher
auf, wenn der FehlerNullPointerException
.NullPointerException
wird jetzt auch ausgelöst, wenn es ist keine Übereinstimmung. Zuvor wurde er nur bei einem Spiel geworfen.start(int group)
,end(int group)
undgroup(int group)
werfen jetzt eine weitere Benachrichtigung ausIndexOutOfBoundsException
allgemein, wenn der Gruppenindex außerhalb des gültigen Bereichs liegt. Bisher haben diese MethodenArrayIndexOutOfBoundsException
ausgelöst.
Der Standardwinkel für GradientDrawable ist jetzt TOP_BOTTOM.
Wenn Sie in Android 10 eine
GradientDrawable
in XML und stellen keine Winkelmessung, die Farbverlaufsausrichtung
standardmäßig auf
TOP_BOTTOM
Dies ist eine Änderung im Vergleich zu früheren Android-Versionen, in denen die Standardversion
LEFT_RIGHT
Du kannst das Problem umgehen, indem du ein Update auf die neueste Version von AAPT2 durchführst: Das Tool legt für ältere Apps eine Winkelmessung von 0 fest, wenn kein Winkel vorhanden ist. Messung angegeben.
Logging für serialisierte Objekte mit der Standard-SUID
Ab Android 7.0 (API-Level 24) hat die Plattform eine Fehlerbehebung
auf die Standardeinstellung serialVersionUID
für serialisierbare
-Objekt. Diese Korrektur
Apps, die auf API-Level 23 oder niedriger ausgerichtet sind, waren davon nicht betroffen.
Ab Android 10, wenn eine App auf API-Level 23 oder niedriger ausgerichtet ist
und stützt sich auf die alten, falschen Standard-serialVersionUID
, die Systemprotokolle
und schlägt eine Korrektur des Codes vor.
Insbesondere protokolliert das System eine Warnung, wenn alle der folgenden Bedingungen erfüllt sind:
- Die App ist auf API-Level 23 oder niedriger ausgerichtet.
- Eine Klasse ist serialisiert.
- Die serialisierte Klasse verwendet die Standard-
serialVersionUID
anstelle von explizit einserialVersionUID
festgelegt wird. - Der Standardwert für
serialVersionUID
unterscheidet sich vomserialVersionUID
wenn die App auf API-Level 24 oder höher ausgerichtet ist.
Diese Warnung wird für jeden betroffenen Kurs einmal protokolliert.
Die Warnmeldung enthält eine vorgeschlagene Korrektur,
die explizit festgelegt wird,
den serialVersionUID
auf den Standardwert, der berechnet wird, wenn
App-Level 24 oder höher, auf das die App ausgerichtet ist. Mit dieser Korrektur können Sie sicherstellen,
Ein Objekt aus dieser Klasse wird in einer App serialisiert, die auf das API-Level ausgerichtet ist.
23 oder niedriger wird das Objekt von Apps, die auf Version 24 oder höher ausgerichtet sind, korrekt gelesen.
und umgekehrt.
Änderungen an java.io.FileChannel.map()
Ab Android 10 wird FileChannel.map()
nicht mehr unterstützt für
Nicht-Standarddateien wie /dev/zero
, deren Größe nicht mit
truncate()
Zurück
von Android-Versionen verschluckt den Fehler, der von
truncate()
, aber Android 10 löst eine IOException aus. Wenn Sie das alte Verhalten benötigen,
müssen Sie nativen Code verwenden.