Android 10 предлагает пользователям и разработчикам множество отличных функций и возможностей. В этом документе подробно описывается, что доступно разработчикам.
Чтобы узнать больше об API, ознакомьтесь с отчётом о различиях в API или посетите справочник по API Android — ищите API, «добавленные в API уровня 29». Также обязательно ознакомьтесь с изменениями в поведении Android 10 (для приложений, ориентированных на API уровня 29, и для всех приложений ), а также с изменениями в политике конфиденциальности , чтобы узнать, в каких областях изменения платформы могут повлиять на ваши приложения.
Улучшения безопасности
В Android 10 представлен ряд функций безопасности, которые кратко описаны в следующих разделах.
Улучшенные диалоги биометрической аутентификации
В Android 10 реализованы следующие улучшения поддержки биометрической аутентификации :
- Проверка возможности биометрической аутентификации.
- Резервный механизм, позволяющий пользователю пройти аутентификацию с помощью PIN-кода, графического ключа или пароля своего устройства, если он не может пройти аутентификацию с помощью биометрических данных.
- Подсказка, сообщающая системе, что не нужно требовать подтверждения пользователя после аутентификации с использованием неявной биометрической модальности. Например, можно указать системе, что после аутентификации с использованием распознавания лица дальнейшее подтверждение не требуется.
Запустить встроенный код DEX непосредственно из APK
Начиная с Android 10, вы можете указать платформе запускать встроенный DEX-код непосредственно из APK-файла вашего приложения. Эта возможность поможет предотвратить атаку, если злоумышленнику удастся вмешаться в локально скомпилированный код на устройстве.
Для получения дополнительной информации см. раздел Запуск встроенного кода DEX непосредственно из APK .
Поддержка TLS 1.3
В Android 10 добавлена поддержка TLS 1.3 . TLS 1.3 — это серьёзное обновление стандарта TLS, которое обеспечивает повышение производительности и безопасности. Наши тесты показывают, что безопасные соединения с TLS 1.3 устанавливаются на 40% быстрее по сравнению с TLS 1.2.
Более подробную информацию о нашей реализации TLS 1.3 см. в разделе TLS на странице изменений поведения для всех приложений .
Публичный API Conscrypt
Начиная с Android 10, поставщик безопасности Conscrypt включает в себя общедоступный API для функциональности TLS.
Коллекция классов в android.net.ssl
содержит статические методы для доступа к функциональности, недоступной в универсальных API javax.net.ssl
. Имена этих классов могут быть получены путем образования множественного числа от соответствующего класса javax.net.ssl
. Например, код, работающий с экземплярами javax.net.ssl.SSLSocket
, может вместо этого использовать методы из SSLSockets
.
Возможности подключения
Android 10 включает в себя ряд улучшений, связанных с сетевыми возможностями и подключением.
API подключения к сети Wi-Fi
В Android 10 добавлена поддержка одноранговых подключений. Эта функция позволяет приложению предлагать пользователю изменить точку доступа, к которой подключено устройство, используя WifiNetworkSpecifier
для описания свойств запрашиваемой сети. Одноранговое подключение используется для целей, не связанных с предоставлением сетевых ресурсов, например, для начальной настройки дополнительных устройств, таких как Chromecast и Google Home.
Дополнительную информацию см. в разделе API запроса сети Wi-Fi для однорангового подключения .
API предложения сетей Wi-Fi
В Android 10 добавлена поддержка вашего приложения, предлагающего пользователю подключиться к точке доступа Wi-Fi. Вы можете предлагать варианты подключения к сети. Платформа самостоятельно выберет подходящую точку доступа, основываясь на данных, полученных от вашего приложения и других приложений.
Дополнительную информацию об этой функции см. в разделе Рекомендации Wi-Fi .
Улучшения в режимах высокой производительности и малой задержки Wi-Fi
Android 10 позволяет давать подсказку базовому модему, чтобы минимизировать задержку.
В Android 10 API блокировки Wi-Fi расширен для эффективной поддержки режимов высокой производительности и низкой задержки. Энергосбережение Wi-Fi отключено в режимах высокой производительности и низкой задержки, а в режиме низкой задержки может быть включена дополнительная оптимизация задержки в зависимости от поддержки модема.
Режим низкой задержки активируется только тогда, когда приложение, получающее блокировку, работает в фоновом режиме, а экран включён. Режим низкой задержки особенно полезен для мобильных игр в реальном времени.
Специализированные поиски в DNS-резолвере
В Android 10 добавлена встроенная поддержка специализированных DNS-запросов, использующих как открытый текст, так и режим DNS-over-TLS. Ранее DNS-резолвер платформы поддерживал только записи A и AAAA, которые позволяют искать только IP-адреса, связанные с именем, но не поддерживал другие типы записей. API DnsResolver
обеспечивает универсальное асинхронное разрешение, позволяя искать записи SRV
, NAPTR
и других типов. Обратите внимание, что анализ ответа выполняется приложением.
Информацию о приложениях на базе NDK см. в разделе android_res_nsend
.
Простое подключение к Wi-Fi
Android 10 позволяет использовать Easy Connect для предоставления учётных данных Wi-Fi удалённому устройству в качестве замены устаревшему WPS. Приложения могут интегрировать Easy Connect в процесс настройки и подготовки, используя намерение ACTION_PROCESS_WIFI_EASY_CONNECT_URI
.
Дополнительную информацию об этой функции см. в разделе Wi-Fi Easy Connect .
API-интерфейс Wi-Fi Direct
Классы API WifiP2pConfig
и WifiP2pManager
обновлены в Android 10 для поддержки быстрого подключения к Wi-Fi Direct с использованием предопределенной информации. Эта информация передается по сторонним каналам, таким как Bluetooth или NFC.
В следующем примере кода показано, как создать группу, используя заранее определенную информацию:
Котлин
val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) // prefer 5G band for this group val config = WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build() // create a non-persistent group on 5GHz manager.createGroup(channel, config, null)
Ява
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = manager.initialize(this, getMainLooper(), null); // prefer 5G band for this group WifiP2pConfig config = new WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build(); // create a non-persistent group on 5GHz manager.createGroup(channel, config, null);
Чтобы присоединиться к группе, используя учетные данные, замените manager.createGroup()
следующим:
Котлин
manager.connect(channel, config, null)
Ява
manager.connect(channel, config, null);
Каналы Bluetooth LE с ориентированным соединением (CoC)
Android 10 позволяет вашему приложению использовать соединения BLE CoC для передачи больших потоков данных между двумя устройствами BLE. Этот интерфейс абстрагирует Bluetooth и механизмы подключения, упрощая реализацию.
Функции телефонии
Android 10 включает в себя ряд улучшений, связанных с телефонией.
Улучшение качества звонков
В Android 10 добавлена возможность сбора информации о качестве текущих вызовов IP Multimedia Subsystem (IMS), включая качество входящей и исходящей связи с сетью, на устройствах, поддерживающих эту функцию.
Фильтрация вызовов и идентификация вызывающего абонента
Android 10 предоставляет вашему приложению возможность определять вызовы, не указанные в адресной книге пользователя, как потенциальные спам-вызовы и автоматически отклонять их от имени пользователя. Информация о заблокированных вызовах регистрируется в журнале вызовов, чтобы обеспечить пользователю большую прозрачность при пропуске вызовов. Использование этого API устраняет необходимость получения разрешений READ_CALL_LOG
от пользователя для фильтрации вызовов и определения номера вызывающего абонента.
API службы перенаправления вызовов
В Android 10 изменяется способ обработки намерений вызовов. Трансляция NEW_OUTGOING_CALL
устарела и заменена API CallRedirectionService
. API CallRedirectionService
предоставляет интерфейсы для изменения исходящих вызовов, совершаемых платформой Android. Например, сторонние приложения могут отменять вызовы и перенаправлять их через VoIP.
Улучшения в создании файлов на внешнем хранилище
Помимо введения хранилища с ограниченным доступом , Android 10 добавляет следующие возможности, связанные с внешним хранилищем:
- Вы можете использовать флаг
IS_PENDING
, чтобы предоставить вашему приложению эксклюзивный доступ к медиафайлу при его записи на диск. - Если вам известно конкретное место, где следует хранить файлы, вы можете дать системе подсказку , где сохранять вновь записанные файлы.
- Каждое внешнее устройство хранения данных имеет уникальное имя тома .
Медиа и графика
В Android 10 представлены следующие новые функции мультимедиа и графики, а также API:
Совместное использование аудиовхода
В Android 10 появилась возможность одновременного использования аудиовхода двумя приложениями. Подробнее см. в разделе «Совместное использование аудиовхода» .
Захват воспроизведения звука
Android 10 позволяет приложению захватывать аудио из других приложений. Полную информацию см. в разделе «Захват воспроизведения» .
Панель поиска в уведомлениях MediaStyle
Начиная с Android 10, уведомления MediaStyle
отображают полосу прокрутки. Она отображает ход воспроизведения, отслеживаемый методом PlaybackState.getPosition()
, и в некоторых случаях может использоваться для перехода к нужному месту в воспроизводимой программе. Внешний вид и поведение полосы прокрутки определяются следующими правилами:
- Полоса прокрутки появляется, если есть активный
MediaSession
и его длительность (задаётсяMediaMetadata.METADATA_KEY_DURATION
) больше нуля. Это означает, что полоса прокрутки не отображается для потоков с неопределённым временем, таких как прямые трансляции и радиотрансляции. - Если сеанс реализует
ACTION_SEEK_TO
, пользователь может перетаскивать полосу поиска, чтобы управлять местом воспроизведения.
Собственный MIDI API
Android Native MIDI API (AMidi) предоставляет разработчикам приложений возможность отправлять и получать MIDI-данные с помощью кода C/C++, обеспечивая более тесную интеграцию с их аудио/управляющей логикой C/C++ и сводя к минимуму потребность в JNI.
Для получения дополнительной информации см. Android Native MIDI API .
Улучшения MediaCodecInfo
В Android 10 добавлены методы в MediaCodecInfo
, которые раскрывают дополнительную информацию о кодеке.
Более подробную информацию см. в разделе Медиакодеки .
Термальный API
Перегрев устройств может приводить к снижению производительности центрального и/или графического процессора, что может самым неожиданным образом повлиять на приложения и игры. Приложения, использующие сложную графику, ресурсоёмкие вычисления или длительную сетевую активность, подвержены проблемам с большей вероятностью, и эти проблемы могут различаться в зависимости от устройства, в зависимости от частоты чипсета и ядра, уровня интеграции, а также комплектации и форм-фактора устройства.
В Android 10 приложения и игры могут использовать API для отслеживания изменений на устройстве и принятия мер по поддержанию низкого энергопотребления для восстановления нормальной температуры. Приложения регистрируют прослушиватель в PowerManager , через который система сообщает о текущем состоянии температуры: от лёгкого и умеренного до тяжёлого, критического, аварийного и выключения.
Когда устройство сообщает о тепловом стрессе, приложения и игры могут помочь, замедляя текущие процессы для снижения энергопотребления различными способами. Например, приложения для потоковой передачи могут снизить разрешение/битрейт или сетевой трафик, приложение камеры может отключить вспышку или интенсивное улучшение изображения, игра может снизить частоту кадров или тесселяцию полигонов, медиаприложение может уменьшить громкость динамика, а приложение карт может отключить GPS.
Для работы теплового API требуется новый уровень HAL устройства. В настоящее время он поддерживается на устройствах Pixel под управлением Android 10, и мы работаем с нашими партнерами-производителями устройств, чтобы как можно скорее обеспечить широкую поддержку экосистемы.
Камера и изображения
В Android 10 представлены следующие новые функции, связанные с камерой и изображениями:
Поддержка монохромной камеры
В Android 9 (уровень API 28) впервые появилась возможность использования монохромной камеры. В Android 10 добавлено несколько улучшений поддержки монохромной камеры:
- Поддержка потокового формата Y8 для повышения эффективности использования памяти.
- Поддержка захвата черно-белых изображений в формате DNG.
- Введение перечислений CFA MONO и NIR для различения обычных монохромных камер и камер ближнего инфракрасного диапазона.
Эту функцию можно использовать для получения монохромного изображения в исходном формате. Логическое многокамерное устройство может использовать монохромную камеру в качестве физической дополнительной камеры для достижения лучшего качества изображения при слабом освещении.
Формат динамической глубины
Начиная с Android 10, камеры могут сохранять данные о глубине изображения в отдельном файле, используя новую схему под названием Dynamic Depth Format (DDF). Приложения могут запрашивать как JPG-изображение, так и его метаданные глубины, используя эту информацию для применения необходимого размытия при постобработке без изменения исходных данных изображения.
Чтобы ознакомиться со спецификацией этого формата, см. раздел Формат динамической глубины .
Высокоэффективный формат файла изображения
Формат High Efficiency Image File (HEIF) — это стандартный формат изображений и видео, который обеспечивает более высокое качество кодирования и меньший размер файла по сравнению с другими форматами файлов.
Более подробную информацию о формате файла см. в HEIC .
Улучшения в многокамерной съемке
В Android 10 улучшено объединение нескольких камер в одну логическую камеру, функция, представленная в Android 9 (уровень API 28). В API Camera2 были добавлены следующие функции:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
— позволяет сделать запрос о возможности использования переданной конфигурации сеанса для создания сеанса захвата камеры.LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
— позволяет определить идентификатор активной физической камеры, поддерживающей логическое устройство камеры. Возвращаемые идентификаторы можно использовать для запроса логических потоков и потоков физических подкамер для повышения энергоэффективности.
API служб доступности
В Android 10 представлены следующие новые функции и API-интерфейсы специальных возможностей:
Флаг ключа записи AccessibilityNodeInfo
Начиная с Android 10, вы можете вызвать isTextEntryKey()
чтобы определить, представляет ли данный AccessibilityNodeInfo
клавишу ввода текста, являющуюся частью клавиатуры или дополнительной клавиатуры.
Устная обратная связь в диалоговом окне доступности
В случае, если пользователям необходимо выполнить команду быстрого доступа для запуска службы специальных возможностей, Android 10 позволяет сопровождать диалоговое окно подсказкой преобразования текста в речь, если служба этого требует.
Ярлык специальных возможностей при включенной навигации жестами
При включении функции навигации жестами в Android 10 кнопка специальных возможностей не отображается и недоступна для нажатия. Чтобы открыть меню служб специальных возможностей, необходимо выполнить один из следующих жестов:
- Проведите двумя пальцами вверх.
- Проведите двумя пальцами вверх и удерживайте.
Сочетание клавиш для физических клавиатур
В Android 10 пользователи могут активировать сочетание клавиш специальных возможностей на физической клавиатуре, нажав Control+Alt+Z .
Улучшение контроллера программной клавиатуры
В Android 10 службы специальных возможностей могут запрашивать отображение экранной клавиатуры, даже если устройство обнаруживает подключённую аппаратную клавиатуру. Пользователи могут переопределить это поведение.
Определяемые пользователем тайм-ауты доступности
В Android 10 представлен API getRecommendedTimeoutMillis()
. Этот метод обеспечивает поддержку определяемых пользователем тайм-аутов для интерактивных и неинтерактивных элементов пользовательского интерфейса. Возвращаемое значение зависит как от пользовательских настроек, так и от API служб специальных возможностей.
Улучшения автозаполнения
Android 10 содержит следующие улучшения сервиса автозаполнения.
Запросы автозаполнения, связанные с совместимостью
Вы можете использовать флаг FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST
, чтобы определить, был ли создан запрос на автозаполнение в режиме совместимости.
Сохраните имя пользователя и пароль одновременно
С помощью флага SaveInfo.FLAG_DELAY_SAVE
можно поддерживать случаи, когда приложение использует несколько действий для отображения имени пользователя, пароля и других полей.
Взаимодействие пользователя с пользовательским интерфейсом сохранения
Вы можете отобразить и скрыть поле пароля в диалоговом окне сохранения, установив прослушиватель действий в диалоговом окне и изменив видимость соответствующего удаленного представления пароля.
Поддержка обновления наборов данных
Функция автозаполнения может обновлять существующие пароли. Например, если пользователь уже сохранил пароль и сохраняет новый, функция автозаполнения предложит пользователю обновить существующий пароль вместо сохранения нового.
Улучшения классификации полей
Android 10 содержит следующие улучшения API классификации полей.
Конструктор UserData.Builder
Конструктор UserData.Builder
был изменен для лучшего соответствия шаблону Builder
.
Разрешить сопоставление значения с несколькими типами идентификаторов категорий
При использовании UserData.Builder
в Android 10 теперь можно сопоставлять значение с несколькими типами идентификаторов категорий. В предыдущих версиях возникало исключение, если значение добавлялось более одного раза.
Улучшенная поддержка номеров кредитных карт
Классификация полей теперь может определять четырехзначные числа как последние четыре цифры номера кредитной карты.
Поддержка классификации полей, специфичных для приложения
В Android 10 добавлен FillResponse.setUserData()
, позволяющий задать пользовательские данные, специфичные для приложения, на время сеанса. Это помогает службе автозаполнения определять типы полей с содержимым, специфичным для приложения.
Пользовательский интерфейс и системные элементы управления
Android 10 предоставляет следующие улучшения пользовательского интерфейса:
Поддержка JVMTI PopFrame caps
В Android 10 добавлена поддержка функции can_pop_frames
в реализации JVMTI для Android. При отладке эта функция позволяет повторно запускать функции после остановки в точке останова и корректировки локальных и глобальных переменных, а также реализации функции. Подробнее см. на странице справки Oracle Pop Frame .
API управления поверхностью
В Android 10 доступен API SurfaceControl
для низкоуровневого доступа к системному компоновщику ( SurfaceFlinger
). Для большинства пользователей SurfaceView — это правильный способ использования компоновщика. API SurfaceControl
может быть полезен в определённых случаях, например:
- Синхронизация нескольких поверхностей
- Встраивание поверхности между процессами
- Управление жизненным циклом на нижнем уровне
API SurfaceControl
доступен как в SDK , так и в NDK-привязках. Реализация NDK включает API для ручного обмена буферами с компоновщиком. Это предоставляет альтернативу для пользователей, столкнувшихся с ограничениями BufferQueue
.
Обнаружение зависшего рендерера WebView
В Android 10 представлен абстрактный класс WebViewRenderProcessClient
, который приложения могут использовать для определения состояния WebView
, когда он перестал отвечать. Чтобы использовать этот класс:
- Определите свой собственный подкласс и реализуйте его методы
onRenderProcessResponsive()
иonRenderProcessUnresponsive()
. - Присоедините экземпляр
WebViewRenderProcessClient
к одному или нескольким объектамWebView
. - Если
WebView
перестает отвечать, система вызывает методonRenderProcessUnresponsive()
клиента, передаваяWebView
иWebViewRenderProcess
. (ЕслиWebView
— однопроцессный, параметрWebViewRenderProcess
равен null.) Ваше приложение может предпринять соответствующие действия, например, отобразить пользователю диалоговое окно с вопросом, хочет ли он остановить процесс рендеринга.
Если WebView
не отвечает, система периодически вызывает onRenderProcessUnresponsive()
(не чаще одного раза в пять секунд), не предпринимая никаких других действий. Если WebView
снова реагирует, система вызывает onRenderProcessResponsive()
только один раз.
Панели настроек
В Android 10 представлены панели настроек — API, который позволяет приложениям показывать пользователям настройки в контексте их приложения. Это избавляет пользователей от необходимости заходить в настройки , чтобы изменить такие параметры, как NFC или мобильные данные , чтобы использовать приложение.


