Android 8.0 (API-Level 26) bietet Verhaltensänderungen sowie neue Funktionen und APIs, die du in deinen Apps nutzen kannst. Dieses Dokument gibt dir einen Überblick über die Schritte zur Migration deiner Apps zu Android 8.0 in zwei wichtigen Phasen:
- Kompatibilität mit Android 8.0 sicherstellen
Prüfen Sie, ob Ihre App auf der neuen Version der Plattform voll funktionsfähig ist. In dieser Phase werden keine neuen APIs verwendet oder die
targetSdkVersion
der Anwendung geändert. Es können jedoch geringfügige Änderungen erforderlich sein. - Zielversion aktualisieren und Android 8.0-Funktionen nutzen
Wenn Sie die neuen Funktionen der Plattform nutzen möchten, aktualisieren Sie
targetSdkVersion
auf 26, prüfen Sie, ob die Anwendung weiterhin wie erwartet funktioniert, und verwenden Sie dann neue APIs.
Kompatibilität mit Android 8.0 sicherstellen
Ziel ist es, sicherzustellen, dass Ihre bestehende App unter Android 8.0 (API-Level 26) wie vorhanden funktioniert. Da sich einige Plattformänderungen auf das Verhalten Ihrer Anwendung auswirken können, sind möglicherweise einige Anpassungen erforderlich. Sie müssen jedoch keine neuen APIs verwenden oder targetSdkVersion
ändern.
Gerät mit Android 8.0 vorbereiten
- Wenn du ein kompatibles Gerät hast (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P oder Nexus Player), folge der Anleitung zum Flashen des Geräts.
- Oder laden Sie das System-Image von Android 8.0 für den Android-Emulator herunter. Sie wird im SDK-Manager unter Android 8.0 als Google APIs Intel x86 Atom System Image aufgeführt.
Hinweis: Das System-Image von Android 8.0 kann über Android Studio 3.0 und höher heruntergeladen werden. Weitere Informationen finden Sie unten im Abschnitt Android 8.0 SDK herunterladen.
Kompatibilitätstests durchführen
Größtenteils umfasst das Testen der Kompatibilität mit Android 8.0 (API-Level 26) dieselbe Art von Tests, die Sie auch bei der Vorbereitung der Veröffentlichung Ihrer App durchführen. Wir empfehlen Ihnen, die Qualitätsrichtlinien für Apps und die Best Practices für Tests zu lesen.
Es gibt jedoch noch einen weiteren Aspekt beim Testen: Mit Android 8.0 werden Änderungen an der Android-Plattform eingeführt, die sich auf das Verhalten deiner App auswirken oder die App vollständig beschädigen können, auch wenn du targetSdkVersion
nicht änderst. Aus diesem Grund ist es wichtig, dass Sie die wichtigsten Änderungen in Tabelle 1 überprüfen und alle Korrekturen testen, die Sie implementiert haben, um die Änderungen umzusetzen.
Ändern | Zusammenfassung | Weitere Referenz |
---|---|---|
Seltenere Updates der Standortermittlung im Hintergrund | Wenn deine App Standortaktualisierungen von einem Hintergrunddienst erhält, erhält sie unter Android 8.0 (API-Level 26) weniger häufig Updates als ältere Android-Versionen. Insbesondere ein Hintergrunddienst kann Standortaktualisierungen nur ein paar Mal pro Stunde empfangen. Während die App im Vordergrund ausgeführt wird, bleibt die Häufigkeit der Standortaktualisierungen jedoch unverändert. | Standortbeschränkungen im Hintergrund |
net.hostname werden nicht mehr unterstützt
|
Bei der Abfrage der Systemeigenschaft net.hostname wird ein Nullergebnis zurückgegeben.
|
Keine |
Neue Ausnahme von send(DatagramPacket) |
Die Methode send(DatagramPacket) gibt eine SocketException aus, wenn die zuvor ausgeführte Methode connect(InetAddress, int) fehlgeschlagen ist.
|
Verhaltensänderungen bei Netzwerk- und HTTP(S)-Verbindungen |
Korrekte NullPointerException aus AbstractCollection -Methoden
|
AbstractCollection.removeAll(null) und AbstractCollection.retainAll(null) geben jetzt immer ein NullPointerException aus. Zuvor wurde das NullPointerException nicht ausgegeben, wenn die Sammlung leer war.
Durch diese Änderung entspricht das Verhalten der Dokumentation.
|
Verhaltensänderungen: Verarbeitung von Sammlungen |
Richtige NullPointerException von Currency.getDisplayName(null)
|
Beim Aufrufen von Currency.getDisplayName(null) wird ein NullPointerException ausgegeben.
|
Verhaltensänderungen: Sprachen und Internationalisierung |
Eine umfassendere Liste der Verhaltensänderungen in Android 8.0 (API-Ebene 26) findest du unter Verhaltensänderungen in Android 8.0.
Zielversion aktualisieren und Android 8.0-Funktionen nutzen
In diesem Abschnitt wird erläutert, wie du die vollständige Unterstützung für Android 8.0 (API-Level 26) aktivieren kannst, indem du targetSdkVersion
auf 26 aktualisierst und neue Funktionen hinzufügst, die in Android 8.0 verfügbar sind.
Mit Android 8.0 werden nicht nur neue APIs, sondern auch einige Verhaltensänderungen eingeführt, wenn du targetSdkVersion
auf 26 aktualisierst. Da bei einigen Verhaltensänderungen möglicherweise Codeänderungen erforderlich sind, um Fehler zu vermeiden, sollten Sie zuerst verstehen, wie sich eine Änderung des targetSdkVersion
auf Ihre App auswirken könnte. Sehen Sie sich dazu alle Änderungen des Verhaltens für Apps, die auf Android 8.0 ausgerichtet sind an.
Hinweis:Die oben beschriebenen Schritte zum Sicherstellen der Plattformkompatibilität sind Voraussetzung für die Ausrichtung deiner App auf Android 8.0. Deshalb solltest du diese Schritte zuerst ausführen.
Android 8.0 SDK herunterladen
Du kannst die SDK-Pakete zum Erstellen deiner App mit Android 8.0 (API-Level 26) mit der neuesten Version von Android Studio herunterladen. Android Studio 3.0 oder höher wird empfohlen. Android Studio 3.0 und höher enthält Tools, die dir die Verwendung von Android 8.0-Funktionen wie adaptive Symbole und herunterladbare Schriftarten erleichtern. Wenn du diese Funktionen noch nicht benötigst, kannst du die stabile Version von Android Studio 2.3.3 verwenden, um deine App mit Android 8.0 zu erstellen und die neuen APIs zu verwenden.
So richten Sie Android Studio mit einer der beiden Versionen ein:
- Starte Android Studio und klicke auf Tools > SDK-Manager.
- Klicken Sie auf dem Tab SDK-Plattformen das Kästchen Paketdetails anzeigen an. Unter Android 8.0 Preview prüfen Sie Folgendes:
- Android SDK Platform 26
- Google APIs Intel x86 Atom System Image (nur für den Emulator erforderlich)
- Wechseln Sie zum Tab SDK Tools und wählen Sie alle Elemente aus, für die Updates verfügbar sind. Klicken Sie dazu auf jedes Kästchen mit einem Bindestrich . Hier sollten die neuesten Versionen der folgenden erforderlichen Elemente enthalten sein:
- Android SDK Build-Tools 26.0.0
- Android SDK Platform-Tools 26.0.0
- Android-Emulator 26.0.0
- Klicken Sie auf OK, um alle ausgewählten SDK-Pakete zu installieren.
Jetzt können Sie mit Android 8.0 loslegen.
Build-Konfiguration aktualisieren
Aktualisieren Sie compileSdkVersion
, targetSdkVersion
und die Supportbibliotheksversion auf die neuesten verfügbaren Versionen. Beispiel:
android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0' } // REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android 8.0 repositories { google() // If you're using a version of Gradle lower than 4.1, you must instead use: // maven { // url 'https://maven.google.com' // } }
Empfänger aus der Manifestdatei entfernen
Da mit Android 8.0 (API-Ebene 26) neue Einschränkungen für Übertragungsempfänger eingeführt werden, sollten Sie alle Übertragungsempfänger entfernen, die für implizite Broadcast-Intents registriert sind. Wenn du sie an einem Ort gelassen hast, wird deine App bei der Build-Erstellung oder Laufzeit nicht beeinträchtigt. Wenn sie unter Android 8.0 ausgeführt wird, haben sie jedoch keine Auswirkungen.
Broadcasts, auf die nur Ihre App reagieren kann, also explizite Broadcast-Intents und Broadcasts, die speziell an den Paketnamen Ihrer App gesendet werden, funktionieren unter Android 8.0 weiterhin wie gewohnt.
Es gibt Ausnahmen von dieser neuen Einschränkung. Eine Liste der impliziten Broadcasts, die weiterhin in Apps für Android 8.0 funktionieren, findest du unter Implizite Broadcast-Ausnahmen.
Android 8.0-App testen
Wenn die oben genannten Vorbereitungen abgeschlossen sind, kannst du deine App erstellen und dann weiter testen, um sicherzustellen, dass sie bei der Ausrichtung auf Android 8.0 (API-Level 26) richtig funktioniert. Dies ist ein weiterer guter Zeitpunkt, um die Qualitätsrichtlinien für Apps und die Best Practices für Tests zu lesen.
Wenn Sie Ihre App mit targetSdkVersion
auf 26 erstellen, müssen Sie bestimmte Plattformänderungen beachten. Einige dieser Änderungen können das Verhalten deiner App erheblich beeinflussen oder sogar deine App vollständig beeinträchtigen, auch wenn du unter Android 8.0 keine neuen Funktionen implementiert hast.
Tabelle 2 enthält eine Liste dieser Änderungen mit Links zu weiteren Informationen.
Ändern | Zusammenfassung | Weitere Referenz |
---|---|---|
Datenschutz | Android 8.0 (API-Ebene 26) unterstützt nicht die Verwendung der Systemeigenschaften „net.dns1“, „net.dns2“, „net.dns3“ oder „net.dns4“. | Verhaltensänderungen: Datenschutz |
Beschreibbare und ausführbare Segmente erzwungen | Bei nativen Bibliotheken erzwingt Android 8.0 (API-Level 26) die Regel, dass Daten nicht ausführbar und Code nicht beschreibbar sein sollen. | Verhaltensänderungen: Native Bibliotheken |
Validierung von ELF-Headern und -Abschnitten | Die dynamische Verknüpfung prüft mehr Werte im ELF-Header und in Abschnittsüberschriften und schlägt fehl, wenn sie ungültig sind. | Verhaltensänderungen: Native Bibliotheken |
Benachrichtigungen | Apps, die auf die SDK-Version 8.0 (API-Level 26) des SDKs ausgerichtet sind, müssen einen oder mehrere Benachrichtigungskanäle implementieren, um Benachrichtigungen an Nutzer zu senden. | API-Übersicht: Benachrichtigungen |
Die Methode List.sort()
|
Implementierungen dieser Methode rufen Collections.sort() möglicherweise nicht mehr auf oder deine App löst aufgrund eines Stacküberlaufs eine Ausnahme aus.
|
Verhaltensänderungen: Verarbeitung von Sammlungen |
Die Methode Collections.sort()
|
In Listenimplementierungen gibt Collections.sort() jetzt ein ConcurrentModificationException aus.
|
Änderungen des Verhaltens: Verarbeitung von Sammlungen |
Eine umfassendere Liste der Verhaltensänderungen in Android 8.0 (API-Ebene 26) findest du unter Verhaltensänderungen in Android 8.0.
Informationen zu den neuen Funktionen und APIs, die unter Android 8.0 (API-Level 26) verfügbar sind, finden Sie unter Funktionen und APIs in Android 8.0.