Migracja na Androida 8.0

Android 8.0 (poziom API 26) wprowadza zmiany w działaniu oraz nowe funkcje i interfejsy API, które możesz wykorzystać w swoich aplikacjach. Ten dokument zawiera omówienie etapów migracji aplikacji na Androida 8.0 w 2 etapach:

  1. Zapewnianie zgodności z Androidem 8.0

    Sprawdź, czy aplikacja działa w pełni w nowej wersji platformy. Na tym etapie nie używasz nowych interfejsów API ani nie zmieniasz targetSdkVersion swojej aplikacji, ale drobne zmiany może być konieczne.

  2. Aktualizowanie wersji docelowej i korzystanie z funkcji Androida 8.0

    Gdy wszystko będzie gotowe do rozpoczęcia korzystania z nowych funkcji platformy, zaktualizuj targetSdkVersion do wersji 26, sprawdź, czy aplikacja jest nadal aktywna aby działało zgodnie z oczekiwaniami, a potem zacząć korzystać z nowych interfejsów API.

Zgodność z Androidem 8.0

Zależy nam na tym, aby Twoja dotychczasowa aplikacja działała na Androidzie 8.0 w takiej postaci, w jakiej jest. (poziom interfejsu API 26). Niektóre zmiany na platformie mogą wpływać na działanie aplikacji, konieczne może być wprowadzenie pewnych zmian, ale nie trzeba używać nowych interfejsów API ani zmień targetSdkVersion.

Zadbaj krok po kroku o zgodność z Androidem 8.0

Przygotowywanie urządzenia z Androidem 8.0

  • Jeśli masz zgodne urządzenie (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P lub Nexus ), postępuj zgodnie z instrukcje w celu flashowania urządzenia.
  • Możesz też pobrać obraz systemu Androida 8.0 na potrzeby emulatora Androida. Jest wymienione w Menedżer SDK w Android 8.0 jako obraz systemu interfejsów API Google Intel x86 Atom.

    Uwaga: obraz systemu Android 8.0 jest dostępny do pobrania z Android Studio 3.0 lub nowszy. Więcej informacji znajdziesz w sekcji poniżej, w której dowiesz się, jak pobrać pakiet Android 8.0 SDK.

Testy zgodności

Najczęściej jest to testowanie zgodności z Androidem 8.0 (poziom interfejsu API 26). obejmuje ten sam typ testów, które wykonujesz podczas przygotowań do opublikowania aplikacji To dobry moment na zapoznanie się ze podstawowymi wskazówkami dotyczącymi jakości aplikacji i sprawdzonymi metodami testowania.

Testowanie ma też jednak inny aspekt: Android 8.0 wprowadza zmiany w systemie Android. które mogą oddziaływać na działanie aplikacji lub całkowicie zepsuć jej działanie, nawet jeśli nie zmienisz targetSdkVersion. Z tego powodu ważne jest, aby zapoznać się z kluczowymi zmianami, w tabeli 1 i przetestować wszystkie wprowadzone poprawki, aby dostosować je do zmian.

Tabela 1. Najważniejsze zmiany, które wpływają na wszystkie aplikacje z Androidem 8.0.

