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
Currently, if an app launches an intent with a URI that has the action Send,
SendMultiple, or ImageCapture, the system automatically grants the read and
write URI permissions to the target app. We plan to change this behavior in
Android 18. For this reason, we recommend that apps explicitly
grant the relevant URI permissions instead of relying on the system to grant
them.
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
Beginning with Android 17, when the device's configuration changes (for example, through rotation), and this is not handled by the app itself, the previous IME visibility is not restored.
If your app undergoes a configuration change that it does not handle, and the app needs the keyboard to be visible after the change, you must explicitly request this. You can make this request in one of the following ways:
- Set the
android:windowSoftInputModeattribute tostateAlwaysVisible. - Programmatically request the soft keyboard in your activity's
onCreate()method, or add theonConfigurationChanged()method.
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
Beginning with Android 17, if an app requests pointer capture using
View.requestPointerCapture() and the user uses a touchpad, the system
recognizes pointer movement and scrolling gestures from the user's touches and
reports them to the app in the same way as pointer and scroll wheel movements
from a captured mouse. In most cases, this removes the need for apps that
support captured mice to add special handling logic for touchpads. For more
details, see the documentation for View.POINTER_CAPTURE_MODE_RELATIVE.
Previously, the system did not attempt to recognize gestures from the touchpad,
and instead delivered the raw, absolute finger locations to the app in a similar
format to touchscreen touches. If an app still requires this absolute data, it
should call the new View.requestPointerCapture(int) method with
View.POINTER_CAPTURE_MODE_ABSOLUTE instead.
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.