Migration zu Android 8.0

Mit Android 8.0 (API-Level 26) werden Verhaltensänderungen sowie neue Funktionen und APIs eingeführt, die die Sie in Ihren Apps nutzen können. In diesem Dokument erhalten Sie einen Überblick über die Migrationsschritte. Ihre Apps in zwei wichtigen Phasen auf Android 8.0 zu übertragen:

  1. Kompatibilität mit Android 8.0 gewährleisten

    Prüfen Sie, ob Ihre App auf der neuen Version der Plattform voll funktionsfähig ist. In dieser Phase Sie verwenden keine neuen APIs und ändern die targetSdkVersion Ihrer App nicht, aber es gibt geringfügige Änderungen notwendig sein.

  2. Zielversion aktualisieren und Funktionen von Android 8.0 verwenden

    Wenn Sie bereit sind, die neuen Funktionen die Plattform, aktualisiere targetSdkVersion auf 26, prüfe, ob die App weiterhin funktioniert damit er wie erwartet funktioniert, und dann neue APIs zu verwenden.

Kompatibilität mit Android 8.0 sicherstellen

Ziel ist es, sicherzustellen, dass deine bestehende App unter Android 8.0 unverändert funktioniert. (API-Level 26). Da sich einige Plattformänderungen auf das Verhalten Ihrer App auswirken können, sind möglicherweise einige Anpassungen erforderlich, aber Sie müssen keine neuen APIs oder targetSdkVersion ändern.

Schrittweise Überprüfung der Kompatibilität mit Android 8.0

Gerät mit Android 8.0 vorbereiten

  • Mit einem kompatiblen Gerät (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P oder Nexus) Player), folgen Sie der Anleitung um dein Gerät zu blinken.
  • Oder laden Sie das Android 8.0-Systemabbild für den Android-Emulator herunter. Es ist in der SDK-Manager unter Android 8.0 als Google APIs Intel x86 Atom-System-Image.

    Hinweis: Das System-Image von Android 8.0 kann über Android Studio 3.0 und höher Weitere Informationen finden Sie im Abschnitt unten, in dem Sie erfahren, wie Sie das Android 8.0 SDK herunterladen.

Kompatibilitätstests durchführen

Größtenteils wird die Kompatibilität mit Android 8.0 (API-Level 26) getestet. beinhaltet dieselben Tests, die Sie bei der Vorbereitung auf die Veröffentlichung Ihrer App durchführen. Jetzt ist ein guter Zeitpunkt, um sich die Qualitätsrichtlinien für Apps und die Best Practices für Tests durchzulesen.

Es gibt jedoch einen anderen Aspekt beim Testen: Mit Android 8.0 werden Änderungen an der Android-Version Plattform, die sich auf das Verhalten Ihrer App auswirken oder die App insgesamt funktionsunfähig machen kann, auch wenn Sie nichts ändern. targetSdkVersion Aus diesem Grund ist es wichtig, dass Sie die wichtigsten Änderungen in Tabelle 1 und testen Sie alle Korrekturen, die Sie implementieren, um die Änderungen zu berücksichtigen.

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

Ändern Zusammenfassung Weitere Informationen
Weniger häufige Updates der Standortermittlung im Hintergrund Wenn deine App Standortaktualisierungen von einem Hintergrunddienst erhält, erhält sie weniger häufig Updates unter Android 8.0 (API-Level 26) im Vergleich zu älteren Android-Versionen. Insbesondere muss ein Hintergrund -Service kann Standortaktualisierungen nicht öfter als einige Male pro Stunde empfangen. Während Ihre App im Vordergrund ausgeführt wird, bleibt die Rate der Standortaktualisierungen unverändert. <ph type="x-smartling-placeholder"></ph> Einschränkungen für die Standortermittlung im Hintergrund
net.hostname werden nicht mehr unterstützt Das Abfragen der Systemeigenschaft net.hostname führt zu einem Nullergebnis. Keine
Neue Ausnahme von send(DatagramPacket) Die Methode send(DatagramPacket) gibt SocketException aus Die zuvor ausgeführte Methode connect(InetAddress, int) ist fehlgeschlagen. <ph type="x-smartling-placeholder"></ph> Verhaltensänderungen: Netzwerk- und HTTP(S)-Verbindungen
Korrekter Wert für NullPointerException von AbstractCollection Methoden AbstractCollection.removeAll(null) und AbstractCollection.retainAll(null) wirft jetzt immer einen NullPointerException; Bisher wurde NullPointerException nicht ausgegeben, wenn die Sammlung leer war. Durch diese Änderung wird das Verhalten an die Dokumentation angepasst. <ph type="x-smartling-placeholder"></ph> Verhaltensänderungen: Handhabung von Sammlungen
Korrekter Wert für NullPointerException von Currency.getDisplayName(null) Currency.getDisplayName(null) wird angerufen wirft NullPointerException. <ph type="x-smartling-placeholder"></ph> Verhaltensänderungen: Sprachen und Internationalisierung

Eine ausführlichere Liste der Verhaltensänderungen unter Android 8.0 (API-Level 26) Siehe Verhaltensänderungen unter Android 8.0.

Zielversion aktualisieren und Funktionen von Android 8.0 nutzen

In diesem Abschnitt wird erläutert, wie Sie die vollständige Unterstützung für Android 8.0 aktivieren. (API-Level 26), indem du targetSdkVersion auf 26 aktualisierst und neue Funktionen unter Android 8.0 hinzufügen.