Zmień Podsumowanie Więcej informacji
Rzadsze aktualizacje lokalizacji w tle Jeśli aplikacja otrzymuje aktualizacje lokalizacji z usługi w tle, to rzadziej aktualizacje na Androidzie 8.0 (poziom interfejsu API 26) w porównaniu ze starszymi wersjami Androida. W szczególności chodzi o tło, usługa nie może odbierać aktualizacji lokalizacji częściej niż kilka razy na godzinę. Pamiętaj jednak, że Aplikacja działa na pierwszym planie, częstotliwość aktualizacji lokalizacji pozostaje bez zmian. Limity lokalizacji w tle
Już nieobsługiwane: net.hostname. Zapytanie o właściwość systemową net.hostname daje wynik o wartości null. Brak
Nowy wyjątek od reguły send(DatagramPacket) Metoda send(DatagramPacket) wysyła SocketException jeśli wcześniej wykonana metoda connect(InetAddress, int) nie powiodła się. Zmiany w działaniu: połączenia sieciowe i HTTP(S)
Odpowiednie: NullPointerException od AbstractCollection metod AbstractCollection.removeAll(null) i AbstractCollection.retainAll(null) zawsze przesyła NullPointerException; poprzednio NullPointerException nie został zgłoszony, jeśli kolekcja była pusta. Ta zmiana sprawia, że zachowanie jest zgodne z dokumentacją. Zmiany w działaniu: obsługa zbierania danych
Odpowiednie: NullPointerException od Currency.getDisplayName(null) Dzwonię pod Currency.getDisplayName(null) rzuca NullPointerException. Zmiany w zachowaniu: język i internacjonalizacja

Szersza lista zmian w działaniu Androida 8.0 (poziom interfejsu API 26) również zobacz Zmiany w działaniu Androida 8.0.

Aktualizowanie wersji docelowej i korzystanie z funkcji Androida 8.0

W tej sekcji dowiesz się, jak włączyć pełną obsługę Androida 8.0 (poziom interfejsu API 26) po zaktualizowaniu urządzenia targetSdkVersion do wersji 26 i dodawaniu nowych funkcji dostępnych w Androidzie 8.0.

Oprócz nowych interfejsów API Android 8.0 wprowadza pewne zachowania zmieni się po zaktualizowaniu targetSdkVersion do wersji 26. Ponieważ niektóre zachowania zmieniają się może wymagać zmian w kodzie, aby uniknąć awarii, gdy zmienisz targetSdkVersion, sprawdzając wszystkie zmiany w działaniu aplikacji kierowanych na Androida 8.0.

Uwaga: czynności opisane powyżej, aby zapewnienie zgodności z platformą jest wymagane w przypadku wymagań wstępnych. do kierowania aplikacji na Androida 8.0, więc wykonaj te czynności w pierwszej kolejności.

Zaktualizuj wersję docelową, by krok po kroku korzystać z funkcji Androida 8.0

Pobierz pakiet SDK do Androida 8.0

Aby stworzyć aplikację na Androida 8.0, możesz pobrać pakiety SDK (poziom interfejsu API 26) za pomocą najnowszej wersji Android Studio (zalecamy Android Studio w wersji 3.0 lub nowszej). Android Studio 3.0+ zawiera narzędzia, które pomagają w korzystaniu z funkcji Androida 8.0 takich jak ikony adaptacyjne czcionki do pobrania. Jeśli nie potrzebujesz jeszcze tych funkcji, możesz użyć stabilnej wersji Android Studio. 2.3.3, aby stworzyć aplikację w Androidzie 8.0 i korzystać z nowych interfejsów API.

Aby skonfigurować Androida Studio w dowolnej wersji, wykonaj te czynności:

  1. Uruchom Android Studio i otwórz Menedżera pakietów SDK, klikając Narzędzia > Menedżer pakietów SDK.
  2. Na karcie Platformy SDK zaznacz Pokaż szczegóły pakietu. Poniżej Wersja testowa Androida 8.0:
    • Android SDK Platform 26
    • Interfejsy API Google – obraz systemu Intel x86 Atom (wymagane tylko w przypadku emulatora)
  3. Przejdź na kartę Narzędzia SDK i sprawdź wszystkie elementy, dla których dostępne są aktualizacje (kliknij każdego pola wyboru, które wyświetla myślnik ). Powinny one obejmować najnowsze wersje tych elementów które są wymagane:
      .
    • Android SDK Build-Narzędzia w wersji 26.0.0
    • Android SDK Platform-Narzędzia w wersji 26.0.0
    • Emulator Androida 26.0.0
  4. Kliknij OK, aby zainstalować wszystkie wybrane pakiety SDK.

Teraz możesz zacząć tworzyć z Androidem 8.0.

