Новости о продуктах

Вторая бета-версия Android 17

Чтение займет 6 минут.
Matthew McCullough
Вице-президент по управлению продуктами, разработчик Android.

Сегодня мы выпускаем вторую бета-версию Android 17 , продолжая нашу работу по созданию платформы, в которой приоритет отдается конфиденциальности, безопасности и улучшенной производительности. Это обновление предоставляет ряд новых возможностей, включая API EyeDropper и средство выбора контактов с сохранением конфиденциальности. Мы также добавляем расширенные возможности определения расстояния, API для передачи данных между устройствами и многое другое.

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

Пользовательский опыт и системный интерфейс

Пузыри

«Пузыри» — это функция оконного режима, предлагающая новый плавающий интерфейс, независимый от API «пузырей» в мессенджерах . Пользователи могут создать «пузырь» приложения на своем телефоне, складном устройстве или планшете, удерживая значок приложения на панели запуска. На больших экранах в панели задач есть панель «пузырей», где пользователи могут организовывать, перемещать и передвигать «пузыри» между закрепленными точками на экране.

Bubbles.gif

Чтобы ваши приложения корректно работали в режиме "пузырьков", следует следовать рекомендациям по поддержке многооконного режима .

Функция «пузырьков» пока не полностью активирована во второй бета-версии. Ожидайте её появления в одной из будущих сборок Android 17.

API EyeDropper

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

Eyedropper_Tester.webp
val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
  result -> if (result.resultCode == Activity.RESULT_OK) {
    val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK)
    // Use the picked color in your app
  }
}

fun launchColorPicker() {
  val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
  eyeDropperLauncher.launch(intent)
}

Выбор контактов

Новый системный инструмент выбора контактов, доступный через ACTION_PICK_CONTACTS, предоставляет временный, основанный на сессии, доступ на чтение только к конкретным полям данных, запрошенным пользователем, что снижает необходимость в широких разрешениях READ_CONTACTS . Он также позволяет выбирать контакты из личного или рабочего профиля устройства.

android-17-contact-picker.gif
val contactPicker = rememberLauncherForActivityResult(StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val uri = it.data?.data ?: return@rememberLauncherForActivityResult
        // Handle result logic
        processContactPickerResults(uri)
    }
}

val dataFields = arrayListOf(Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE)
val intent = Intent(ACTION_PICK_CONTACTS).apply {
    putStringArrayListExtra(EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS, dataFields)
    putExtra(EXTRA_ALLOW_MULTIPLE, true)
    putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
}

contactPicker.launch(intent)

Упрощена совместимость захвата указателя с сенсорными панелями.

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

// To request the new default relative mode (mouse-like events)
// This is the same as requesting with View.POINTER_CAPTURE_MODE_RELATIVE
view.requestPointerCapture()

// To request the legacy absolute mode (raw touch coordinates)
view.requestPointerCapture(View.POINTER_CAPTURE_MODE_ABSOLUTE)

Интерактивный выбор границ покоя

Вызов метода getInitialRestingBounds для объекта ChooserSession в Android позволяет вашему приложению определить целевую позицию элемента Chooser после завершения анимации и загрузки данных, что обеспечивает более эффективную настройку пользовательского интерфейса.

Возможности подключения и совместимость с различными устройствами

Передача управления приложениями между устройствами

Новый API Handoff позволяет указать состояние приложения для продолжения работы на другом устройстве, например, на планшете Android. При включении этой функции система синхронизирует состояние через CompanionDeviceManager и отображает предложение по переключению в меню запуска ближайших устройств пользователя. Эта функция призвана обеспечить бесперебойную работу, позволяя пользователям продолжить работу с того места, где они остановились, в рамках всей экосистемы Android. Важно отметить, что Handoff поддерживает как переходы между нативными приложениями, так и резервный переход из приложения в веб-приложение, обеспечивая максимальную гибкость и гарантируя полноценную работу, даже если на принимающем устройстве не установлено нативное приложение.

Расширенные API для определения расстояния

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

  1. UWB DL-TDOA позволяет приложениям использовать UWB для навигации внутри помещений. Этот API-интерфейс соответствует спецификации FIRA (Fine Ranging Consortium) 4.0 DL-TDOA и обеспечивает навигацию внутри помещений с сохранением конфиденциальности (предотвращая отслеживание устройства с помощью точки привязки).
  2. Технология обнаружения приближения позволяет приложениям использовать новую спецификацию определения расстояния, внедряемую WFA (WiFi Alliance). Эта технология обеспечивает повышенную надежность и точность по сравнению с существующей спецификацией определения расстояния на основе Wi-Fi Aware.

Улучшения тарифных планов

Для оптимизации качества мультимедиа ваше приложение теперь может получать информацию о максимальной скорости передачи данных, выделяемой оператором связи для потоковых приложений, используя функции getStreamingAppMaxDownlinkKbps и getStreamingAppMaxUplinkKbps .

