Zmiany w działaniu: aplikacje kierowane na Androida 17 lub nowszego

Podobnie jak w przypadku poprzednich wersji Androida, w Androidzie 17 wprowadziliśmy zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wyłącznie aplikacji kierowanych na Androida 17 lub nowszego. Jeśli Twoja aplikacja jest kierowana na Androida 17 lub nowszego, zmodyfikuj ją, aby w odpowiednich przypadkach obsługiwała te działania.

Zapoznaj się też z listą zmian w działaniu, które wpływają na wszystkie aplikacje działające na Androidzie 17 niezależnie od targetSdkVersion aplikacji.

Główna funkcja

Android 17 zawiera te zmiany, które modyfikują lub rozszerzają różne podstawowe funkcje systemu Android.

Nowa implementacja MessageQueue bez blokad

Od Androida 17 aplikacje kierowane na Androida 17 lub nowszego otrzymują nową implementację android.os.MessageQueue bez blokad. Nowa implementacja zwiększa wydajność i zmniejsza liczbę pominiętych klatek, ale może powodować awarie klientów, którzy korzystają z pól i metod prywatnych MessageQueue.

Więcej informacji, w tym strategii ograniczania ryzyka, znajdziesz w przewodniku po zmianach w działaniu MessageQueue.

Ułatwienia dostępu

W Androidzie 17 wprowadziliśmy te zmiany, aby poprawić dostępność.

Ułatwienia dostępu do złożonego pisania na klawiaturze fizycznej IME

This feature introduces new AccessibilityEvent and TextAttribute APIs to enhance screen reader spoken feedback for CJKV language input. CJKV IME apps can now signal whether a text conversion candidate has been selected during text composition. Apps with edit fields can specify text change types when sending text changed accessibility events. For example, apps can specify that a text change occurred during text composition, or that a text change resulted from a commit. Doing this enables accessibility services such as screen readers to deliver more precise feedback based on the nature of the text modification.

App adoption

  • IME Apps: When setting composing text in edit fields, IMEs can use TextAttribute.Builder.setTextSuggestionSelected() to indicate whether a specific conversion candidate was selected.

  • Apps with Edit Fields: Apps that maintain a custom InputConnection can retrieve candidate selection data by calling TextAttribute.isTextSuggestionSelected(). These apps should then call AccessibilityEvent.setTextChangeTypes() when dispatching TYPE_VIEW_TEXT_CHANGED events. Apps targeting Android 17 that use the standard TextView will have this feature enabled by default. (That is, TextView will handle retrieving data from the IME and setting text change types when sending events to accessibility services).

  • Accessibility Services: Accessibility services that process TYPE_VIEW_TEXT_CHANGED events can call AccessibilityEvent.getTextChangeTypes() to identify the nature of the modification and adjust their feedback strategies accordingly.

Bezpieczeństwo

Android 17 wprowadza te ulepszenia zabezpieczeń urządzeń i aplikacji:

Bezpieczeństwo aktywności

W Androidzie 17 platforma kontynuuje przejście na architekturę „bezpieczną domyślnie”, wprowadzając zestaw ulepszeń zaprojektowanych w celu ograniczenia poważnych exploitów, takich jak wyłudzanie informacji, przejmowanie interakcji i ataki typu „confused deputy”. Ta aktualizacja wymaga od deweloperów wyraźnego zaakceptowania nowych standardów bezpieczeństwa, aby zachować zgodność aplikacji i ochronę użytkowników.

Najważniejsze zmiany dla programistów:

  • Wzmocnienie BAL i ulepszone wyrażanie zgody: udoskonalamy ograniczenia dotyczące uruchamiania aktywności w tle (BAL), rozszerzając ochronę na IntentSender. Deweloperzy muszą zrezygnować ze stałej MODE_BACKGROUND_ACTIVITY_START_ALLOWED starszego typu. Zamiast tego używaj szczegółowych elementów sterujących, takich jak MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, które ograniczają uruchamianie aktywności do sytuacji, w których aplikacja wywołująca jest widoczna, co znacznie zmniejsza obszar ataku.
  • Narzędzia do wdrażania: deweloperzy powinni korzystać z trybu ścisłego i zaktualizowanych kontroli lint, aby identyfikować starsze wzorce i zapewnić gotowość na przyszłe wymagania dotyczące docelowego pakietu SDK.

Ochrona localhosta

To improve platform security and user privacy, Android 17 introduces a new install-time permission, USE_LOOPBACK_INTERFACE. This change restricts cross-app and cross-profile communication over the loopback interface (for example, 127.0.0.1 or ::1), which was previously implicitly allowed with the INTERNET permission. For apps targeting Android 17 or higher, the following rules apply:

  • Mutual consent required: cross-app and cross-profile communication is now blocked by default. For a connection to succeed, both the sending app and the receiving app must explicitly declare the USE_LOOPBACK_INTERFACE permission in their manifests.
  • Intra-app traffic exempt: Loopback communication within the same app (intra-app communication) remains unaffected and does not require this new permission.
  • Target SDK behavior:
    • App targets Android 17 or higher: The permission must be explicitly requested. If it is missing, socket operations (such as TCP connect or UDP send) fail, typically returning an EPERM (operation not permitted) error.
    • App targets API level 36 or lower: The permission is treated as a split permission on INTERNET. Apps targeting lower API levels are auto-granted this permission if they hold INTERNET.
  • Compatibility warning: If a receiving app updates its target to Android 17 but fails to request this permission, incoming connections from other apps are be rejected, even if the sending app targets a lower API level.

Domyślne włączanie CT

Jeśli aplikacja jest kierowana na Androida 17 lub nowszego, protokół Certificate Transparency (CT) jest domyślnie włączony. (Na Androidzie 16 CT jest dostępny, ale aplikacje musiały wyrazić zgodę na jego używanie).

Bezpieczniejsza natywna DCL-C

Jeśli Twoja aplikacja jest kierowana na Androida 17 lub nowszego, bezpieczniejsza ochrona dynamicznego ładowania kodu (DCL) wprowadzona w Androidzie 14 w przypadku plików DEX i JAR obejmuje teraz biblioteki natywne.

Wszystkie pliki natywne wczytane za pomocą funkcji System.load() muszą być oznaczone jako tylko do odczytu. W przeciwnym razie system zgłasza wyjątek UnsatisfiedLinkError.

Zalecamy, aby aplikacje w miarę możliwości unikały dynamicznego wczytywania kodu, ponieważ znacznie zwiększa to ryzyko naruszenia bezpieczeństwa aplikacji przez wstrzyknięcie lub zmodyfikowanie kodu.

Formaty urządzeń

Android 17 wprowadza te zmiany, aby poprawić komfort użytkowania na urządzeniach o różnych rozmiarach i formach.

Zmiany w interfejsie Platform API, które powodują ignorowanie ograniczeń dotyczących orientacji, możliwości zmiany rozmiaru i formatu obrazu na dużych ekranach (sw>=600dp)

We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 or higher.

For more information, see Restrictions on orientation and resizability are ignored.