Änderungen bei Android 6.0

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

Bildschirm mit neuen Textauswahlfunktionen in einer unverankerten Symbolleiste

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:

  1. Ändern Sie in Ihrem View- oder Activity-Objekt den ActionMode Anrufe von startActionMode(Callback) bis startActionMode(Callback, ActionMode.TYPE_FLOATING).
  2. Erweitern Sie Ihre vorhandene ActionMode.Callback-Implementierung ActionMode.Callback2.
  3. Überschreiben Sie die onGetContentRect() -Methode zur Bereitstellung der Koordinaten des Inhaltsobjekts Rect (z. B. ein Rechteck für die Textauswahl) in der Ansicht.
  4. 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 dem disableAllOthers=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 die targetSdkVersion deiner App “21” oder höher ist, verwende die Multinetzwerk-APIs (z. B. openConnection(), bindSocket() und das neue bindProcessToNetwork()), 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 zu onError() ist da gerufen wird. In der Camera2 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 zu true 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, Sie setBluetoothContactSharingDisabled() auf false festgelegt haben. Die Standardeinstellung ist true.
  • 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">
    • Die Methoden DevicePolicyManager.createAndInitializeUser() und DevicePolicyManager.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 oder ACTION_PROVISION_MANAGED_DEVICE Intent, das System gibt jetzt den Ergebniscode RESULT_CANCELED zurück.
  • Änderungen an anderen APIs: <ph type="x-smartling-placeholder">
      </ph>
    • Datennutzung: Die Klasse „android.app.usage.NetworkUsageStats“ wurde umbenannt NetworkStats.
  • Ä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">