Zaktualizuj konfigurację kompilacji

Zaktualizuj urządzenie compileSdkVersion, targetSdkVersion oraz z biblioteki pomocy do najnowszej wersji dostępnych wersji, na przykład:

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'
    // }
}

Usuń odbiorniki z pliku manifestu

Android 8.0 (poziom API 26) wprowadza ograniczenia dla odbiorników, usuń wszystkie odbiorniki, zarejestrowanych na potrzeby intencji transmisji implicit. Pozostawienie ich na miejscu nie psuje aplikacji w czasie kompilacji lub w czasie działania. Nie mają one jednak wpływu na Androida 8.0.

Komunikaty, na które może reagować tylko Twoja aplikacja – jawne intencje oraz wiadomości wysyłane konkretnie na nazwę pakietu Twojej aplikacji – działają tak samo na Android 8.0

Istnieją wyjątki od tego nowego ograniczenia. Dla listę niejawnych komunikatów, które nadal działają w aplikacjach kierowanych na Androida 8.0. Więcej informacji znajdziesz w sekcji Wyjątki dotyczące ogólnej transmisji.

Testowanie aplikacji na Androida 8.0

Po zakończeniu powyższych przygotowań możesz utworzyć aplikację, a potem przetestować ją , aby upewnić się, że działa prawidłowo w kierowaniu na Androida 8.0. (poziom interfejsu API 26). To dobry moment, aby przejrzeć Aplikacja podstawowa Wskazówki dotyczące jakości i najlepsza Praktyki testowania.

Gdy tworzysz aplikację z atrybutem targetSdkVersion ustawionym na 26, musisz pamiętać o konkretnych zmianach dotyczących platformy. Niektóre z te zmiany mogą mieć istotny wpływ na działanie aplikacji, a nawet całkowicie zepsuć aplikację, nawet jeśli nie wdrożysz nowych, w Androidzie 8.0.

Tabela 2 zawiera listę tych zmian wraz z linkami do dodatkowych informacji.

Tabela 2. Najważniejsze zmiany wpływające na aplikacje gdy targetSdkVersion ma wartość 26.

Zmień Podsumowanie Więcej informacji
Prywatność Android 8.0 (poziom interfejsu API 26) nie obsługuje użycia funkcji net.dns1, net.dns2, net.dns3 lub net.dns4. Zmiany w działaniu: Prywatność
Egzekwowane segmenty możliwe do zapisu i wykonywalne W przypadku bibliotek natywnych Android 8.0 (poziom interfejsu API 26) wymusza regułę, która dane nie powinny być wykonywalne, a kod nie powinien umożliwiać zapisu. Zmiany w działaniu: Biblioteki natywne
Weryfikacja nagłówka i sekcji ELF Dynamiczny tag łączący sprawdza więcej wartości w nagłówku ELF i nagłówków sekcji, a zakończy się niepowodzeniem, jeśli będą nieprawidłowe. Zmiany w działaniu: Biblioteki natywne
Powiadomienia Aplikacje kierowane na wersję pakietu SDK na Androida 8.0 (poziom interfejsu API 26) musi zaimplementować co najmniej 1 kanał powiadomień, aby opublikować powiadomienia. Omówienie interfejsu API: Powiadomienia
Metoda List.sort() Implementacje tej metody mogą nie wywoływać metody Collections.sort() lub aplikacja zgłosi wyjątek z powodu przepełnienia stosu. Zmiany w działaniu: Odbiór
Metoda Collections.sort() W implementacji listy funkcja Collections.sort() wysyła teraz błąd ConcurrentModificationException Zachowanie Zmiany: obsługa windykacji

Bardziej szczegółowa lista zmian w działaniu Androida 8.0 (poziom API 26) zobacz Zmiany w działaniu Androida 8.0.

Aby poznać nowe funkcje i interfejsy API dostępne w Androidzie 8.0 (poziom API 26), zapoznaj się z artykułami Funkcje i interfejsy API Androida 8.0