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, которое включает в себя повышение производительности и улучшение безопасности. Наши тесты показывают, что защищенные соединения устанавливаются на 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 добавлена поддержка одноранговых соединений (peer-to-peer). Эта функция позволяет вашему приложению предлагать пользователю изменить точку доступа, к которой подключено устройство, используя 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 Easy Connect
В Android 10 появилась возможность использовать Easy Connect для предоставления учетных данных Wi-Fi другому устройству, заменяя устаревший WPS. Приложения могут интегрировать Easy Connect в свой процесс настройки и предоставления доступа, используя интент ACTION_PROCESS_WIFI_EASY_CONNECT_URI .
Для получения более подробной информации об этой функции см. раздел Wi-Fi Easy Connect .
API для подключения по Wi-Fi Direct
В Android 10 были внесены обновления в классы API WifiP2pConfig и WifiP2pManager , которые поддерживают быстрое установление соединения с 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)
Java
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)
Java
manager.connect(channel, config, null);
Каналы, ориентированные на соединение Bluetooth LE (CoC)
Android 10 позволяет вашему приложению использовать соединения BLE CoC для передачи больших потоков данных между двумя устройствами BLE. Этот интерфейс абстрагирует механизмы Bluetooth и подключения, упрощая реализацию.
Функции телефонии
Android 10 включает в себя ряд улучшений, связанных с телефонией.
Улучшение качества звонков
В Android 10 добавлена возможность сбора информации о качестве текущих вызовов в IP-подсистеме мультимедиа (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
API Android Native MIDI (AMidi) предоставляет разработчикам приложений возможность отправлять и получать MIDI-данные с помощью кода на C/C++, обеспечивая более тесную интеграцию с их логикой управления звуком на C/C++ и сводя к минимуму необходимость использования JNI.
Для получения более подробной информации см. раздел «Нативный MIDI API Android» .
Улучшения MediaCodecInfo
В Android 10 добавлены методы в MediaCodecInfo , позволяющие получить более подробную информацию о кодеке.
Для получения дополнительной информации см. раздел «Медиакодеки» .
Термоарифметический API
Когда устройства слишком сильно нагреваются, они могут снижать производительность процессора и/или видеокарты, что может неожиданным образом повлиять на работу приложений и игр. Приложения, использующие сложную графику, ресурсоемкие вычисления или длительную сетевую активность, чаще сталкиваются с проблемами, которые могут различаться в зависимости от устройства, частоты чипсета и ядра, уровня интеграции, а также типа корпуса и форм-фактора.
В Android 10 приложения и игры могут использовать API для мониторинга температуры, чтобы отслеживать изменения на устройстве и принимать меры для поддержания более низкого энергопотребления и восстановления нормальной температуры. Приложения регистрируют слушатель в PowerManager , через который система сообщает о текущем состоянии температуры, варьирующемся от легкого и умеренного до серьезного, критического, аварийного и режима выключения.
Когда устройство сообщает о перегреве, приложения и игры могут помочь, снижая интенсивность текущих процессов для уменьшения энергопотребления различными способами. Например, потоковые приложения могут уменьшить разрешение/битрейт или сетевой трафик, приложение камеры может отключить вспышку или интенсивную обработку изображений, игра может уменьшить частоту кадров или тесселяцию полигонов, медиаприложение может уменьшить громкость динамиков, а приложение карт может отключить GPS.
Для работы API термодатчика требуется новый слой HAL устройства — в настоящее время он поддерживается на устройствах Pixel под управлением Android 10, и мы работаем с нашими партнерами-производителями устройств, чтобы как можно быстрее обеспечить широкую поддержку экосистемы.
Камера и изображения
В Android 10 представлены следующие новые функции, связанные с камерой и обработкой изображений:
Поддержка монохромной камеры
В Android 9 (уровень API 28) впервые появилась возможность использования монохромной камеры. В Android 10 добавлено несколько улучшений в поддержку монохромной камеры:
- Поддержка потокового формата Y8 для повышения эффективности использования памяти.
- Поддержка монохромной съемки в формате RAW DNG.
- Введение перечислений MONO и NIR CFA для различения обычных монохромных камер и камер ближнего инфракрасного диапазона.
Вы можете использовать эту функцию для получения исходного монохромного изображения. Логическое многокамерное устройство может использовать монохромную камеру в качестве физической вспомогательной камеры для достижения лучшего качества изображения в условиях низкой освещенности.
Динамический формат глубины
Начиная с Android 10, камеры могут хранить данные о глубине изображения в отдельном файле, используя новую схему, называемую динамическим форматом глубины (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 .
Разрешить сопоставление значения с несколькими типами идентификаторов категорий.
В Android 10 при использовании UserData.Builder теперь можно сопоставлять значение с несколькими типами идентификаторов категорий. В предыдущих версиях, если значение добавлялось более одного раза, возникало исключение.
Улучшена поддержка номеров кредитных карт.
Теперь система классификации полей может распознавать четырехзначные числа как последние четыре цифры номера кредитной карты.
Поддержка классификации полей, специфичной для приложения.
В 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 (включая ближайшие сети) и мобильные данные. С помощью этой панели пользователи могут восстановить подключение, не выходя из приложения.
Чтобы отобразить панель настроек, запустите Intent с одним из следующих действий Settings.Panel :
Котлин
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
Java
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 для обмена ярлыками заменяет API для прямого обмена .
Вместо реактивного получения результатов по запросу, API «Обмен ярлыками» позволяет приложениям заранее публиковать целевые объекты для обмена. Именно так работает ShortcutManager . Поскольку оба API похожи, мы расширили API ShortcutInfo , чтобы упростить использование обеих функций. С помощью API «Обмен ярлыками» вы можете напрямую назначать категории или пользователей целевому объекту для обмена. Целевые объекты для обмена сохраняются в системе до тех пор, пока это же приложение не обновит их или не будет удалено.
Старый механизм 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, которая помогает проще находить и исправлять проблемы с владением дескрипторами файлов.
Ошибки, связанные с некорректной обработкой прав собственности на дескрипторы файлов, которые обычно проявляются как ошибки типа use-after-close и double-close , аналогичны ошибкам use-after-free и double-free при выделении памяти, но их гораздо сложнее диагностировать и исправлять. fdsan пытается обнаружить и/или предотвратить некорректное управление дескрипторами файлов, обеспечивая соблюдение прав собственности на дескрипторы файлов.
Для получения дополнительной информации о сбоях, связанных с этими проблемами, см. раздел «Ошибка, обнаруженная fdsan» . Для получения дополнительной информации о fdsan см. страницу Googlesource, посвященную fdsan .
ELF TLS
Приложения, созданные с использованием 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() .