Android 10 представляет великолепные функции и возможности для пользователей и разработчиков. В этом документе описывается, что доступно разработчикам.
Чтобы узнать об API, прочитайте отчет API diff или посетите справочник Android API — найдите 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, которая включает в себя преимущества производительности и улучшенную безопасность. Наши тесты показывают, что безопасные соединения могут быть установлены на 40% быстрее с TLS 1.3 по сравнению с 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, так и его метаданные глубины, используя эту информацию для применения любого размытия, которое они хотят, при постобработке без изменения исходных данных изображения.
Чтобы ознакомиться со спецификацией этого формата, см. раздел Формат динамической глубины .
Высокоэффективный формат файла изображения
Формат файла изображения высокой эффективности (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
в реализацию Android JVMTI. При отладке эта функция позволяет повторно запускать функции после остановки в точке останова и корректировки локальных, глобальных переменных или реализации функции. Для получения дополнительной информации см. страницу справки 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
добавляет и улучшает методы для предоставления дополнительной информации о целевом ресурсе.
Прямые цели обмена
Вы можете опубликовать динамический ярлык как Direct Share Target. См. Публикация прямых целей обмена .
ShortcutManagerCompat
— это новый API AndroidX, который обеспечивает обратную совместимость со старым API DirectShare. Это предпочтительный способ публикации целевых ресурсов общего доступа.
Предварительный просмотр текста
Когда приложение делится текстовым контентом, оно может отображать дополнительный предварительный просмотр контента в пользовательском интерфейсе Sharesheet.
См. Добавление предпросмотра в формате расширенного текста.
Узнать больше
Дополнительную информацию о том, как приложения могут обмениваться данными, см. в разделах Отправка простых данных в другие приложения и Получение простых данных из других приложений.
Темная тема
Android 10 предлагает темную тему, которая применяется как к пользовательскому интерфейсу системы Android, так и к приложениям, работающим на устройстве. Для получения полной информации см. Темная тема .
Типы приоритетных служб
Android 10 представляет атрибут XML-манифеста foregroundServiceType
, который вы включаете в определение нескольких конкретных служб. Возможно, хотя и редко целесообразно, назначить несколько типов служб foreground конкретной службе.
В следующей таблице показаны различные типы приоритетных служб и службы, для которых целесообразно объявить определенный тип:
Тип приоритетной службы | Пример использования сервиса, который должен объявить этот тип |
---|---|
connectedDevice | Контролируйте носимый фитнес-трекер |
dataSync | Загрузка файлов из сети |
location | Продолжить действие, инициированное пользователем |
mediaPlayback | Воспроизведите аудиокнигу, подкаст или музыку |
mediaProjection | Запишите видео с дисплея устройства за короткий промежуток времени. |
phoneCall | Обрабатывать текущий телефонный звонок |
Котлин
Android 10 включает следующие обновления для разработки на Kotlin.
Аннотации допустимости значений NULL для API libcore
Android 10 улучшает покрытие аннотаций nullability в SDK для API libcore. Эти аннотации позволяют разработчикам приложений, использующим анализ nullability Kotlin или Java в Android Studio, получать информацию о nullability при взаимодействии с этими API.
Обычно нарушения контракта nullability в Kotlin приводят к ошибкам компиляции. Чтобы обеспечить совместимость с существующим кодом, добавляются только аннотации @RecentlyNullable
и @RecentlyNonNull
. Это означает, что нарушения nullability приводят к предупреждениям вместо ошибок.
Кроме того, любые аннотации @RecentlyNullable
или @RecentlyNonNull
, добавленные в Android 9, меняются на @Nullable
и @NonNull
соответственно. Это означает, что в Android 10 и выше нарушения допустимости значений null приводят к ошибкам вместо предупреждений.
Дополнительную информацию об изменениях аннотаций см. в статье Android Pie SDK теперь более дружелюбен к Kotlin в блоге разработчиков Android.
НДК
Android 10 включает следующие изменения NDK.
Улучшена отладка владения дескриптором файла
В Android 10 добавлена функция fdsan, которая упрощает поиск и устранение проблем с владением дескриптором файла.
Ошибки, связанные с неправильным управлением владением дескриптором файла, которые, как правило, проявляются как использование после закрытия и двойное закрытие , аналогичны ошибкам выделения памяти , связанным с использованием после освобождения и двойным освобождением , но, как правило, их гораздо сложнее диагностировать и исправлять. fdsan пытается обнаружить и/или предотвратить неправильное управление дескриптором файла, принудительно устанавливая владение дескриптором файла.
Для получения дополнительной информации о сбоях, связанных с этими проблемами, см. Error detected by 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()
всегда включаются в вычисления, запускающие GC. Приложения, чередующие большое количество выделений 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()
.