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:
- 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. - 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
.
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.
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:
- Uruchom Android Studio i otwórz Menedżera pakietów SDK, klikając Narzędzia > Menedżer pakietów SDK.
- 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)
- 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
- 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