Migracja aplikacji na Androida 9

Android 9 (poziom interfejsu API 28) wprowadza nowe funkcje i interfejsy API, z których możesz korzystać w swoich aplikacjach. Wprowadziliśmy też zmiany w sposobie działania. Ten dokument zawiera przegląd czynności, które należy wykonać, aby przenieść aplikacje na Androida 9, które obejmują 2 główne etapy:

  1. Uzyskiwanie podstawowej zgodności z Androidem 9

    Sprawdź, czy Twoja istniejąca aplikacja jest w pełni funkcjonalna w nowej wersji platformy. Na tym etapie nie używasz nowych interfejsów API ani nie zmieniasz targetSdkVersion aplikacji, ale konieczne mogą być drobne zmiany.

  2. Kieruj reklamy na nową platformę, skompiluj pakiet SDK Androida 9 i zastosuj funkcje Androida 9

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

Przygotowanie urządzenia z Androidem 9

Jeśli masz zgodne urządzenie, uzyskaj od producenta obraz systemu Android 9. Kliknij tutaj, aby wyświetlić obrazy fabryczne urządzeń Pixel. Ogólne instrukcje dotyczące flashowania obrazu systemu znajdziesz tutaj.

Możesz też pobrać obraz systemu Android 9 emulatora Androida. Jest w Menedżerze SDK w sekcji Android API 28 jako Interfejs API Google API Intel x86 Atom.

Uwaga: obraz systemu emulatora Androida 9 można pobrać w Android Studio 3.1 lub nowszym. Android Studio 3.2 zapewnia maksymalną zgodność. Więcej informacji znajdziesz w artykule Pobieranie pakietu SDK do Androida 9.

Zapewnienie zgodności z Androidem 9

Chcemy mieć pewność, że Twoja aplikacja działa na Androidzie 9 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 9

Przeprowadzanie testów zgodności

W większości przypadków testowanie zgodności z Androidem 9 obejmuje ten sam typ testów, które wykonujesz, gdy przygotowujesz się do opublikowania aplikacji. 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 9 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 9.

Zmień Podsumowanie
Ograniczenia dotyczące interfejsów spoza SDK Dostęp do określonych interfejsów spoza SDK jest teraz blokowany niezależnie od tego, czy dostęp jest bezpośredni, przez JNI czy przez analizę. Próby uzyskania dostępu do interfejsów z ograniczeniami generują błędy takie jak NoSuchFieldException i NoSuchMethodException. Więcej informacji znajdziesz w sekcji Ograniczenia interfejsów innych niż SDK.
Usunięcie dostawcy usług kryptograficznych W Androidzie 9 dostawca Crypto JCA został usunięty. Wywołania SecureRandom.getInstance("SHA1PRNG", "Crypto") powodują wywołanie NoSuchProviderException.
Dokładniejszy dekoder UTF-8 W Androidzie 9 dekoder UTF-8 dla języka Java jest bardziej rygorystyczny i jest zgodny ze standardem Unicode.
Dostęp do kamery, mikrofonu i czujników jest zablokowany w przypadku nieaktywnych aplikacji Gdy aplikacje są nieaktywne, nie mają już dostępu do aparatu, mikrofonu ani czujników SensorManager.

Szerszą listę zmian w działaniu wszystkich aplikacji na Androida 9 znajdziesz w dokumencie Zmiany w działaniu.

Aktualizowanie wersji docelowej i korzystanie z funkcji Androida P

W tej sekcji wyjaśniamy, jak włączyć pełną obsługę Androida 9 przez zaktualizowanie systemu targetSdkVersion do wersji 28 i dodanie nowych funkcji dostępnych w Androidzie 9.

Oprócz oferowania nowych interfejsów API Android 9 wprowadza pewne zmiany w działaniu po aktualizacji targetSdkVersion do wersji 28. 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 9, 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 9. Pamiętaj więc, by najpierw wykonać te czynności.

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

Pobierz pakiet SDK do Androida 9

Pakiety SDK umożliwiają tworzenie aplikacji na Androida 9 za pomocą Androida Studio 3.1 lub nowszego. Jeśli nie potrzebujesz jeszcze nowych funkcji Androida 9 i chcesz skompilować kod tylko z tą wersją platformy, możesz użyć Androida 3.1. Android Studio 3.2 zapewnia pełną obsługę funkcji Androida 9.

Testowanie aplikacji na Androida 9

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

Gdy kompilujesz aplikację z parametrem targetSdkVersion ustawionym na P, musisz pamiętać o pewnych zmianach na platformie. Niektóre z tych zmian mogą znacząco wpłynąć na działanie aplikacji, a nawet całkowicie ją uszkodzić, nawet jeśli nie wdrożysz nowych funkcji w Androidzie 9.

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ść 28.

Zmień Podsumowanie
Uprawnienia usługi na pierwszym planie Aplikacje, które chcą korzystać z usług działających na pierwszym planie, muszą teraz najpierw poprosić o uprawnienie FOREGROUND_SERVICE. Jest to normalne uprawnienie, dlatego system automatycznie przyznaje je aplikacji żądającej. Uruchomienie usługi na pierwszym planie bez uprawnień powoduje zgłoszenie wyjątku SecurityException.
Wycofanie szyfrów Bouncy Castle W Androidzie 9 wycofujemy kilka szyfrów od dostawcy Bouncy Castle na rzecz tych zapewnianych przez dostawcę Conscrypt. Wywołania getInstance(), które żądają dostawcy Bouncy Castle, generują NoSuchAlgorithmException błędy. Aby naprawić błędy, nie określaj dostawcy w getInstance() (czyli nie zażądaj implementacji domyślnej).
Usunięcie bezpośredniego dostępu do: Build.serial Aplikacje, które potrzebują identyfikatora Build.serial, muszą teraz żądać uprawnienia READ_PHONE_STATE, a następnie używać nowej metody Build.getSerial() dodanej w Androidzie 9.
Niedozwolone udostępnianie katalogu danych WebView Aplikacje nie mogą już współużytkować jednego katalogu danych WebView pomiędzy procesami. Jeśli Twoja aplikacja ma więcej niż jeden proces korzystający z komponentu WebView, CookieManager lub innego interfejsu API w pakiecie android.webkit, ulegnie awarii, gdy drugi proces wywoła metodę WebView.
Dostęp do katalogu danych aplikacji zablokowany przez SELinux System wymusza stosowanie piaskownicy SELinux z ograniczeniami SELinux dla poszczególnych aplikacji w prywatnym katalogu danych każdej aplikacji. Bezpośredni dostęp do katalogu danych innej aplikacji za pomocą ścieżki jest teraz niedozwolony. Aplikacje mogą nadal udostępniać dane za pomocą mechanizmów IPC, w tym przez przekazywanie FD.

Szerszą listę zmian w działaniu aplikacji kierowanych na Androida 9 znajdziesz w dokumencie Zmiany w działaniu.

Aby poznać nowe funkcje i interfejsy API dostępne w Androidzie 9, przeczytaj artykuł o funkcjach i interfejsach API Androida 9.