Zmiany w działaniu: wszystkie aplikacje

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 usesCleartextTraffic na true
  • 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() zwraca ERROR_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:windowSoftInputMode na stateAlwaysVisible.
  • 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.