Например, предположим, что пользователь открывает веб-браузер, когда его устройство находится в режиме «В самолёте». До Android 10 приложение могло отображать только стандартное сообщение с просьбой открыть «Настройки» для восстановления подключения. С Android 10 браузер может отображать встроенную панель с основными настройками подключения, такими как режим «В самолёте», Wi-Fi (включая сети поблизости) и мобильные данные. С помощью этой панели пользователи могут восстановить подключение, не выходя из приложения.
Чтобы отобразить панель настроек, запустите намерение с помощью одного из следующих действий Settings.Panel
:
Котлин
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
Ява
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type); startActivityForResult(panelIntent);
settings_panel_type
может быть одним из:
-
ACTION_INTERNET_CONNECTIVITY
- Показывает настройки, связанные с подключением к Интернету, такие как режим полета, Wi-Fi и мобильные данные.
-
ACTION_WIFI
- Показывает настройки Wi-Fi, но не настройки других подключений. Это полезно для приложений, которым требуется подключение по Wi-Fi для загрузки или скачивания больших объёмов данных.
-
ACTION_NFC
- Показывает все настройки, связанные с беспроводным соединением ближнего радиуса действия (NFC).
-
ACTION_VOLUME
- Показывает настройки громкости для всех аудиопотоков.
Улучшения в совместном использовании
Android 10 предлагает ряд улучшений для совместного доступа:
API для обмена ярлыками
API Sharing Shortcuts заменяет API Direct Share .
Вместо того, чтобы получать результаты по запросу, API Sharing Shortcuts позволяет приложениям заранее публиковать прямые цели для публикации. Именно так работает ShortcutManager
. Поскольку эти два API похожи, мы расширили API ShortcutInfo
, чтобы упростить использование обеих функций. С помощью API Sharing Shortcuts вы можете напрямую назначать категории или людей целям публикации. Цели публикации сохраняются в системе до тех пор, пока то же приложение не обновит их или не будет удалено.
Старый механизм Direct Share по-прежнему работает, но приложения, которые его используют, имеют более низкий приоритет, чем приложения, использующие API Sharing Shortcuts.
ShortcutInfo.Builder
добавляет и улучшает методы для предоставления дополнительной информации о целевом ресурсе.
Прямые цели обмена
Вы можете опубликовать динамический ярлык в качестве цели прямого доступа. См. раздел Публикация целей прямого доступа .
ShortcutManagerCompat
— это новый API AndroidX, обеспечивающий обратную совместимость со старым API DirectShare. Это предпочтительный способ публикации целевых ресурсов.
Предварительный просмотр текста
Когда приложение делится текстовым контентом, оно может отображать дополнительный предварительный просмотр контента в пользовательском интерфейсе Sharesheet.
См. раздел Добавление предпросмотра форматированного текста.
Узнать больше
Дополнительную информацию о том, как приложения могут обмениваться данными, см. в разделах Отправка простых данных в другие приложения и Получение простых данных из других приложений.
Темная тема
В Android 10 доступна тёмная тема, которая применяется как к системному интерфейсу Android, так и к приложениям, запущенным на устройстве. Полную информацию см. в разделе «Тёмная тема» .
Типы приоритетных служб
В Android 10 появился атрибут XML-манифеста foregroundServiceType
, который можно включить в определение нескольких конкретных служб. Возможно, хотя и редко целесообразно, назначить одной службе несколько типов служб переднего плана.
В следующей таблице показаны различные типы служб переднего плана и службы, для которых целесообразно объявить определенный тип:
Тип приоритетной службы | Пример использования сервиса, который должен объявить этот тип |
---|---|
connectedDevice | Следите за носимым фитнес-трекером |
dataSync | Загрузка файлов из сети |
location | Продолжить действие, инициированное пользователем |
mediaPlayback | Включайте аудиокнигу, подкаст или музыку |
mediaProjection | Запишите видео с дисплея устройства в течение короткого периода времени. |
phoneCall | Обрабатывать текущий телефонный звонок |
Котлин
Android 10 включает следующие обновления для разработки на Kotlin.
Аннотации допустимости значений NULL для API libcore
В Android 10 улучшен охват аннотаций допустимости значений NULL в SDK для API libcore. Эти аннотации позволяют разработчикам приложений, использующим анализ допустимости значений NULL на Kotlin или Java в Android Studio, получать информацию о допустимости значений NULL при взаимодействии с этими API.
Обычно нарушения контракта на допустимость значений NULL в Kotlin приводят к ошибкам компиляции. Для обеспечения совместимости с существующим кодом добавляются только аннотации @RecentlyNullable
и @RecentlyNonNull
. Это означает, что нарушения допустимости значений NULL приводят к предупреждениям, а не к ошибкам.
Кроме того, все аннотации @RecentlyNullable
и @RecentlyNonNull
, добавленные в Android 9, заменяются на @Nullable
и @NonNull
соответственно. Это означает, что в Android 10 и более поздних версиях нарушения допустимости значений NULL приводят к ошибкам, а не к предупреждениям.
Дополнительную информацию об изменениях аннотаций см. в статье Android Pie SDK теперь более дружелюбен к Kotlin в блоге разработчиков Android.
НДК
Android 10 включает следующие изменения NDK.
Улучшена отладка владения файловым дескриптором
В Android 10 добавлена функция fdsan, которая упрощает поиск и устранение проблем с владением дескриптором файла.
Ошибки, связанные с неправильным управлением владением дескриптором файла, которые обычно проявляются как использование после закрытия и двойное закрытие , аналогичны ошибкам выделения памяти, связанным с использованием после освобождения и двойного освобождения , но их, как правило, гораздо сложнее диагностировать и исправлять. fdsan пытается обнаружить и/или предотвратить неправильное управление дескриптором файла, обеспечивая владение дескриптором файла.
Дополнительную информацию о сбоях, связанных с этими проблемами, см. в разделе «Ошибка, обнаруженная fdsan» . Дополнительную информацию о fdsan см. на странице GoogleSource, посвящённой fdsan .
ЭЛЬФ ТЛС
Приложения, созданные с использованием NDK с минимальным уровнем API 29, могут использовать ELF TLS вместо emutls
. Для поддержки этого метода обработки локальных переменных потока была добавлена поддержка динамического и статического компоновщика.
Для приложений, созданных для API уровня 28 и ниже, были реализованы улучшения для libgcc/compiler-rt
позволяющие обойти некоторые проблемы emutls
.
Более подробную информацию см. в разделе Изменения Android для разработчиков NDK .
Время выполнения
Android 10 включает следующее изменение среды выполнения.
Запуск сборки мусора на основе Mallinfo
Когда небольшие объекты Java платформы ссылаются на большие объекты в куче C++, эти объекты C++ часто можно было восстановить только после сборки и, например, финализации объекта Java. В предыдущих версиях платформа оценивала размеры многих объектов C++, связанных с объектами Java. Эта оценка не всегда была точной и иногда приводила к значительному увеличению потребления памяти, поскольку платформа не выполняла сборку мусора, когда это было необходимо.
В Android 10 сборщик мусора (GC) отслеживает общий размер кучи, выделенной системной функцией malloc()
, гарантируя, что большие выделения памяти malloc()
всегда учитываются в расчётах, запускающих сборку мусора. В приложениях, чередующих выделение большого количества памяти C++ с выполнением кода Java, частота сборки мусора может увеличиться. В других приложениях может наблюдаться небольшое снижение.
Тестирование и отладка
Android 10 включает следующие улучшения для тестирования и отладки.
Улучшения для отслеживания системы на устройстве
Начиная с Android 10, вы можете указать ограничения на размер и продолжительность трассировки при выполнении трассировки системы на устройстве . При указании любого из этих значений система выполняет длительную трассировку, периодически копируя буфер трассировки в целевой файл во время записи трассировки. Трассировка завершается по достижении указанных вами ограничений на размер или продолжительность.
Используйте эти дополнительные параметры для тестирования различных вариантов использования, отличных от стандартной трассировки. Например, вы можете диагностировать ошибку производительности, которая возникает только после длительного периода работы приложения. В этом случае вы можете записать длительную трассировку за целый день, а затем проанализировать планировщик ЦП, активность диска, потоки приложения и другие данные в отчёте, чтобы определить причину ошибки.
В Android 10 и более поздних версиях файлы трассировки сохраняются в формате, который можно открыть с помощью Perfetto — проекта с открытым исходным кодом для инструментирования и трассировки производительности. Вы можете преобразовать файлы трассировки Perfetto в формат Systrace .
Улучшения TextClassifier
Android 10 предоставляет дополнительные функции классификации текста в интерфейсе TextClassifier
.
Определение языка
Метод detectLanguage()
работает аналогично ранее существовавшим методам классификации. Он получает объект TextLanguage.Request
и возвращает объект TextLanguage
.
Объекты TextLanguage
состоят из списка упорядоченных пар. Каждая пара содержит локаль и соответствующий уровень уверенности классификации.
Предлагаемые действия в разговоре
Метод suggestConversationActions()
работает аналогично существующим методам классификации. Он получает объект ConversationActions.Request
и возвращает объект ConversationActions
.
Объекты ConversationActions
состоят из списка объектов ConversationAction
. Каждый объект ConversationAction
включает потенциальное предлагаемое действие и его оценку уверенности.
Умные ответы/действия в уведомлениях
В Android 9 появилась возможность отображать предлагаемые ответы в уведомлениях. В Android 10 эта возможность расширена за счёт добавления предлагаемых действий, основанных на намерениях. Более того, платформа может генерировать эти предложения автоматически. Приложения по-прежнему могут предлагать собственные варианты ответов или отказываться от системных предложений. API, используемый для генерации этих ответов, является частью TextClassifier
и также был напрямую предоставлен разработчикам в Android 10. Для получения дополнительной информации прочитайте раздел об улучшениях TextClassifier .
Если ваше приложение предлагает собственные подсказки, платформа не генерирует автоматические подсказки. Если вы не хотите, чтобы уведомления вашего приложения отображали предлагаемые ответы или действия, вы можете отказаться от системных ответов и действий с помощью методов setAllowGeneratedReplies()
и setAllowSystemGeneratedContextualActions()
.