Основные функции, конфиденциальность и производительность

Доступ к локальной сети

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

трансляция изменения смещения часового пояса

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

Управление и приоритизация НПУ

Приложениям, ориентированным на Android 17 и требующим прямого доступа к NPU, необходимо указать параметр FEATURE_NEURAL_PROCESSING_UNIT в своем манифесте, чтобы избежать блокировки доступа к NPU. Это относится к приложениям, использующим делегат NPU LiteRT , SDK от конкретных производителей, а также устаревший NNAPI .

Поддержка ICU 78 и Unicode 17

Основные библиотеки интернационализации обновлены до версии ICU 78 , что расширяет поддержку новых шрифтов, символов и блоков эмодзи, а также позволяет напрямую форматировать объекты времени .

Защита от SMS-уведомлений с одноразовым паролем (OTP)

Android расширяет защиту от SMS-подтверждений с одноразовым паролем (OTP), автоматически задерживая доступ к SMS-сообщениям с OTP. Ранее защита в основном была сосредоточена на формате SMS Retriever, где доставка сообщений, содержащих хэш SMS Retriever, задерживалась для большинства приложений на три часа. Однако для некоторых приложений, таких как стандартное приложение для SMS и т. д., а также для приложения, соответствующего хэшу, эта задержка не распространяется. Это обновление распространяет защиту на все SMS-сообщения с OTP. Для большинства приложений SMS-сообщения, содержащие OTP, будут доступны только после задержки в три часа, чтобы предотвратить перехват OTP. Широковещательная рассылка SMS_RECEIVED_ACTION будет приостановлена, а запросы к базе данных поставщика SMS будут отфильтрованы. SMS-сообщение станет доступно этим приложениям после задержки.

Задержка доступа к SMS-сообщениям в формате WebOTP

Если приложение имеет разрешение на чтение SMS-сообщений, но не является предполагаемым получателем OTP (как это определяется проверкой домена), SMS-сообщение в формате WebOTP будет доступно только по истечении трех часов. Это изменение призвано повысить безопасность пользователей, гарантируя, что только приложения, связанные с доменом, указанным в сообщении, могут программно считывать код подтверждения. Это изменение применяется ко всем приложениям независимо от их целевого уровня API.

Задержка доступа к стандартным SMS-сообщениям с одноразовым паролем (OTP)

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

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

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

Расписание Android 17

Мы быстро перейдем от бета-версии к этапу обеспечения стабильности платформы, запланированному на март. На этом этапе мы предоставим окончательные API для SDK/NDK. С этого момента ваше приложение сможет использовать SDK 37 и публиковать его в Google Play, что поможет вам завершить тестирование и собрать отзывы пользователей за несколько месяцев до выхода Android 17 в общий доступ.

Android Release Timeline.png

Год релизов

Мы планируем продолжить выпуск обновлений для Android 17 в рамках серии ежеквартальных релизов. Предстоящий релиз во втором квартале — единственный, в котором мы внедрим запланированные изменения в поведение приложения, нарушающие его работоспособность. В четвертом квартале мы планируем выпустить небольшой релиз SDK с дополнительными API и функциями.

Android Release Timeline_2.png

Начните работу с Android 17

Вы можете зарегистрировать любое поддерживаемое устройство Pixel , чтобы получать это и будущие обновления бета-версии Android по беспроводной сети. Если у вас нет устройства Pixel, вы можете использовать 64-битные образы системы с эмулятором Android в Android Studio.

Если вы в настоящее время участвуете в программе бета-тестирования Android, вам будет предложено обновление до бета-версии 2 по беспроводной сети.

Если у вас установлена ​​бета-версия Android 26Q1 и вы хотите получить финальную стабильную версию 26Q1 и выйти из бета-тестирования, вам необходимо проигнорировать обновление по воздуху до бета-версии 26Q2 Beta 2 и дождаться выхода 26Q1.

Нам очень важна ваша обратная связь, поэтому, пожалуйста, сообщайте о проблемах и отправляйте запросы на добавление новых функций на странице обратной связи . Чем раньше мы получим ваши отзывы, тем больше мы сможем учесть в финальной версии.

Для наилучшего опыта разработки под Android 17 мы рекомендуем использовать последнюю предварительную версию Android Studio (Panda) . После настройки выполните следующие действия:

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

Мы будем регулярно обновлять предварительные/бета-версии образов системы и SDK на протяжении всего цикла выпуска Android 17. После установки бета-версии вы будете автоматически получать будущие обновления.

Все последующие предварительные версии и бета-версии будут доступны по беспроводной сети.

Для получения полной информации посетите сайт разработчиков Android 17 .

Присоединяйтесь к обсуждению

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

    Автор:

    Продолжить чтение