Neben den neuen Funktionen umfasst Android 6.0 (API-Level 23) eine Vielzahl von Systemänderungen und Änderungen des API-Verhaltens. In diesem Dokument werden Highlights einige wichtige Änderungen, die Sie bei Ihren Apps berücksichtigen sollten.
Wenn Sie bereits eine App für Android veröffentlicht haben, beachten Sie, dass diese Änderungen in der auf Ihre App auswirken.
Laufzeitberechtigungen
Mit diesem Release wird ein neues Berechtigungsmodell eingeführt, bei dem Nutzer App-Berechtigungen während der Laufzeit. Dieses Modell bietet Nutzenden bessere Sichtbarkeit und Kontrolle über und die Prozesse für die Installation und automatische Updates für App-Entwickler zu optimieren. Nutzer können Berechtigungen für installierte Apps einzeln erteilen oder entziehen.
Achten Sie bei Apps, die auf Android 6.0 (API-Level 23) oder höher ausgerichtet sind, nach den
Berechtigungen während der Laufzeit. Um herauszufinden, ob Ihrer App eine Berechtigung gewährt wurde, rufen Sie die
neu checkSelfPermission()
. Rufen Sie zum Anfordern einer Berechtigung die neue
requestPermissions()
. Auch wenn deine App nicht auf Android 6.0 (API-Level 23) ausgerichtet ist, solltest du sie unter
das neue Berechtigungsmodell.
Weitere Informationen zur Unterstützung des neuen Berechtigungsmodells in deiner App findest du unter <ph type="x-smartling-placeholder"></ph> Mit Systemberechtigungen arbeiten Tipps zur Bewertung der Auswirkungen auf Ihre App Siehe Hinweise zur Nutzung von Berechtigungen.
Stromsparmodus und App-Standby
Mit dieser Version werden neue Verbesserungen beim Energiesparen für inaktive Geräte und Apps eingeführt. Diese -Funktionen wirken sich auf alle Apps aus. Testen Sie Ihre Apps daher in diesen neuen Modi.
- Stromsparmodus: Wenn ein Nutzer ein Gerät vom Stromnetz trennt, es stillsteht und der Bildschirm ausgeschaltet ist, Das Gerät wechselt für einen bestimmten Zeitraum in den Stromsparmodus und versucht, das System aufrechtzuerhalten. die sich im Schlaf befinden. In diesem Modus nehmen die Geräte regelmäßig für kurze Zeit den normalen Betrieb wieder auf. damit die App synchronisiert wird und das System ausstehende Vorgänge ausführen kann.
- App-Stand-by: Mit App-Stand-by kann das System erkennen, dass eine App inaktiv ist. wenn der Nutzer sie nicht aktiv verwendet. Das System ermittelt dies, wenn der Nutzer die App eine bestimmte Zeit lang berühren. Wenn das Gerät vom Stromnetz getrennt ist, deaktiviert das System die Netzwerkverbindung auf das System zugreift und Synchronisierungen und Jobs für die Anwendungen, die es als inaktiv betrachtet, unterbricht.
Weitere Informationen zu diesen Änderungen beim Energiesparen finden Sie unter Optimierung für Stromsparmodus und App-Stand-by
Apache HTTP Client-Entfernung
Unter Android 6.0 wird der Support für den Apache HTTP-Client eingestellt. Wenn Ihre App diesen Client verwendet und
auf Android 2.3 (API-Level 9) oder höher ausgerichtet ist, verwenden Sie die Klasse HttpURLConnection
. Diese API ist effizienter, da sie durch transparente Komprimierung die Netzwerknutzung reduziert.
und Antwort-Caching und
senkt den Stromverbrauch. Damit Sie die Apache HTTP APIs weiterhin verwenden können, müssen Sie
zuerst die folgende Abhängigkeit zur Kompilierungszeit in der Datei build.gradle
deklarieren:
android { useLibrary 'org.apache.http.legacy' }
BoringSSL
Android wird von OpenSSL zum
BoringSSL
Bibliothek. Wenn du das Android-NDK in deiner App verwendest, solltest du keine Verknüpfungen zu Kryptografiebibliotheken erstellen.
die nicht Teil der NDK API sind, z. B. libcrypto.so
und libssl.so
. Diese
Bibliotheken sind keine öffentlichen APIs und können sich für alle Releases und Geräte ohne vorherige Ankündigung ändern oder nicht mehr funktionieren.
Darüber hinaus besteht die Gefahr, dass Sie sich Sicherheitslücken aussetzen. Ändern Sie stattdessen Ihre
nativem Code zum Aufrufen der Java Cryptography APIs über JNI oder zur statischen Verknüpfung mit einem
Kryptografiebibliothek Ihrer Wahl.
Zugriff auf Hardware-ID
Um Nutzern einen besseren Datenschutz zu bieten, wird Android ab dieser Version
entfernt den programmatischen Zugriff auf die lokale Hardwarekennung für
Apps, die die Wi-Fi- und Bluetooth-APIs verwenden. Die
WifiInfo.getMacAddress()
und die
BluetoothAdapter.getAddress()
Methoden
geben jetzt einen konstanten Wert von 02:00:00:00:00:00
zurück.
So greifen Sie über Bluetooth- und WLAN-Scans auf die Hardware-IDs externer Geräte in der Nähe zu:
muss deine App jetzt die ACCESS_FINE_LOCATION
oder
ACCESS_COARSE_LOCATION
-Berechtigungen:
Hinweis: Wenn ein Gerät mit Android 6.0 (API-Level 23) eine WLAN- oder Bluetooth-Suche ausführen, ist der Vorgang für externe Geräte als die von einer zufälligen MAC-Adresse stammen.
Benachrichtigungen
In diesem Release wird die Methode Notification.setLatestEventInfo()
entfernt. Verwenden Sie die Methode
Notification.Builder
, um Benachrichtigungen zu erstellen. So aktualisieren Sie ein
wiederholte Benachrichtigung erhalten, verwenden Sie die Instanz Notification.Builder
wieder. Rufen Sie die Methode
Methode build()
abrufen
hat Notification
Instanzen aktualisiert.
Der Befehl adb shell dumpsys notification
gibt den Benachrichtigungstext nicht mehr aus.
Verwenden Sie stattdessen den Befehl adb shell dumpsys notification --noredact
, um den Text auszugeben.
in einem Benachrichtigungsobjekt.
Änderungen im Audio-Manager
Lautstärke direkt einstellen oder bestimmte Streams über die AudioManager
stummschalten
-Klasse wird nicht mehr unterstützt. Die Methode setStreamSolo()
wurde eingestellt. Rufen Sie in diesem Fall die Methode
requestAudioFocus()
. In ähnlicher Weise
Methode setStreamMute()
ist
eingestellt; Rufen Sie stattdessen die adjustStreamVolume()
-Methode auf und übergeben Sie den Richtungswert
ADJUST_MUTE
oder
ADJUST_UNMUTE
.
Textauswahl
Wenn Nutzer in deiner App Text auswählen, kannst du jetzt Aktionen zur Textauswahl anzeigen lassen: Ausschneiden, Kopieren und Einfügen: Unverankerte Symbolleiste. Die Implementierung der Nutzerinteraktion für die kontextabhängige Aktionsleiste, wie unter <ph type="x-smartling-placeholder"></ph> Kontextbezogene Aktionsmodus für einzelne Ansichten aktivieren
Um eine unverankerte Symbolleiste für die Textauswahl zu implementieren, nehmen Sie folgende Änderungen in der vorhandenen Apps:
- Ändern Sie in Ihrem
View
- oderActivity
-Objekt denActionMode
Anrufe vonstartActionMode(Callback)
bisstartActionMode(Callback, ActionMode.TYPE_FLOATING)
. - Erweitern Sie Ihre vorhandene
ActionMode.Callback
-ImplementierungActionMode.Callback2
. - Überschreiben Sie die
onGetContentRect()
-Methode zur Bereitstellung der Koordinaten des InhaltsobjektsRect
(z. B. ein Rechteck für die Textauswahl) in der Ansicht. - Wenn die Rechteckpositionierung nicht mehr gültig ist und dieses Element das einzige Element ist, das ungültig gemacht wird,
rufen Sie die Methode
invalidateContentRect()
auf.
Wenn Sie verwenden
Android Support Library der Version 22.2 hinzugefügt haben, denken Sie daran, dass unverankerte Symbolleisten nicht
und appcompat übernimmt die Kontrolle über ActionMode
-Objekte,
Standardeinstellung. Dies verhindert, dass unverankerte Symbolleisten angezeigt werden. Zum Aktivieren
ActionMode
-Support in einer
AppCompatActivity
, Anruf
getDelegate()
und dann anrufen
setHandleNativeActionModesEnabled()
für die zurückgegebene
AppCompatDelegate
-Objekt und legen Sie die Eingabe fest
auf false
. Dieser Aufruf gibt die Steuerung von ActionMode
-Objekten an
des Frameworks. Auf Geräten mit Android 6.0 (API-Level 23) kann das Framework
Modi für ActionBar
oder unverankerte Symbolleisten, während auf Geräten ausgeführt wird
Android 5.1 (API-Level 22) oder niedriger, sind nur die ActionBar
-Modi
unterstützt.
Änderungen der Lesezeichen im Browser
In dieser Version wird die Unterstützung für globale Lesezeichen eingestellt. Die
android.provider.Browser.getAllBookmarks()
und android.provider.Browser.saveBookmark()
entfernt. Gleichermaßen werden READ_HISTORY_BOOKMARKS
und WRITE_HISTORY_BOOKMARKS
Berechtigungen werden entfernt. Wenn Ihre App auf Android 6.0 (API-Level 23) oder höher ausgerichtet ist, dürfen Sie nicht auf
Lesezeichen des globalen Anbieters öffnen oder die Lesezeichenberechtigungen verwenden. Stattdessen sollte Ihre App
intern als Lesezeichen speichern.
Änderungen des Android-Schlüsselspeichers
In dieser Version wurde die Der Android-Schlüsselspeicheranbieter unterstützt nicht mehr DSA: ECDSA wird weiterhin unterstützt.
Schlüssel, die keine Verschlüsselung ruhender Daten erfordern, werden beim sicheren Sperrbildschirm nicht mehr gelöscht deaktiviert oder zurückgesetzt wurde (z. B. durch den Nutzer oder einen Geräteadministrator). Schlüssel, für die Folgendes erforderlich ist: Verschlüsselung ruhender Daten während dieser Ereignisse gelöscht.
Änderungen bei WLAN und Netzwerken
In dieser Version wurden die folgenden Verhaltensänderungen für die Wi-Fi- und Netzwerk-APIs eingeführt.
- Deine Apps können jetzt nur den Status von
WifiConfiguration
-Objekten ändern wenn Sie diese Objekte erstellt haben. Sie sind nicht berechtigt,WifiConfiguration
-Objekte, die vom Nutzer oder von anderen Apps erstellt wurden. -
Wenn bisher eine App das Gerät gezwungen hat, eine Verbindung zu einem bestimmten WLAN-Netzwerk herzustellen, indem es
enableNetwork()
mit demdisableAllOthers=true
hat, wurde das Gerät von anderen Netzwerken getrennt, z. B. mobile Daten. Ab dieser Version wird die Verbindung des Geräts zu anderen Netzwerken nicht mehr getrennt. Wenn Der Wert für „targetSdkVersion
“ deiner App beträgt“20”
oder niedriger und ist an der ausgewählten App angepinnt WLAN. Wenn dietargetSdkVersion
deiner App“21”
oder höher ist, verwende die Multinetzwerk-APIs (z. B.openConnection()
,bindSocket()
und das neuebindProcessToNetwork()
), um sicherzugehen, dass der Netzwerkverkehr über das ausgewählte Netzwerk gesendet wird.
Änderungen am Kameradienst
In diesem Release wurde das Modell für den Zugriff auf gemeinsam genutzte Ressourcen im Kameradienst geändert. vom vorherigen "First-com-first-serve"-Zugriffsmodell zu einem Zugriffsmodell mit hoher Priorität, Prozesse bevorzugt. Zu den Änderungen am Dienstverhalten gehören:
- Der Zugriff auf die Subsystem-Ressourcen der Kamera, einschließlich Öffnen und Konfigurieren eines Kamerageräts, ist werden basierend auf der „Priorität“ des Antragsverfahrens vergeben. Bewerbungsprozesse mit Für Nutzer sichtbare Aktivitäten oder Aktivitäten im Vordergrund haben in der Regel eine höhere Priorität. und eine zuverlässigere Nutzung.
- Aktive Kameraclients für Apps mit niedrigerer Priorität werden möglicherweise „entfernt“, wenn eine höhere Priorität
App versucht, die Kamera zu verwenden. In der verworfenen
Camera
API Das führt zuonError()
ist da gerufen wird. In derCamera2
API wird Folgendes ausgegeben:onDisconnected()
für den entfernten Auftraggebenden aufgerufen. - Auf Geräten mit entsprechender Kamera-Hardware können separate Anwendungsprozesse unterschiedliche Kamerageräte gleichzeitig öffnen und verwenden. Die Multi-Prozess-Nutzung in denen der gleichzeitige Zugriff zu erheblichen Leistungseinbußen oder einer der geöffneten Kamerageräte, werden jetzt vom Kameradienst erkannt und blockiert. Diese Änderung können zu „Entfernungen“ für Kunden mit niedrigerer Priorität führen, selbst wenn keine andere App direkt und versucht, auf dieselbe Kamera zuzugreifen.
- Wenn Sie den aktuellen Nutzer ändern, werden in Apps des vorherigen Nutzerkontos aktive Kamera-Clients ausgeführt die entfernt werden sollten. Der Zugriff auf die Kamera ist auf Nutzerprofile beschränkt, die dem aktuellen Gerätenutzer gehören. In der Praxis bedeutet dies beispielsweise, dass ein Gastkonto nicht die Ausführung beenden kann, Prozessen, die das Kamerasubsystem verwenden, wenn der Nutzer zu einem anderen Konto gewechselt ist.
Laufzeit
Die ART-Laufzeit implementiert jetzt die Zugriffsregeln für die
newInstance()
-Methode. Dieses
Durch diese Änderung wurde ein Problem behoben, bei dem Dalvik Zugriffsregeln in früheren Versionen falsch überprüft hat.
Wenn Ihre App das
newInstance()
-Methode und Sie
die Zugriffsprüfungen überschreiben möchten,
setAccessible()
-Methode mit der Eingabe
Parameter auf true
festgelegt. Wenn Ihre App das
v7 appcompat-Bibliothek oder den
recyclerview library,
müssen Sie Ihre App aktualisieren, um die neuesten Versionen dieser Bibliotheken zu verwenden. Stellen Sie andernfalls sicher, dass
Alle benutzerdefinierten Klassen, auf die in XML verwiesen wird, werden aktualisiert, sodass ihre Klassenkonstruktoren zugänglich sind.
In dieser Version wird das Verhalten der dynamischen Verknüpfung aktualisiert. Die dynamische Verknüpfung versteht jetzt
Unterschied zwischen dem soname
einer Bibliothek und ihrem Pfad
(
öffentlicher Bug 6670) und die Suche nach soname
ist jetzt
implementiert. Apps, die in der Vergangenheit funktioniert haben und die fehlerhafte DT_NEEDED
-Einträge enthalten
(normalerweise absolute Pfade im Dateisystem der Build-Maschine) können beim Laden fehlschlagen.
Das Flag dlopen(3) RTLD_LOCAL
ist jetzt korrekt implementiert. Beachten Sie, dass
RTLD_LOCAL
ist die Standardeinstellung, d. h. dlopen(3)
-Aufrufe, bei denen nicht explizit
RTLD_LOCAL
ist betroffen (es sei denn, deine App hat explizit RTLD_GLOBAL
verwendet). Mit
RTLD_LOCAL
, werden Symbole nicht für Bibliotheken zur Verfügung gestellt, die durch spätere Aufrufe von geladen werden.
dlopen(3)
(im Gegensatz zum Verweis auf DT_NEEDED
-Einträge).
Wenn bei früheren Android-Versionen von Ihrer App das Laden einer gemeinsam genutzten Bibliothek vom System angefordert wurde,
das System eine Warnung anzeigt, aber dennoch das Laden der Bibliothek zugelassen hat.
Ab diesem Release lehnt das System diese Bibliothek ab, wenn die Ziel-SDK-Version deiner App 23 ist
oder höher. Damit Sie besser erkennen können, ob eine Bibliothek nicht geladen werden konnte, sollte Ihre Anwendung die
dlopen(3)
fehlgeschlagen und geben Sie die Problembeschreibung an, die vom dlerror(3)
-Aufruf zurück. Weitere Informationen zum Umgang mit Textverschiebungen finden Sie hier:
.
APK-Überprüfung
Die Plattform führt jetzt eine strengere Validierung von APKs durch. Ein APK gilt als beschädigt, wenn eine Datei im Manifest deklariert, aber nicht im APK selbst vorhanden. Ein APK muss neu signiert werden, wenn eine der werden entfernt.
USB-Anschluss
Bei Geräteverbindungen über den USB-Port wird nun standardmäßig der Modus „Nur Laden“ aktiviert. Zugriff das Gerät und seine Inhalte über eine USB-Verbindung erfordert, müssen Nutzer ausdrücklich die Berechtigung für solche Interaktionen. Wenn Ihre App Nutzerinteraktionen mit dem Gerät über einen USB-Port unterstützt, dass die Interaktion explizit aktiviert werden muss.
Änderungen bei Android for Work
Diese Version enthält die folgenden Verhaltensänderungen für Android for Work:
- Berufliche Kontakte im privaten Kontext Google Dialer
Wenn der Nutzer frühere Anrufe aufruft, werden in der Anrufliste jetzt geschäftliche Kontakte angezeigt.
Einstellung
setCrossProfileCallerIdDisabled()
Mit zutrue
werden die Kontakte des Arbeitsprofils in der Anrufliste von Google Telefon ausgeblendet. Geschäftliche Kontakte können werden nur dann zusammen mit persönlichen Kontakten über Bluetooth auf Geräten angezeigt, SiesetBluetoothContactSharingDisabled()
auffalse
festgelegt haben. Die Standardeinstellung isttrue
. - Entfernung der WLAN-Konfiguration:Von einem Profilinhaber hinzugefügte WLAN-Konfigurationen
(zum Beispiel durch Aufrufe der
addNetwork()
) werden jetzt entfernt, wenn das Arbeitsprofil gelöscht wird. - WLAN-Konfigurationssperre: Jede WLAN-Konfiguration, die von
Ein aktiver Geräteinhaber kann vom Nutzer nicht mehr geändert oder gelöscht werden, wenn
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN
ist ungleich null. Der Nutzer kann weiterhin seine eigenen WLAN-Konfigurationen erstellen und ändern. Aktives Gerät Inhaber haben das Recht, alle WLAN-Konfigurationen zu bearbeiten oder zu entfernen, die nicht von ihnen erstellt wurden. - Device Policy Controller über ein Google-Konto herunterladen:Wenn ein Google-Konto Konto, das über eine Device Policy Controller App (DPC) verwaltet werden muss, wird einem Gerät hinzugefügt Außerhalb eines verwalteten Kontexts werden Nutzer nun beim Hinzufügen von Konten aufgefordert, die entsprechenden WPC. Dies gilt auch für Konten, die über Einstellungen > Konten und im Assistenten für die Ersteinrichtung des Geräts aus.
- Änderungen an bestimmten
DevicePolicyManager
API-Verhaltensweisen: <ph type="x-smartling-placeholder">- </ph>
- Durch Aufrufen der
setCameraDisabled()
-Methode wirkt sich nur auf die Kamera für den aufrufenden Nutzer aus. über das verwaltete Profil aufzurufen, sich auf Kamera-Apps auswirken, die beim Hauptnutzer ausgeführt werden. - Darüber hinaus enthält der
setKeyguardDisabledFeatures()
ist nun für Profilinhaber sowie für Geräteinhaber verfügbar. - Ein Profilinhaber kann die folgenden Keyguard-Einschränkungen festlegen:
<ph type="x-smartling-placeholder">
- </ph>
KEYGUARD_DISABLE_TRUST_AGENTS
undKEYGUARD_DISABLE_FINGERPRINT
, die sich auf die Keyguard-Einstellungen für den übergeordneten Nutzer des Profils.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS
, die betrifft nur Benachrichtigungen, die von Anwendungen im verwalteten Profil generiert wurden.
- Die Methoden
DevicePolicyManager.createAndInitializeUser()
undDevicePolicyManager.createUser()
wurden eingestellt. - Das
setScreenCaptureDisabled()
blockiert nun auch die unterstützende Struktur, wenn eine App des jeweiligen Nutzers im Vordergrund ausgeführt wird. EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
ist jetzt standardmäßig SHA-256. SHA-1 wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt, wird aber entfernt .EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
akzeptiert jetzt nur noch SHA-256.- APIs zur Geräteinitialisierung, die in Android 6.0 (API-Level 23) vorhanden waren, werden jetzt entfernt.
- "
EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS
" wurde entfernt, sodass NFC-Bump Ein auf die Werkseinstellungen zurückgesetztes Gerät kann nicht programmatisch entsperrt werden. - Sie können jetzt die
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
verwenden zusätzliche Daten, um während der NFC-Bereitstellung des verwalteten Geräts Daten an die App des Geräteeigentümers zu übergeben. - Android for Work-APIs sind für M-Laufzeitberechtigungen optimiert, einschließlich Arbeitsprofilen,
und andere Elemente. Neue
DevicePolicyManager
-Berechtigungs-APIs nicht Apps vor dem M. M. - Wenn Nutzende den synchronen Teil des Einrichtungsvorgangs verlassen, der über eine
ACTION_PROVISION_MANAGED_PROFILE
oderACTION_PROVISION_MANAGED_DEVICE
Intent, das System gibt jetzt den ErgebniscodeRESULT_CANCELED
zurück.
- Durch Aufrufen der
- Änderungen an anderen APIs:
<ph type="x-smartling-placeholder">
- </ph>
- Datennutzung: Die Klasse „
android.app.usage.NetworkUsageStats
“ wurde umbenanntNetworkStats
.
- Datennutzung: Die Klasse „
- Änderungen an globalen Einstellungen:
<ph type="x-smartling-placeholder">
- </ph>
- Folgende Einstellungen können nicht mehr über
setGlobalSettings()
festgelegt werden: <ph type="x-smartling-placeholder">- </ph>
BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
- Diese globalen Einstellungen können jetzt über
setGlobalSettings()
festgelegt werden: <ph type="x-smartling-placeholder">
- Folgende Einstellungen können nicht mehr über