Платформа Android 17 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются ко всем приложениям, работающим на Android 17, независимо от targetSdkVersion . Вам следует протестировать свое приложение, а затем внести в него необходимые изменения для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений в поведении, которые затрагивают только приложения, ориентированные на Android 17 .
Безопасность
В Android 17 включены следующие улучшения безопасности устройств и приложений.
используется план амортизации ClearTraffic
В одном из будущих релизов мы планируем отказаться от элемента usesCleartextTraffic . Приложениям, которым необходимо устанавливать незашифрованные (HTTP) соединения, следует перейти на использование файла конфигурации сетевой безопасности , который позволяет указывать, к каким доменам ваше приложение должно устанавливать соединения в открытом виде.
Обратите внимание, что файлы конфигурации сетевой безопасности поддерживаются только для уровней API 24 и выше. Если минимальное значение API вашего приложения ниже 24, вам следует выполнить оба следующих действия:
- Установите атрибут
usesCleartextTrafficвtrue - Используйте файл конфигурации сети.
Если минимальный уровень API вашего приложения равен 24 или выше, вы можете использовать файл сетевой конфигурации, и вам не нужно устанавливать параметр usesCleartextTraffic .
Ограничить неявные URI-гранты
В настоящее время, если приложение запускает интент с URI, содержащим действие Send , SendMultiple или ImageCapture , система автоматически предоставляет целевому приложению права на чтение и запись по этому URI. Мы планируем изменить это поведение в Android 18. Поэтому мы рекомендуем приложениям явно предоставлять соответствующие разрешения по URI, а не полагаться на автоматическое предоставление этих прав системой.
Ограничения на хранилище ключей для каждого приложения
Приложениям следует избегать создания чрезмерного количества ключей в Android Keystore, поскольку это общий ресурс для всех приложений на устройстве. Начиная с Android 17, система устанавливает ограничение на количество ключей, которыми может владеть приложение. Лимит составляет 50 000 ключей для приложений, не являющихся системными и ориентированных на Android 17 или выше, и 200 000 ключей для всех остальных приложений. Для системных приложений установлен лимит в 200 000 ключей, независимо от уровня API, на который они ориентированы.
Если приложение попытается создать ключи сверх установленного лимита, создание завершится ошибкой KeyStoreException . В сообщении об исключении содержится информация о лимите ключей. Если приложение вызывает getNumericErrorCode() для обработки исключения, возвращаемое значение зависит от того, какой уровень API использует приложение.
- Приложения, ориентированные на Android 17 и выше:
getNumericErrorCode()возвращает новое значениеERROR_TOO_MANY_KEYS. - Для всех остальных приложений:
getNumericErrorCode()возвращаетERROR_INCORRECT_USAGE.
Пользовательский опыт и пользовательский интерфейс системы
В Android 17 внесены следующие изменения, призванные обеспечить более согласованный и интуитивно понятный пользовательский интерфейс.
Восстановление видимости IME по умолчанию после поворота экрана.
Начиная с Android 17, при изменении конфигурации устройства (например, при повороте экрана), если это не обрабатывается самим приложением, предыдущая видимость IME не восстанавливается.
Если в вашем приложении происходит изменение конфигурации, которое оно не обрабатывает, и приложению необходимо, чтобы клавиатура оставалась видимой после этого изменения, вы должны явно запросить это. Вы можете сделать этот запрос одним из следующих способов:
- Установите атрибут
android:windowSoftInputModeв значениеstateAlwaysVisible. - Запросите экранную клавиатуру программным способом в методе
onCreate()вашего Activity или добавьте методonConfigurationChanged().
Вклад человека
В Android 17 внесены следующие изменения, влияющие на взаимодействие приложений с устройствами ввода, такими как клавиатуры и сенсорные панели.
Сенсорные панели по умолчанию передают относительные события во время захвата указателя.
Начиная с Android 17, если приложение запрашивает захват указателя с помощью View.requestPointerCapture() и пользователь использует тачпад, система распознает движение указателя и жесты прокрутки от касаний пользователя и сообщает о них приложению так же, как и о движениях указателя и колесика прокрутки от захваченной мыши. В большинстве случаев это избавляет приложения, поддерживающие захваченную мышь, от необходимости добавлять специальную логику обработки для тачпадов. Для получения более подробной информации см. документацию по View.POINTER_CAPTURE_MODE_RELATIVE .
Ранее система не пыталась распознавать жесты с тачпада, а вместо этого передавала приложению необработанные абсолютные координаты пальцев в формате, аналогичном касаниям сенсорного экрана. Если приложению по-прежнему требуются эти абсолютные данные, оно должно вызывать новый метод View.requestPointerCapture(int) с View.POINTER_CAPTURE_MODE_ABSOLUTE .
СМИ
В Android 17 внесены следующие изменения в работу с мультимедиа.
Фоновое усиление защиты звука
Начиная с Android 17, аудиофреймворк вводит ограничения на фоновые взаимодействия со звуком, включая воспроизведение аудио, запросы на фокусировку на аудио и API изменения громкости, чтобы гарантировать, что эти изменения инициируются пользователем осознанно.
Если приложение пытается вызвать API для работы со звуком, находясь вне допустимого жизненного цикла, API воспроизведения звука и изменения громкости завершаются с ошибкой без генерации исключения или предоставления сообщения об ошибке. API фокусировки звука завершается с кодом ошибки AUDIOFOCUS_REQUEST_FAILED .
Для получения дополнительной информации, включая стратегии смягчения последствий, см. раздел «Усиление защиты фонового звука» .