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

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

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

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

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

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

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

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

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

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

  • Службы доступности: Службы доступности, обрабатывающие события TYPE_VIEW_TEXT_CHANGED могут вызывать метод AccessibilityEvent.getTextChangeTypes() для определения характера изменения и соответствующей корректировки своих стратегий обратной связи.

Конфиденциальность

В Android 17 внесены следующие изменения для повышения конфиденциальности пользователей.

Для приложений, ориентированных на Android 17, требуется разрешение на доступ к локальной сети.

Доступно для тестирования? (Требуется сборка) Да (Android 17 или более поздняя версия)
Требуется ли изменение targetSDKVersion ? (На уровне API) Да (уровень API "CINNAMON_BUN" )
Дополнительную информацию об этом значении см. в документации по атрибуту manifest .

В Android 17 введено разрешение ACCESS_LOCAL_NETWORK , предназначенное для защиты пользователей от несанкционированного доступа к локальной сети. Поскольку это разрешение входит в существующую группу разрешений NEARBY_DEVICES , пользователям, уже предоставившим другие разрешения NEARBY_DEVICES повторное запрос на предоставление разрешения не требуется. Это новое требование предотвращает использование вредоносными приложениями неограниченного доступа к локальной сети для скрытого отслеживания и идентификации пользователей. Объявив и запросив это разрешение, ваше приложение сможет обнаруживать и подключаться к устройствам в локальной сети (LAN), таким как устройства умного дома или приемники трансляции.

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

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

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

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

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

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

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

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

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

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

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

Если ваше приложение ориентировано на Android 17 или выше, то защита Safer Dynamic Code Loading (DCL), представленная в Android 14 для файлов DEX и JAR, теперь распространяется и на нативные библиотеки.

Все файлы, загружаемые с помощью System.load() должны быть помечены как доступные только для чтения. В противном случае система выдаст UnsatisfiedLinkError .

Мы рекомендуем приложениям по возможности избегать динамической загрузки кода, поскольку это значительно увеличивает риск взлома приложения путем внедрения или изменения кода.

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

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

Изменения в API платформы позволяют игнорировать ограничения по ориентации, масштабируемости и соотношению сторон на больших экранах (sw>=600dp).

В Android 16 мы внесли изменения в Platform API, позволяющие игнорировать ограничения по ориентации, соотношению сторон и масштабируемости на больших экранах (sw >= 600dp) для приложений, ориентированных на API уровня 36 или выше. Разработчики могут отказаться от этих изменений в SDK 36, но эта возможность больше не будет доступна для приложений, ориентированных на Android 17 или выше.

Для получения дополнительной информации см. раздел «Ограничения на ориентацию и изменение размера игнорируются» .