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
InputConnectioncan retrieve candidate selection data by callingTextAttribute.isTextSuggestionSelected(). These apps should then callAccessibilityEvent.setTextChangeTypes()when dispatchingTYPE_VIEW_TEXT_CHANGEDevents. Apps targeting Android 17 that use the standardTextViewwill have this feature enabled by default. (That is,TextViewwill 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_CHANGEDevents can callAccessibilityEvent.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łejMODE_BACKGROUND_ACTIVITY_START_ALLOWEDstarszego typu. Zamiast tego używaj szczegółowych elementów sterujących, takich jakMODE_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_INTERFACEpermission 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 holdINTERNET.
- 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
- 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.