Migracja na Androida 8.0

Android 8.0 (poziom interfejsu API 26) wprowadza zmiany w działaniu oraz nowe funkcje i interfejsy API, z których możesz korzystać w swoich aplikacjach. Ten dokument zawiera przegląd czynności, które należy wykonać, aby przeprowadzić migrację aplikacji na Androida 8.0 w dwóch kluczowych etapach:

  1. Zapewnianie zgodności z Androidem 8.0

    Sprawdź, czy Twoja aplikacja działa w pełni w nowej wersji platformy. Na tym etapie nie korzystasz z nowych interfejsów API ani nie zmieniasz targetSdkVersion aplikacji, ale konieczne mogą być drobne zmiany.

  2. Aktualizowanie wersji docelowej i korzystanie z funkcji Androida 8.0

    Gdy wszystko będzie gotowe do korzystania z nowych funkcji platformy, zaktualizuj targetSdkVersion do wersji 26, sprawdź, czy aplikacja nadal działa zgodnie z oczekiwaniami, a potem zacznij korzystać z nowych interfejsów API.

Zapewnienie zgodności z Androidem 8.0

Chcemy się upewnić, że Twoja aplikacja działa na Androidzie 8.0 (poziom interfejsu API 26) w taki sam sposób jak dotychczas. Niektóre zmiany na platformie mogą wpływać na zachowanie aplikacji, dlatego konieczne może być wprowadzenie pewnych zmian, ale nie musisz używać nowych interfejsów API ani zmieniać targetSdkVersion.

Szczegółowa zgodność z Androidem 8.0

Przygotowanie urządzenia z Androidem 8.0

Przeprowadzanie testów zgodności

W większości przypadków testowanie zgodności z Androidem 8.0 (poziom interfejsu API 26) obejmuje ten sam typ testów, które wykonujesz podczas przygotowywania aplikacji do opublikowania. To dobry moment, by zapoznać się ze podstawowymi wskazówkami dotyczącymi jakości aplikacji i sprawdzonymi metodami testowania.

Jest jednak jeszcze jeden aspekt testowania: Android 8.0 wprowadza zmiany na platformie Androida, które mogą wpłynąć na działanie aplikacji lub całkowicie ją uszkodzić, nawet jeśli nie zmienisz targetSdkVersion. Dlatego ważne jest, aby przejrzeć najważniejsze zmiany wymienione w tabeli 1 i przetestować wprowadzone poprawki.

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

Zmień Podsumowanie Dodatkowe informacje
Rzadsze aktualizowanie lokalizacji w tle Jeśli aplikacja otrzymuje aktualizacje lokalizacji z usługi w tle, będzie otrzymywać aktualizacje rzadziej na Androidzie 8.0 (poziom interfejsu API 26) niż na starszych wersjach Androida. Usługa w tle nie może otrzymywać aktualizacji lokalizacji częściej niż kilka razy na godzinę. Gdy jednak aplikacja jest na pierwszym planie, częstotliwość aktualizacji lokalizacji nie ulegnie zmianie. Limity lokalizacji w tle
Już nieobsługiwane: net.hostname. Zapytanie dotyczące właściwości systemowej net.hostname zwraca wynik o wartości null. Brak
Nowy wyjątek od send(DatagramPacket) Metoda send(DatagramPacket) zwraca błąd SocketException, jeśli wcześniej wykonywana metoda connect(InetAddress, int) zakończyła się niepowodzeniem. Zmiany w działaniu: połączenia sieciowe i połączenia HTTP(S)
Prawidłowa wartość NullPointerException z AbstractCollection metod AbstractCollection.removeAll(null) i AbstractCollection.retainAll(null) teraz zawsze wywołują NullPointerException. Wcześniej funkcja NullPointerException nie była wywoływana, gdy kolekcja była pusta. Ta zmiana sprawi, że zachowanie będzie spójne z dokumentacją. Zmiany w zachowaniu: obsługa kolekcji
Prawidłowa wartość NullPointerException od Currency.getDisplayName(null) Wywołanie Currency.getDisplayName(null) powoduje wystąpienie NullPointerException. Zmiany w działaniu: języki i międzynarodowość

Szerszą listę zmian w działaniu Androida 8.0 (poziom interfejsu API 26) znajdziesz też w artykule Zmiany w działaniu Androida 8.0.

Aktualizowanie wersji docelowej i korzystanie z funkcji Androida 8.0

Z tej sekcji dowiesz się, jak włączyć pełną obsługę Androida 8.0 (poziom interfejsu API 26) przez zaktualizowanie targetSdkVersion do wersji 26 i dodanie nowych funkcji dostępnych w Androidzie 8.0.

Oprócz oferowania nowych interfejsów API Android 8.0 wprowadza pewne zmiany w działaniu po zaktualizowaniu targetSdkVersion do wersji 26. Niektóre zmiany w działaniu mogą wymagać wprowadzenia zmian w kodzie, aby uniknąć uszkodzenia, dlatego najpierw zapoznaj się ze wszystkimi zmianami w działaniu aplikacji kierowanych na Androida 8.0, aby dowiedzieć się, jak zmiana targetSdkVersion może wpłynąć na Twoją aplikację.

Uwaga: opisane powyżej czynności, które pozwolą Ci zapewnić zgodność platformy, są niezbędne do kierowania aplikacji na Androida 8.0. Pamiętaj więc, by najpierw wykonać te czynności.

Aktualizowanie wersji docelowej i korzystanie z funkcji Androida 8.0 krok po kroku

