Platforma Android 17 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 17 niezależnie od targetSdkVersion. Przetestuj aplikację, a potem w razie potrzeby zmodyfikuj ją, aby obsługiwała te zmiany.
Zapoznaj się też z listą zmian w działaniu, które wpływają tylko na aplikacje kierowane na Androida 17.
Bezpieczeństwo
Android 17 zawiera te ulepszenia zabezpieczeń urządzenia i aplikacji:
Harmonogram wycofywania atrybutu usesCleartextTraffic
W przyszłej wersji planujemy wycofać element usesCleartextTraffic.
Aplikacje, które muszą nawiązywać połączenia nieszyfrowane (HTTP), powinny przejść na korzystanie z pliku konfiguracji zabezpieczeń sieciowych, który umożliwia określenie, z jakimi domenami aplikacja musi nawiązywać połączenia nieszyfrowane.
Pamiętaj, że pliki konfiguracyjne zabezpieczeń sieci są obsługiwane tylko na poziomach interfejsu API 24 i wyższych. Jeśli minimalny poziom interfejsu API aplikacji jest niższy niż 24, musisz wykonać oba te działania:
- Ustaw atrybut
usesCleartextTrafficnatrue - Używanie pliku konfiguracji sieci
Jeśli minimalny poziom interfejsu API aplikacji to 24 lub wyższy, możesz użyć pliku konfiguracji sieci i nie musisz ustawiać wartości usesCleartextTraffic.
Ograniczanie niejawnych uprawnień URI
Obecnie, jeśli aplikacja uruchamia intencję z identyfikatorem URI, który ma działanie Send, SendMultiple lub ImageCapture, system automatycznie przyznaje aplikacji docelowej uprawnienia do odczytu i zapisu identyfikatora URI. Planujemy zmienić to zachowanie w Androidzie 18. Z tego powodu zalecamy, aby aplikacje wyraźnie przyznawały odpowiednie uprawnienia do URI, zamiast polegać na systemie.
Limity magazynu kluczy poszczególnych aplikacji
Aplikacje nie powinny tworzyć zbyt wielu kluczy w magazynie kluczy Androida, ponieważ jest to zasób współdzielony przez wszystkie aplikacje na urządzeniu. Od Androida 17 system egzekwuje limit liczby kluczy, które może posiadać aplikacja. Limit wynosi 50 tys. kluczy w przypadku aplikacji niesystemowych kierowanych na Androida 17 lub nowszego oraz 200 tys. kluczy w przypadku wszystkich pozostałych aplikacji. Aplikacje systemowe mają limit 200 tys. kluczy niezależnie od poziomu API, na który są kierowane.
Jeśli aplikacja spróbuje utworzyć klucze powyżej limitu, utworzenie zakończy się niepowodzeniem z kodem błędu KeyStoreException. Ciąg komunikatu wyjątku zawiera informacje o limicie klucza. Jeśli aplikacja wywołuje getNumericErrorCode() w przypadku wyjątku, wartość zwracana zależy od docelowego poziomu interfejsu API aplikacji:
- Aplikacje kierowane na Androida 17 lub nowszego:
getNumericErrorCode()zwraca nową wartośćERROR_TOO_MANY_KEYS. - Wszystkie inne aplikacje:
getNumericErrorCode()zwracaERROR_INCORRECT_USAGE.
Wrażenia użytkowników i interfejs systemu
Android 17 zawiera te zmiany, które mają na celu zapewnienie bardziej spójnego i intuicyjnego interfejsu.
Przywracanie domyślnej widoczności edytora IME po obróceniu
Od Androida 17, gdy konfiguracja urządzenia ulegnie zmianie (np. w wyniku obrócenia ekranu), a aplikacja nie obsłuży tej zmiany, poprzednia widoczność IME nie zostanie przywrócona.
Jeśli w aplikacji nastąpi zmiana konfiguracji, której nie obsługuje, a po zmianie klawiatura musi być widoczna, musisz wyraźnie o to poprosić. Możesz przesłać prośbę na jeden z tych sposobów:
- Ustaw atrybut
android:windowSoftInputModenastateAlwaysVisible. - Programowo poproś o wyświetlenie klawiatury ekranowej w metodzie
onCreate()aktywności lub dodaj metodęonConfigurationChanged().
Dane wejściowe od człowieka
Android 17 wprowadza te zmiany, które mają wpływ na sposób, w jaki aplikacje wchodzą w interakcję z urządzeniami wejściowymi, takimi jak klawiatury i touchpady.
Touchpady domyślnie dostarczają zdarzenia względne podczas przechwytywania wskaźnika
Od Androida 17, jeśli aplikacja zażąda przechwytywania wskaźnika za pomocą funkcji View.requestPointerCapture(), a użytkownik będzie korzystać z touchpada, system będzie rozpoznawać ruch wskaźnika i gesty przewijania wykonywane przez użytkownika i przekazywać je do aplikacji w taki sam sposób jak ruchy wskaźnika i kółka myszy. W większości przypadków eliminuje to konieczność dodawania przez aplikacje obsługujące przechwycone myszy specjalnej logiki obsługi touchpadów. Więcej szczegółów znajdziesz w dokumentacji View.POINTER_CAPTURE_MODE_RELATIVE.
Wcześniej system nie próbował rozpoznawać gestów wykonywanych na touchpadzie, tylko przekazywał do aplikacji surowe, bezwzględne lokalizacje palców w formacie podobnym do dotknięć ekranu dotykowego. Jeśli aplikacja nadal wymaga tych danych bezwzględnych, powinna wywołać nową metodę View.requestPointerCapture(int) z parametrem View.POINTER_CAPTURE_MODE_ABSOLUTE.
Multimedia
W Androidzie 17 wprowadziliśmy te zmiany w działaniu multimediów.
Wzmocnienie dźwięku w tle
Od Androida 17 platforma audio wymusza ograniczenia dotyczące interakcji audio w tle, w tym odtwarzania dźwięku, żądań ostrości dźwięku i interfejsów API zmiany głośności, aby mieć pewność, że te zmiany są inicjowane celowo przez użytkownika.
Jeśli aplikacja spróbuje wywołać interfejsy API audio, gdy nie znajduje się w prawidłowym cyklu życia, interfejsy API odtwarzania dźwięku i zmiany głośności zakończą działanie bez zgłaszania wyjątku ani wyświetlania komunikatu o błędzie. Interfejs API ostrości dźwięku zwraca kod wyniku AUDIOFOCUS_REQUEST_FAILED.
Więcej informacji, w tym strategie ograniczania ryzyka, znajdziesz w artykule Zwiększanie bezpieczeństwa dźwięku w tle.