Neben den neuen APIs bietet Android 8.0 auch einige Funktionen, ändert sich, wenn du targetSdkVersion auf 26 aktualisierst. Da sich einige Verhaltensänderungen Codeänderungen erfordern, um Fehler zu vermeiden, sollten Sie sich zunächst betroffen, wenn du die targetSdkVersion änderst, indem du alle Verhaltensänderungen für Apps, die auf Android 8.0 ausgerichtet sind überprüfen.

Hinweis:Die oben beschriebenen Schritte zur Plattformkompatibilität sicherzustellen zur Ausrichtung Ihrer App auf Android 8.0. Führen Sie diese Schritte daher zuerst aus.

Zielversion aktualisieren und die Funktionen von Android 8.0 Schritt für Schritt nutzen

Android 8.0 SDK herunterladen

Du kannst die SDK-Pakete herunterladen, um deine App mit Android 8.0 zu erstellen (API-Ebene 26) mit der neuesten Version von Android Studio (empfohlen wird Android Studio 3.0 oder höher). Android Studio 3.0 und höher enthält Tools zur Unterstützung der Funktionen von Android 8.0 Adaptive Symbole und herunterladbare Schriftarten. Wenn Sie diese Funktionen noch nicht benötigen, können Sie die stabile Version von Android Studio verwenden. 2.3.3, um deine App mit Android 8.0 zu entwickeln und die neuen APIs zu verwenden.

So richten Sie Android Studio mit beiden Versionen ein:

  1. Starten Sie Android Studio und öffnen Sie den SDK Manager, indem Sie auf Tools > SDK-Manager.
  2. Klicken Sie auf dem Tab SDK-Plattformen das Kästchen Paketdetails anzeigen an. Darunter Vorschau für Android 8.0: <ph type="x-smartling-placeholder">
      </ph>
    • 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 sehen Sie sich alle Elemente an, für die Updates verfügbar sind. Klicken Sie dazu auf jedes Kästchen mit einem Bindestrich ). Dazu sollten die neuesten Versionen der folgenden Elemente gehören: die erforderlich sind: <ph type="x-smartling-placeholder">
      </ph>
    • 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

compileSdkVersion aktualisieren, targetSdkVersion und der aktuellen Version der Support Library 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'
    // }
}

Übertragungsempfänger aus Manifestdatei entfernen

Da mit Android 8.0 (API-Level 26) neue Einschränkungen bei Übertragungsempfängern verwenden, sollten Sie alle Empfänger entfernen, die registriert für implizite Broadcast-Intents. Deine App funktioniert nicht, wenn sie an Ort und Stelle bleiben. während der Build-Erstellung oder der Laufzeit, haben aber keine Auswirkungen, wenn deine App unter Android 8.0 läuft.

Broadcasts, auf die nur Ihre App reagieren kann: explizite Broadcast-Intents und Broadcasts, die speziell an den Paketnamen Ihrer App gesendet werden. Das funktioniert auch bei Android 8.0

Es gibt Ausnahmen von dieser neuen Einschränkung. Für eine Eine Liste der impliziten Broadcasts, die in Apps für Android 8.0 weiterhin funktionieren, finden Sie unter Ausnahmen für implizite Übertragungen.

Android 8.0-App testen

Wenn Sie die oben genannten Vorbereitungen getroffen haben, können Sie Ihre App erstellen und um sicherzustellen, dass sie ordnungsgemäß funktioniert, wenn sie auf Android 8.0 ausgerichtet ist. (API-Level 26). Dies ist ein weiterer guter Zeitpunkt, Kern-App Qualitätsrichtlinien und Beste Testpraktiken

Wenn Sie beim Erstellen Ihrer App targetSdkVersion auf 26 gesetzt haben, Es gibt bestimmte Plattformänderungen, die Sie kennen sollten. Einige von können diese Änderungen das Verhalten Ihrer App erheblich beeinträchtigen oder sogar Ihre App vollständig funktionsunfähig machen, auch wenn Sie keine neuen in Android 8.0 unterstützt.

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 Informationen
Datenschutz Android 8.0 (API-Level 26) unterstützt nicht die Verwendung der net.dns1, net.dns2, net.dns3 oder net.dns4 hinzu. Verhaltensänderungen: Datenschutz
Beschreibbare und ausführbare Segmente erzwungen Bei nativen Bibliotheken wird in Android 8.0 (API-Level 26) die folgende Regel erzwungen: Daten sollten nicht ausführbar sein und der Code sollte nicht beschreibbar sein. Verhaltensänderungen: Native Bibliotheken
ELF-Kopfzeile und -Abschnitt validieren Mit der dynamischen Verknüpfung werden mehr Werte im ELF-Header geprüft und Abschnittsüberschriften und schlägt fehl, wenn sie ungültig sind. Verhaltensänderungen: Native Bibliotheken
Benachrichtigungen Apps, die auf Android 8.0 (API-Level 26) des SDK ausgerichtet sind muss zum Posten mindestens einen Benachrichtigungskanal implementieren Benachrichtigungen an Nutzer gesendet. API-Übersicht: Benachrichtigungen
Die Methode List.sort() Implementierungen dieser Methode dürfen Collections.sort() nicht mehr aufrufen oder deine App löst aufgrund eines Stacküberlaufs eine Ausnahme aus. Verhaltensänderungen: Handhabung der Abholung
Die Methode Collections.sort() In List-Implementierungen gibt Collections.sort() jetzt den Fehler ConcurrentModificationException. Verhalten Änderungen: Handhabung von Sammlungen

Eine ausführlichere Liste der Verhaltensänderungen in Android 8.0 (API-Level 26) Siehe Verhaltensänderungen unter Android 8.0.

Informationen zu den neuen Funktionen und APIs unter Android 8.0 (API-Level 26) findest du unter Funktionen und APIs unter Android 8.0