Сегодня вышла третья бета-версия Android 17, а это значит, что платформа достигла стабильности. Это означает, что API заблокирован. Вы можете провести финальное тестирование совместимости и опубликовать приложения, предназначенные для Android 17, в Google Play. Кроме того, в Beta 3 появилось множество новых возможностей, которые помогут вам создавать более качественные, безопасные и интегрированные приложения.
Подготовьте приложения, библиотеки, инструменты и игровые движки.
Если вы разрабатываете SDK, библиотеку, инструмент или игровой движок, вам особенно важно подготовить необходимые обновления сейчас. Это позволит разработчикам приложений и игр, которые используют ваши продукты, избежать проблем с совместимостью и получить доступ к новейшим функциям SDK. Сообщите разработчикам, которые используют ваши SDK, если для полной поддержки Android 17 требуются обновления.
Для тестирования установите рабочую или тестовую версию приложения, в которой используется ваша библиотека или игровой движок, на устройство или эмулятор с Android 17 Beta 3. Сделать это можно через Google Play или другим способом. Проверьте все процессы в приложении и найдите проблемы с функциями или интерфейсом. Изучите изменения в поведении, чтобы сосредоточиться на тестировании. Каждый выпуск Android содержит изменения платформы, которые улучшают конфиденциальность, безопасность и общее удобство использования. Эти изменения могут повлиять на ваши приложения. Вот на что стоит обратить внимание:
- Изменение размера на больших экранах. Если вы выберете Android 17 в качестве целевой версии, то больше не сможете отказаться от ограничений на ориентацию, изменение размера и соотношение сторон на больших экранах.
- Динамическая загрузка кода. Если ваше приложение поддерживает Android 17 или более поздние версии, то защита Safer Dynamic Code Loading (DCL), представленная в Android 14 для файлов DEX и JAR, теперь распространяется и на нативные библиотеки. Все нативные файлы, загруженные с помощью System.load(), должны быть помечены как доступные только для чтения. В противном случае система выдаст ошибку UnsatisfiedLinkError.
- Включить проверку сертификатов по умолчанию. Проверка сертификатов включена по умолчанию. (В Android 16 прозрачность сертификатов доступна, но приложения должны были включить ее.)
- Защита локальной сети. Приложениям, предназначенным для Android 17 или более поздней версии, доступ к локальной сети по умолчанию заблокирован. По возможности перейдите на инструменты выбора, обеспечивающие конфиденциальность, и используйте новое разрешение ACCESS_LOCAL_NETWORK для широкого и постоянного доступа.
Улучшения медиаконтента и камеры
Варианты настройки инструмента выбора фотографий
Теперь вы можете настраивать внешний вид инструмента выбора фотографий, чтобы он лучше сочетался с пользовательским интерфейсом вашего приложения. С помощью нового API PhotoPickerUiCustomizationParams вы можете изменить соотношение сторон в виде сетки со стандартного 1:1 на вертикальное 9:16. Это касается как намерения ACTION_PICK_IMAGES, так и встроенного инструмента выбора фотографий. Благодаря этому вы можете поддерживать единый стиль при взаимодействии пользователей с медиаконтентом.
Это поможет нам сделать окно выбора фотографий 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 с низким энергопотреблением (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
)новости о защите конфиденциальности;
Кнопка геолокации, предоставляемая системой
В 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 )
Скрытые ярлыки приложений на главном экране
В 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) {}
}
)Обновленная панель инструментов для записи видео с экрана
Основные функции
Настройки исключений для VPN-приложений
С помощью нового намерения 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.
-
Новости о продуктахСегодня мы выпускаем Android 17. Эта версия ОС будет доступна на большинстве поддерживаемых устройств Pixel. В ближайшие месяцы появятся новые устройства с Android 17.
Matthew McCullough • Время на чтение: 13 минут -
Новости о продуктахСегодня на Саммите для разработчиков Android мы объявляем о широкой доступности многих инструментов и API, которые помогут вам преодолевать повседневные трудности и дадут больше гибкости при создании отличных приложений для Android.
Matthew McCullough • Время на чтение: 4 минуты -
Новости о продуктахСегодня мы выпускаем первый набор долгосрочных задач (LHT) – задач высокой сложности, на выполнение которых у инженера уходит несколько дней или даже неделя. Мы также внедряем оценку агентов, начиная с агентов от соответствующих поставщиков моделей.
Matthew McCullough • Время на чтение: 3 минуты
Получайте еженедельную рассылку с последними новостями о разработке для Android.