Migration zu Android 8.0

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:

  1. 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.

  2. 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.

Kompatibilität mit Android 8.0 Schritt für Schritt sicherstellen

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.

Tabelle 1 Wichtige Änderungen, die alle Apps auf Geräten mit Android 8.0 betreffen.

Ä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.

Zielversion aktualisieren und Android 8.0-Funktionen Schritt für Schritt verwenden

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:

  1. Starte Android Studio und klicke auf Tools > SDK-Manager.
  2. 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)
  3. 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
  4. 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.

Tabelle 2 Wichtige Änderungen, die sich auf Apps auswirken, wenn targetSdkVersion auf 26 gesetzt ist.

Ä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.