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 związanych z przeniesieniem aplikacji na Androida 8.0 w 2 kluczowych fazach:
- Zapewnienie 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
aplikacji, ale mogą być wymagane drobne zmiany. - Zaktualizuj wersję docelową i użyj funkcji Androida 8.0
Gdy będziesz gotowy do korzystania z nowych funkcji platformy, zaktualizuj wartość
targetSdkVersion
na 26, sprawdź, czy aplikacja nadal działa prawidłowo, a potem zacznij używać nowych interfejsów API.
Zapewnienie zgodności z Androidem 8.0
Chodzi o to, aby Twoja aplikacja działała w niezmienionej formie na Androidzie 8.0 (poziom API 26). Niektóre zmiany w platformie mogą wpływać na działanie aplikacji, dlatego konieczne może być wprowadzenie pewnych poprawek, ale nie musisz używać nowych interfejsów API ani zmieniać targetSdkVersion
.
Przygotuj urządzenie z Androidem 8.0
- Jeśli masz zgodne urządzenie (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P lub Nexus Player), postępuj zgodnie z instrukcjami, aby zaprogramować flashowanie urządzenia.
- Możesz też pobrać obraz systemu Androida 8.0 na potrzeby emulatora Androida. Wyświetla się w Menedżerze pakietu SDK w sekcji Android 8.0 jako Google APIs Intel x86 Atom System Image.
Uwaga: obraz systemu Android 8.0 można pobrać w Android Studio 3.0 lub nowszej wersji. Więcej informacji znajdziesz w sekcji poniżej, w której znajdziesz instrukcje instalowania pakietu SDK Androida 8.0.
Przeprowadź testy 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óry wykonujesz podczas przygotowywania aplikacji do wydania. Warto teraz zapoznać się ze wskazówkami dotyczącymi jakości aplikacji i sprawdzonymi metodami testowania.
Testowanie ma jednak jeszcze inny aspekt: Android 8.0 wprowadza zmiany w platformie Androida, które mogą wpływać na działanie aplikacji lub całkowicie ją zepsuć, nawet jeśli nie zmienisz targetSdkVersion
. Dlatego ważne jest, aby przejrzeć najważniejsze zmiany podane w tabeli 1 i przetestować wszystkie wprowadzone poprawki, aby dostosować je do nich.
Zmień | Podsumowanie | Więcej informacji |
---|---|---|
rzadsze aktualizacje lokalizacji w tle, | Jeśli aplikacja otrzymuje aktualizacje lokalizacji z usługi działającej w tle, w Androidzie 8.0 (poziom interfejsu API 26) będzie otrzymywać je rzadziej niż w starszych wersjach Androida. Oznacza to, że usługa działająca w tle nie może otrzymywać więcej niż kilka aktualizacji lokalizacji na godzinę. Jednak gdy aplikacja jest na pierwszym planie, częstotliwość aktualizacji lokalizacji pozostaje niezmieniona. | Ograniczenia dotyczące 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 z send(DatagramPacket) |
Metoda send(DatagramPacket) zwraca błąd SocketException , jeśli wcześniej wykonana metoda connect(InetAddress, int) zakończyła się niepowodzeniem.
|
Zmiany w zachowaniu: połączenia sieciowe i HTTP(S) |
Prawidłowe NullPointerException z AbstractCollection
|
Funkcje AbstractCollection.removeAll(null) i AbstractCollection.retainAll(null) zawsze zwracają wartość NullPointerException . Wcześniej funkcja NullPointerException nie była wywoływana, gdy kolekcja była pusta.
Ta zmiana sprawia, że działanie jest zgodne z dokumentacją.
|
Zmiany w zachowaniu: obsługa kolekcji |
Prawidłowe NullPointerException z Currency.getDisplayName(null)
|
Wywołanie funkcji Currency.getDisplayName(null) powoduje wyjątek NullPointerException .
|
Zmiany w zachowaniu: język i internacjonalizacja |
Bardziej szczegółową listę zmian w działaniu Androida 8.0 (poziom interfejsu API 26) znajdziesz też w sekcji 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), aktualizując targetSdkVersion
do poziomu 26 oraz dodając nowe funkcje dostępne w Androidzie 8.0.
Oprócz nowych interfejsów API Android 8.0 wprowadza też zmiany w zachowaniu, gdy aktualizujesz targetSdkVersion
do poziomu 26. Ponieważ niektóre zmiany zachowania mogą wymagać wprowadzenia zmian w kodzie, aby uniknąć problemów, najpierw sprawdź, jak zmiana targetSdkVersion
może wpłynąć na Twoją aplikację. Aby to zrobić, zapoznaj się ze wszystkimi zmianami zachowania w przypadku aplikacji kierowanych na Androida 8.0.
Uwaga: aby ustawić kierowanie aplikacji na Androida 8.0, musisz najpierw wykonać opisane powyżej czynności, aby zapewnić zgodność platformy.
Pobierz pakiet SDK Androida 8.0
Możesz pobrać pakiety SDK, aby utworzyć aplikację w Androidzie 8.0 (poziom interfejsu API 26) w najnowszej wersji Android Studio (zalecamy Androida Studio w wersji 3.0 lub nowszej). Android Studio 3.0 lub nowsza wersja zawiera narzędzia do obsługi funkcji Androida 8.0, takich jak ikony adaptacyjne i fonty do pobrania. Jeśli nie potrzebujesz jeszcze tych funkcji, możesz użyć stabilnej wersji Android Studio 2.3.3, aby skompilować aplikację na Androida 8.0 i użyć nowych interfejsów API.
Aby skonfigurować dowolną wersję Android Studio, wykonaj te czynności:
- Uruchom Android Studio i otwórz Menedżera pakietu SDK, klikając Narzędzia > Menedżer pakietu SDK.
- Na karcie Platformy pakietu SDK zaznacz pole Pokaż szczegóły pakietu. W sekcji Podgląd na Androidzie 8.0 sprawdź te kwestie:
- Android SDK Platform 26
- Obraz systemu Intel x86 Atom Google APIs (wymagany tylko w przypadku emulatora)
- Przejdź na kartę Narzędzia pakietu SDK i odznacz wszystkie elementy, dla których dostępne są aktualizacje (kliknij pole wyboru , aby zaznaczyć kreskę). Powinny to być najnowsze wersje tych wymaganych elementów:
- Android SDK Build-Tools 26.0.0
- Android SDK Platform-Narzędzia w wersji 26.0.0
- Emulator Androida 26.0.0
- Aby zainstalować wszystkie wybrane pakiety SDK, kliknij OK.
Teraz możesz zacząć tworzyć aplikacje na Androida 8.0.
Aktualizowanie konfiguracji kompilacji
Zaktualizuj compileSdkVersion
, targetSdkVersion
i wersję biblioteki 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' // } }
Usuwanie odbiorników transmisji z pliku manifestu
W Androidzie 8.0 (poziom interfejsu API 26) wprowadzono nowe ograniczenia dotyczące odbiorników transmisji danych, dlatego usuń wszystkie odbiorniki transmisji danych zarejestrowane dla domyślnych intencji transmisji danych. Jeśli je skonfigurujesz, nie będą zakłócać działania aplikacji w momencie kompilacji ani w czasie działania, ale nie mają one wpływu na Androida 8.0.
Rozgłaszanie, na które może odpowiadać tylko Twoja aplikacja (czyli wyraźne intencje rozgłaszania i rozgłaszanie wysyłane do nazwy pakietu Twojej aplikacji) działa tak samo w Androidzie 8.0.
Od tej nowej zasady są wyjątki. Listę domyślnych transmisji, które nadal działają w aplikacjach kierowanych na Androida 8.0, znajdziesz w artykule Wyjątki dotyczące domyślnych transmisji.
Testowanie aplikacji na Androida 8.0
Po wykonaniu powyższych czynności możesz skompilować aplikację, a następnie przetestować ją, aby mieć pewność, że działa prawidłowo w przypadku kierowania na Androida 8.0 (poziom interfejsu API 26). To dobry moment na zapoznanie się ze podstawowymi wskazówkami dotyczącymi jakości aplikacji i sprawdzonymi metodami testowania.
Podczas tworzenia aplikacji z wartością targetSdkVersion
równą 26 należy pamiętać o określonych zmianach na platformie. Niektóre z tych zmian mogą znacząco wpłynąć na działanie aplikacji lub nawet spowodować jej całkowite zablokowanie, nawet jeśli nie wdrożysz nowych funkcji w Androidzie 8.0.
W tabeli 2. znajdziesz listę tych zmian wraz z linkami do dodatkowych informacji.
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ść |
Egzekwowane segmenty z możliwością zapisu i wykonywania | W przypadku bibliotek natywnych Android 8.0 (poziom interfejsu API 26) wymusza regułę, że dane nie mogą być uruchamiane, a kod nie może być zapisywany. | Zmiany w działaniu: biblioteki natywne |
Weryfikacja nagłówka i sekcji ELF | Linker dynamiczny sprawdza więcej wartości w nagłówku ELF i w nagłówkach sekcji, a jeśli są nieprawidłowe, operacja kończy się niepowodzeniem. | Zmiany w działaniu: biblioteki natywne |
Powiadomienia | Aplikacje kierowane na wersję SDK na Androida 8.0 (poziom interfejsu API 26) muszą mieć zaimplementowany co najmniej jeden kanał powiadomień, aby móc publikować powiadomienia dla użytkowników. | Omówienie interfejsu API: Notifications |
Metoda List.sort()
|
Implementacje tej metody mogą nie wywoływać już funkcji Collections.sort() , albo aplikacja wyrzuci wyjątek z powodu przepełnienia stosu.
|
Zmiany w działaniu: obsługa kolekcji |
Metoda Collections.sort()
|
W implementacjach list Collections.sort() wywołuje teraz błąd ConcurrentModificationException .
|
Zachowanie: zmiany dotyczące obsługi 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 interfejsu API 26), przeczytaj artykuł Funkcje i interfejsy API Androida 8.0.