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

Третья бета-версия Android 17

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

Сегодня Android 17 официально достиг стабильности платформы с выходом бета-версии 3. Это означает, что API-интерфейс заблокирован; вы можете проводить финальное тестирование совместимости и размещать свои приложения, ориентированные на Android 17, в Play Store. Кроме того, бета-версия 3 предоставляет множество новых возможностей, которые помогут вам создавать более качественные, безопасные и высокоинтегрированные приложения.

Подготовьте свои приложения, библиотеки, инструменты и игровые движки!

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

large_Android17Timeline01.png

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

  • Изменение размера на больших экранах: начиная с Android 17, вы больше не сможете отказаться от сохранения ограничений по ориентации, изменению размера и соотношению сторон на больших экранах .
  • Динамическая загрузка кода: если ваше приложение ориентировано на Android 17 или выше, защита Safer Dynamic Code Loading (DCL), представленная в Android 14 для файлов DEX и JAR, теперь распространяется и на нативные библиотеки. Все нативные файлы, загружаемые с помощью System.load(), должны быть помечены как доступные только для чтения. В противном случае система выдаст ошибку UnsatisfiedLinkError.
  • Включить прозрачность сертификатов (CT) по умолчанию : прозрачность сертификатов (CT) включена по умолчанию. (В Android 16 прозрачность сертификатов доступна, но приложениям требовалось включить её отдельно.)
  • Защита локальной сети : В приложениях для Android 17 и выше доступ к локальной сети по умолчанию заблокирован. По возможности переключитесь на использование средств выбора, обеспечивающих конфиденциальность, и используйте новый параметр ACCESS_LOCAL_NETWORK для широкого и постоянного доступа.

Улучшения мультимедиа и камеры

Параметры настройки выбора фотографий

Теперь Android позволяет настраивать визуальное представление средства выбора фотографий, чтобы оно лучше дополняло пользовательский интерфейс вашего приложения. Используя новый API PhotoPickerUiCustomizationParams , вы можете изменить соотношение сторон сетки с стандартного квадрата 1:1 на портретное отображение 9:16. Эта гибкость распространяется как на интент ACTION_PICK_IMAGES, так и на встроенное средство выбора фотографий, позволяя поддерживать целостную эстетику при взаимодействии пользователей с медиаконтентом.

large_(Default)11aspectratio.png

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

val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

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

Расширения камеры, определяемые производителем: Android 17 добавляет расширения, определяемые производителем, позволяющие партнерам по производству оборудования определять и реализовывать пользовательские режимы расширения камеры, предоставляя вам доступ к лучшим и новейшим функциям камеры, таким как «Суперразрешение» или передовые улучшения на основе искусственного интеллекта. Вы можете запросить эти режимы с помощью API isExtensionSupported(int).

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

Поддержка слуховых аппаратов с Bluetooth LE Audio

В Android теперь есть специальная категория устройств для слуховых аппаратов с поддержкой Bluetooth Low Energy (BLE). Благодаря добавлению константы AudioDeviceInfo.TYPE_BLE_HEARING_AID , ваше приложение теперь может отличать слуховые аппараты от обычных гарнитур.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

Детальная маршрутизация звука для слуховых аппаратов

Android 17 позволяет пользователям самостоятельно управлять воспроизведением определенных системных звуков. Они могут выбрать, куда будут направляться уведомления, мелодии звонка и сигналы будильника: на подключенные слуховые аппараты или на встроенный динамик устройства.

Расширенный программный кодировщик HE-AAC

В Android 17 представлен программный кодировщик Extended HE-AAC, предоставляемый системой. Этот кодировщик поддерживает как низкие, так и высокие битрейты, используя унифицированное кодирование речи и звука. Доступ к этому кодировщику можно получить через API MediaCodec , используя имя c2.android.xheaac.encoder или запросив MIME-тип audio/mp4a-latm .

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

Улучшения производительности и работы от батареи

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

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

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

Обновления политики конфиденциальности

Кнопка определения местоположения, предоставляемая системой

localcafe.jpg

В Android появилась кнопка определения местоположения, отображаемая системой, которую можно будет встроить непосредственно в макет приложения с помощью библиотеки Android Jetpack. Когда пользователь нажимает на эту кнопку, вашему приложению предоставляется доступ к точному местоположению только на текущий период. Для реализации этого необходимо объявить разрешение USE_LOCATION_BUTTON.

Настройка параметров видимости паролей для сенсорной и физической клавиатур.

Эта функция разделяет существующую системную настройку «Показывать пароли» на две отдельные пользовательские опции: одну для ввода с помощью сенсорного экрана, а другую для ввода с физической (аппаратной) клавиатуры. Символы, введенные с помощью физической клавиатуры, теперь по умолчанию сразу же скрываются.

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

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

Принудительная динамическая загрузка кода только для чтения.

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

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

Подписание APK-файлов с использованием гибридной постквантовой криптографии (PQC)

В рамках подготовки к будущим достижениям в области квантовых вычислений Android внедряет поддержку постквантовой криптографии (PQC) с помощью новой схемы подписи APK версии 3.2. Эта схема использует гибридный подход, сочетающий классическую подпись с подписью ML-DSA.

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

Улучшена поддержка виджетов на внешних дисплеях.

Эта функция повышает визуальную согласованность виджетов приложения при их отображении на подключенных или внешних дисплеях с различной плотностью пикселей, использующих блоки DP или SP.

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

Скрытые подписи приложений на главном экране

Hiddenapplabelsonthehomescreen.png

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

Интерактивная картинка в картинке для рабочего стола

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

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

Переработана панель инструментов для записи экрана.

large_Recording-redesign.png

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

Настройки исключения VPN-приложений

Используя новый Intent ACTION_VPN_APP_EXCLUSION_SETTINGS, ваше приложение может запускать управляемый системой экран настроек, где пользователи могут выбирать приложения для обхода VPN-туннеля.

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

Обновления API OpenJDK 25 и 21

Это обновление включает в себя множество новых функций и улучшений из OpenJDK 21 и OpenJDK 25, в том числе новейшую поддержку Unicode и улучшенную поддержку SSL для именованных групп в TLS.

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

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

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

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

Автор:

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