Изменения поведения: приложения для Android 17 и выше

Как и в предыдущих версиях, Android 17 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются исключительно к приложениям, ориентированным на Android 17 или более поздние версии. Если ваше приложение ориентировано на Android 17 или более поздние версии, вам следует внести в него изменения для поддержки этих изменений, где это применимо.

Обязательно ознакомьтесь также со списком изменений в поведении, которые затрагивают все приложения, работающие на Android 17, независимо от targetSdkVersion вашего приложения.

Основная функциональность

В Android 17 внесены следующие изменения, которые модифицируют или расширяют различные основные возможности системы Android.

Новая реализация MessageQueue без блокировок

Начиная с Android 17, приложения, ориентированные на Android 17 (уровень API 37) или выше, получают новую реализацию android.os.MessageQueue без блокировок. Новая реализация повышает производительность и уменьшает количество пропущенных кадров, но может нарушить работу клиентов, которые используют закрытые поля и методы MessageQueue для рефлексии.

Для получения дополнительной информации, включая стратегии смягчения последствий, см. руководство по изменению поведения в MessageQueue .

Статические поля, являющиеся окончательными, теперь не подлежат изменению.

Приложения, работающие на 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 введено разрешение ACCESS_LOCAL_NETWORK , предназначенное для защиты пользователей от несанкционированного доступа к локальной сети. Поскольку это разрешение входит в существующую группу разрешений NEARBY_DEVICES , пользователям, уже предоставившим другие разрешения NEARBY_DEVICES повторное запрос на предоставление разрешения не требуется. Это новое требование предотвращает использование вредоносными приложениями неограниченного доступа к локальной сети для скрытого отслеживания и идентификации пользователей. Объявив и запросив это разрешение, ваше приложение сможет обнаруживать и подключаться к устройствам в локальной сети (LAN), таким как устройства умного дома или приемники трансляции.

Приложения, ориентированные на Android 17 (уровень API 37) или выше, теперь имеют два способа поддерживать связь с устройствами локальной сети: использовать системные средства выбора устройств, обеспечивающие конфиденциальность и позволяющие пропустить запрос на разрешение, или явно запрашивать это новое разрешение во время выполнения для поддержания связи с локальной сетью.

Для получения более подробной информации см. документацию по правам доступа в локальной сети .

Скрытие паролей с физических устройств

If an app targets Android 17 (API level 37) or higher and the user is using a physical input device (for example, an external keyboard), the Android operating system applies the new show_passwords_physical setting to all characters in the password field. By default, that setting hides all password characters.

The Android system shows the last-typed password character to help the user see if they mistyped the password. However, this is much less necessary with larger external keyboards. In addition, devices with external keyboards often have larger displays, which increases the danger of someone seeing the typed password.

If the user is using the device's touchscreen, the system applies the new show_passwords_touch setting.

Защита от одноразового пароля (OTP) для стандартных SMS-сообщений

Начиная с Android 17, Android расширяет защиту от использования одноразовых паролей (OTP) в SMS-сообщениях, распространяя её на стандартные SMS-сообщения (SMS-сообщения, содержащие OTP, которые не используют форматы WebOTP или SMS Retriever). Для большинства приложений, ориентированных на Android 17 (уровень API 37) или выше, эти SMS-сообщения становятся доступны только через три часа после получения. Эта задержка предназначена для предотвращения перехвата OTP. В течение этих трёх часов широковещательная рассылка SMS_RECEIVED_ACTION приостанавливается, а запросы к базе данных поставщика SMS фильтруются. SMS-сообщение становится доступным для этих приложений после истечения задержки.

Некоторые приложения, такие как стандартное приложение-помощник для SMS, сопутствующие приложения для подключенных устройств и т. д., не подпадают под действие этой задержки. Всем приложениям, которые используют чтение SMS-сообщений для извлечения OTP, следует перейти на использование API SMS Retriever или SMS User Consent для обеспечения непрерывной работы.

Безопасность

В Android 17 внесены следующие улучшения в безопасность устройств и приложений.

Безопасность деятельности

В Android 17 платформа продолжает переход к архитектуре «безопасность по умолчанию», внедряя ряд улучшений, призванных смягчить последствия серьезных атак, таких как фишинг, перехват взаимодействия и атаки с использованием «запутанного заместителя». Это обновление требует от разработчиков явного согласия на использование новых стандартов безопасности для обеспечения совместимости приложений и защиты пользователей.

К основным последствиям для разработчиков относятся:

  • Усиление защиты BAL и улучшенная возможность включения: Мы совершенствуем ограничения на запуск фоновых действий (BAL), распространяя защиту на IntentSender . Разработчикам необходимо отказаться от устаревшей константы MODE_BACKGROUND_ACTIVITY_START_ALLOWED . Вместо этого следует использовать более детальные средства контроля, такие как MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE , которые ограничивают запуск действий сценариями, когда вызывающее приложение видимо, что значительно уменьшает поверхность атаки.
  • Инструменты внедрения: Разработчикам следует использовать строгий режим и обновленные проверки синтаксиса для выявления устаревших шаблонов и обеспечения готовности к будущим требованиям целевого SDK.

Включить КТ по ​​умолчанию

Если приложение ориентировано на Android 17 (уровень API 37) или выше, прозрачность сертификатов (CT) включена по умолчанию. (На Android 16 прозрачность сертификатов доступна, но приложениям приходилось включать её вручную .)

Более безопасный коренной DCL—C

If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.

All native files loaded using System.load() must be marked as read-only. Otherwise, the system throws UnsatisfiedLinkError.

We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.

Ограничение доступа к полям, содержащим персональные данные, в представлении данных CP2.

Для приложений, ориентированных на Android 17 (уровень API Android 17 (уровень API 37)) и выше, Contacts Provider 2 (CP2) ограничивает отображение данных в определенных столбцах, содержащих персональные данные. При включении этой функции данные в этих столбцах удаляются для повышения конфиденциальности пользователей. К ограниченным столбцам относятся:

Приложения, использующие эти столбцы из ContactsContract.Data , могут извлекать их из ContactsContract.RawContacts , объединяя данные с помощью 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 внесены следующие изменения в работу с мультимедиа.

Фоновое усиление защиты звука

Начиная с Android 17, аудиофреймворк вводит ограничения на фоновые взаимодействия со звуком, включая воспроизведение аудио, запросы на фокусировку на аудио и API изменения громкости, чтобы гарантировать, что эти изменения инициируются пользователем осознанно.

Некоторые ограничения на воспроизведение звука распространяются на все приложения. Однако ограничения более строгие, если приложение ориентировано на Android 17 (уровень API 37). Если такое приложение взаимодействует со звуком в фоновом режиме, у него должна быть запущена служба переднего плана. Кроме того, приложение должно соответствовать одному или обоим из следующих требований:

Для получения дополнительной информации, включая стратегии смягчения последствий, см. раздел «Усиление защиты фонового звука» .

форм-факторы устройств

В 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 .