Pobierz pakiet SDK do Androida 8.0

Możesz pobrać pakiety SDK, aby utworzyć aplikację na Androida 8.0 (poziom interfejsu API 26) przy użyciu najnowszej wersji Android Studio (zalecamy korzystanie z Androida Studio w wersji 3.0 lub nowszej). Android Studio w wersji 3.0 lub nowszej zawiera narzędzia, które ułatwiają korzystanie z funkcji Androida 8.0, takie jak ikony adaptacyjne i czcionki do pobrania. Jeśli jeszcze ich nie potrzebujesz, możesz użyć stabilnej wersji Androida Studio 2.3.3, by utworzyć aplikację na Androidzie 8.0 i używać nowych interfejsów API.

Aby skonfigurować dowolną wersję Androida Studio, 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 Podgląd Androida 8.0 sprawdź te kwestie:
    • Platforma 26 pakietu Android SDK
    • Interfejsy API Google – obraz systemu Atom Intel x86 (wymagany tylko przez emulator)
  3. Przejdź na kartę Narzędzia SDK i zaznacz wszystkie elementy, dla których dostępne są aktualizacje (kliknij każde pole wyboru ze myślnikiem ). Powinny zawierać najnowsze wymagane wersje:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Emulator Androida 26.0.0
  4. Kliknij OK, aby zainstalować wszystkie wybrane pakiety SDK.

Możesz teraz zacząć tworzyć aplikacje z Androidem 8.0.

Aktualizowanie konfiguracji kompilacji

Zaktualizuj compileSdkVersion, targetSdkVersion i bibliotekę pomocy do najnowszych 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ń odbiorników z pliku manifestu

Android 8.0 (poziom interfejsu API 26) wprowadza nowe ograniczenia dotyczące odbiorników, dlatego musisz usunąć wszystkich odbiorników, którzy są zarejestrowani na potrzeby intencji niejawnych. Pozostawienie ich nie wpływa na działanie aplikacji w czasie kompilacji ani w trakcie działania, ale nie spowoduje żadnych zmian, jeśli aplikacja będzie działać w systemie Android 8.0.

Komunikaty, na które może reagować tylko Twoja aplikacja (czyli intencje jednoznaczne i komunikaty wysyłane na nazwę pakietu Twojej aplikacji), nadal działają tak samo na Androidzie 8.0.

Od tego nowego ograniczenia istnieją wyjątki. Listę niejawnych komunikatów, które nadal działają w aplikacjach kierowanych na Androida 8.0, znajdziesz w artykule Wyjątki dotyczące transmisji niejawnej.

Testowanie aplikacji na Androida 8.0

Po zakończeniu przygotowań możesz utworzyć aplikację, a potem ją dodatkowo przetestować, aby sprawdzić, czy działa prawidłowo z kierowaniem na Androida 8.0 (poziom API 26). To kolejny dobry moment na zapoznanie się z podstawowymi wskazówkami dotyczącymi jakości aplikacji i sprawdzonymi metodami testowania.

Jeśli podczas tworzenia aplikacji parametr targetSdkVersion ma wartość 26, musisz wiedzieć o pewnych zmianach dotyczących platformy. Niektóre z tych zmian mogą znacząco wpłynąć na działanie aplikacji, a nawet spowodować jej uszkodzenie, nawet jeśli nie wdrożysz nowych funkcji w Androidzie 8.0.

W tabeli 2 znajdziesz listę wprowadzonych zmian wraz z linkami do dodatkowych informacji.

Tabela 2. Najważniejsze zmiany, które mają wpływ na aplikacje, gdy targetSdkVersion ma wartość 26.

Zmień Podsumowanie Dodatkowe informacje
prywatność Android 8.0 (poziom interfejsu API 26) nie obsługuje właściwości systemowych net.dns1, net.dns2, net.dns3 ani net.dns4. Zmiany w zachowaniu: prywatność
Wymuszanie segmentów możliwych do zapisu i wykonywalnych W przypadku bibliotek natywnych Android 8.0 (poziom interfejsu API 26) wymusza regułę, według której dane nie powinny być wykonywalne, a kod nie powinien dawać możliwości zapisu. Zmiany w działaniu: biblioteki natywne
Weryfikacja nagłówka i sekcji ELF Tag łączący dynamiczne sprawdza więcej wartości w nagłówku ELF i nagłówkach sekcji. Jeśli są nieprawidłowe, nie działa tak jak powinna. Zmiany w działaniu: biblioteki natywne
Powiadomienia Aby publikować powiadomienia dla użytkowników, aplikacje kierowane na pakiet SDK na Androida 8.0 (poziom interfejsu API 26) muszą implementować co najmniej 1 kanał powiadomień. Omówienie interfejsu API: powiadomienia
Metoda List.sort() Implementacje tej metody nie mogą już wywoływać funkcji Collections.sort() lub aplikacja zgłosi wyjątek z powodu przepełnienia stosu. Zmiany w zachowaniu: obsługa kolekcji
Metoda Collections.sort() W implementacjach listy Collections.sort() generuje teraz błąd ConcurrentModificationException. Zmiany w zachowaniu: obsługa kolekcji

Szerszą listę zmian w działaniu Androida 8.0 (poziom interfejsu API 26) znajdziesz w artykule Zmiany w działaniu Androida 8.0.

Aby poznać nowe funkcje i interfejsy API dostępne w Androidzie 8.0 (poziom API 26), przeczytaj artykuł o funkcjach i interfejsach API Androida 8.0.