Как и в предыдущих версиях, Android 17 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются исключительно к приложениям, ориентированным на Android 17 или более поздние версии. Если ваше приложение ориентировано на Android 17 или более поздние версии, вам следует внести в него изменения для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений в поведении, которые затрагивают все приложения, работающие на Android 17, независимо от targetSdkVersion вашего приложения.
Пользовательский опыт и пользовательский интерфейс системы
В Android 17 внесены следующие изменения, призванные обеспечить более согласованный и интуитивно понятный пользовательский интерфейс.
Виджет ограничения памяти
Beginning with Android 17, for apps targeting
Android 17 (API level 37) or higher, the system enforces a strict memory
limit (1.5 * screen width * screen height * 4) against the combined memory usage
of both Bitmaps and Icons present in the RemoteViews parcel. Exceeding these
limits throws a fatal IllegalArgumentException and crashes the app's process.
For more information, see UpdateAppWidget.
Основная функциональность
В Android 17 внесены следующие изменения, которые модифицируют или расширяют различные основные возможности системы Android.
Новая реализация MessageQueue без блокировок
Beginning with Android 17, apps targeting Android 17 (API level 37)
or higher receive a new lock-free implementation of
android.os.MessageQueue. The new implementation improves performance and
reduces missed frames, but may break clients that reflect on MessageQueue
private fields and methods.
For more information, including mitigation strategies, see MessageQueue behavior change guidance.
Статические поля, являющиеся окончательными, теперь не подлежат изменению.
Приложения, работающие на Android 17 или выше и ориентированные на Android 17 (уровень API 37) или выше, не могут изменять static final поля. Если приложение попытается изменить static final поле с помощью рефлексии, это вызовет исключение IllegalAccessException . Попытка изменить одно из этих полей через API JNI (например, SetStaticLongField() ) приведет к сбою приложения.
Доступность
В Android 17 внесены следующие изменения для улучшения доступности.
Поддержка доступности при вводе текста с физической клавиатуры с использованием сложных IME.
Эта функция представляет новые API AccessibilityEvent и TextAttribute для улучшения голосовой обратной связи программ чтения с экрана при вводе текста на языке CJKV. Приложения CJKV IME теперь могут сигнализировать о том, был ли выбран вариант преобразования текста во время ввода текста. Приложения с полями редактирования могут указывать типы изменений текста при отправке событий доступности, связанных с изменением текста. Например, приложения могут указать, что изменение текста произошло во время ввода текста или что изменение текста произошло в результате фиксации изменений. Это позволяет службам доступности, таким как программы чтения с экрана, предоставлять более точную обратную связь в зависимости от характера изменения текста.
внедрение приложений
Приложения IME: При установке текста для ввода в поля редактирования IME могут использовать
TextAttribute.Builder.setTextSuggestionSelected()чтобы указать, был ли выбран конкретный кандидат на конверсию.Приложения с полями редактирования: Приложения, использующие пользовательское
InputConnectionмогут получать данные о выборе вариантов текста, вызываяTextAttribute.isTextSuggestionSelected(). Затем этим приложениям следует вызыватьAccessibilityEvent.setTextChangeTypes()при обработке событийTYPE_VIEW_TEXT_CHANGED. Приложения, ориентированные на Android 17 (уровень API 37) и использующие стандартныйTextView, будут иметь эту функцию включенной по умолчанию. (То есть,TextViewбудет обрабатывать получение данных из IME и устанавливать типы изменения текста при отправке событий в службы специальных возможностей).Службы доступности: Службы доступности, обрабатывающие события
TYPE_VIEW_TEXT_CHANGEDмогут вызывать методAccessibilityEvent.getTextChangeTypes()для определения характера изменения и соответствующей корректировки своих стратегий обратной связи.
Конфиденциальность
В Android 17 внесены следующие изменения для повышения конфиденциальности пользователей.
Включена функция ECH (Encrypted Client Hello).
Android 17 introduces platform support for Encrypted Client Hello (ECH), a TLS extension that enhances user privacy by encrypting the Server Name Indication (SNI) in the TLS handshake. This encryption helps prevent network observers from easily identifying the specific domain your app is connecting to.
For apps targeting Android 17 (API level 37) or higher, ECH is used for TLS connections. ECH is active only if the networking library used by the app (for example, HttpEngine, WebView, or OkHttp) has integrated ECH support and the remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See RFC 9849 for more details on how ECH GREASE works.
To allow apps to customize this behavior, Android 17 adds a new
<domainEncryption> element to the Network Security Configuration file.
Developers can use <domainEncryption> within <base-config> or
<domain-config> tags to select an ECH mode (for example,
"enabled" or "disabled") on a global or per-domain basis.
For more information, see the Encrypted Client Hello documentation.
Для приложений, ориентированных на Android 17, требуется разрешение на доступ к локальной сети.
Android 17 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
Скрытие паролей с физических устройств
Если приложение ориентировано на Android 17 (уровень API 37) или выше, и пользователь использует физическое устройство ввода (например, внешнюю клавиатуру), операционная система Android применяет новый параметр show_passwords_physical ко всем символам в поле ввода пароля. По умолчанию этот параметр скрывает все символы пароля.
Система Android отображает последний введенный символ пароля, чтобы помочь пользователю увидеть, не допустил ли он ошибку при вводе. Однако это гораздо менее необходимо при использовании больших внешних клавиатур. Кроме того, устройства с внешними клавиатурами часто имеют большие дисплеи, что увеличивает риск того, что кто-то увидит введенный пароль.
Если пользователь использует сенсорный экран устройства, система применяет новую настройку show_passwords_touch .
Защита от одноразового пароля (OTP) для стандартных SMS-сообщений
Beginning with Android 17, Android is extending its SMS OTP protection
to apply to standard SMS messages (SMS messages containing an OTP that do not
use the WebOTP or SMS Retriever formats). For most apps targeting
Android 17 (API level 37) or higher, these SMS messages do not become
available until three hours after receipt. This delay is intended to help
prevent OTP hijacking. During this three hour delay, the
SMS_RECEIVED_ACTION broadcast is withheld and
SMS provider database queries are filtered. The SMS message is
available to these apps after the delay.
Certain apps such as the default SMS assistant app, connected device companion apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using SMS Retriever or SMS User Consent APIs to ensure continued functionality.
Безопасность
В Android 17 внесены следующие улучшения в безопасность устройств и приложений.
Безопасность деятельности
In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.
Key impacts for developers include:
- BAL hardening & improved opt-in: We are refining Background Activity
Launch (BAL) restrictions by extending protections to
IntentSender. Developers must migrate away from the legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWEDconstant. Instead, you should adopt granular controls likeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface. - Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.
Включить КТ по умолчанию
Если приложение ориентировано на Android 17 (уровень API 37) или выше, прозрачность сертификатов (CT) включена по умолчанию. (На Android 16 прозрачность сертификатов доступна, но приложениям приходилось включать её вручную .)
Более безопасный коренной DCL—C
Если ваше приложение ориентировано на Android 17 (уровень API 37) или выше, то защита Safer Dynamic Code Loading (DCL), представленная в Android 14 для файлов DEX и JAR, теперь распространяется и на нативные библиотеки.
Все файлы, загружаемые с помощью System.load() должны быть помечены как доступные только для чтения. В противном случае система выдаст UnsatisfiedLinkError .
Мы рекомендуем приложениям по возможности избегать динамической загрузки кода, поскольку это значительно увеличивает риск взлома приложения путем внедрения или изменения кода.
Ограничение доступа к полям, содержащим персональные данные, в представлении данных CP2.
For apps targeting Android 17 (API level Android 17 (API level 37)) and higher, Contacts Provider 2 (CP2) restricts certain columns containing Personally Identifiable Information (PII) from the data view. When this change is enabled, these columns are removed from the data view to enhance user privacy. The restricted columns include:
Apps that are using these columns from ContactsContract.Data
can extract them from ContactsContract.RawContacts
instead, by joining with RAW_CONTACT_ID.
Внедрить строгие проверки SQL в CP2
Для приложений, ориентированных на Android 17 (уровень API Android 17 (уровень API 37)) и выше, Contacts Provider 2 (CP2) обеспечивает строгую проверку SQL-запросов при обращении к таблице ContactsContract.Data без разрешения READ_CONTACTS .
Благодаря этому изменению, если у приложения нет разрешения READ_CONTACTS , при запросе к таблице ContactsContract.Data устанавливаются параметры StrictColumns и StrictGrammar . Если запрос использует шаблон, несовместимый с этими параметрами, он будет отклонен, и будет выброшено исключение.
Интеллект
В Android 17 внесены следующие изменения в систему интеллекта.
Функция setContentCaptureEnabled устарела.
Функция захвата контента включена по умолчанию на некоторых устройствах, чтобы позволить встроенным функциям искусственного интеллекта анализировать содержимое экрана для обеспечения интеллектуального взаимодействия.
Начиная с Android 17, метод API ContentCaptureManager.setContentCaptureEnabled(boolean) устарел. Для приложений, ориентированных на Android 17 (уровень API 37) или выше, вызов setContentCaptureEnabled(false) больше не отключает захват контента.
Если вашему приложению необходимо продолжать отключать захват контента или ограничивать захват содержимого экрана системой, вам следует перейти к использованию параметра макета окна FLAG_SECURE .
Чтобы отключить захват контента, установите флаг FLAG_SECURE для вашего окна, как показано в следующем примере:
Котлин
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
Java
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
Для получения более подробной информации см. справочную документацию по WindowManager.LayoutParams.FLAG_SECURE .
СМИ
В Android 17 внесены следующие изменения в работу с мультимедиа.
Фоновое усиление защиты звука
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:
- The foreground service must have while-in-use (WIU) capabilities.
- The app must have the exact alarm permission and be interacting with
USAGE_ALARMaudio streams.
For more information, including mitigation strategies, see Background audio hardening.
форм-факторы устройств
В Android 17 внесены следующие изменения для улучшения пользовательского опыта на устройствах различных размеров и форм-факторов.
Изменения в API платформы позволяют игнорировать ограничения по ориентации, масштабируемости и соотношению сторон на больших экранах (sw>=600dp).
В Android 16 мы внесли изменения в Platform API, позволяющие игнорировать ограничения по ориентации, соотношению сторон и масштабируемости на больших экранах (sw >= 600dp) для приложений, ориентированных на API уровня 36 или выше. Разработчики могут отказаться от этих изменений в SDK 36, но эта возможность больше не будет доступна для приложений, ориентированных на Android 17 (API уровня 37) или выше.
Для получения дополнительной информации см. раздел «Ограничения на ориентацию и изменение размера игнорируются» .
Подключение
В Android 17 внесены следующие изменения для повышения согласованности и соответствия стандартному поведению Java InputStream для Bluetooth RFCOMM-сокетов.
Последовательное поведение функции чтения BluetoothSocket для RFCOMM
Для приложений, ориентированных на Android 17 (уровень API 37), метод read() объекта InputStream , полученного из BluetoothSocket на основе RFCOMM, теперь возвращает -1 когда сокет закрывается или соединение разрывается.
Это изменение приводит поведение сокета RFCOMM в соответствие с сокетами LE CoC и согласуется со стандартной документацией InputStream.read() , в которой указано, что при достижении конца потока возвращается значение -1 .
Приложения, которые полагаются исключительно на перехват исключения IOException для выхода из цикла чтения, могут быть затронуты этим изменением и должны обновить циклы чтения BluetoothSocket, чтобы явно проверять возвращаемое значение -1 . Это гарантирует корректное завершение цикла при отключении удаленного устройства или закрытии сокета. Пример рекомендуемой реализации см. в фрагменте кода в руководстве по передаче данных Bluetooth .