Android NDK

Важно!

Прекращение поддержки Центра приложений Visual Studio запланировано на 31 марта 2025 г. Хотя вы можете продолжать использовать Центр приложений Visual Studio, пока он не будет полностью выведен из эксплуатации, существует несколько рекомендуемых вариантов, на которые вы можете рассмотреть возможность миграции.

Узнайте больше о сроках поддержки и альтернативных вариантах.

Android NDK позволяет реализовать части приложений Android с помощью C и C++. Клиентская библиотека Google Breakpad для приложений Android позволяет получать допустимые трассировки стека в машинном коде. Трассировки стека могут содержать только адреса памяти. Они не отображают имена классов, методы, имена файлов и номера строк, необходимые для чтения и понимания сбоев. Чтобы получить адреса памяти, переведенные для приложения NDK для Android, необходимо отправить символы приложения для каждой сборки.

Сведения о том, как сообщать о сбоях NDK, см. в документации по пакету SDK для Android для приложений Android или в документации по пакету SDK Unity для приложений Unity.

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

Несимволические сбои

Несимволические сбои отображаются в разделе Диагностика Центра приложений, поэтому вы можете просмотреть некоторые сведения еще до отправки символов. Отсутствующие символы в этих сбоях будут отображаться на вкладке "несимволированная". При отправке отсутствующих символов несимволичная группа аварийного завершения будет заменена символичной группой сбоев.

Примечание

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

Создание файла .zip для отправки

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

Вариант 1. Отправка собственных двоичных файлов

Поместите все SO-файлы из каталога проекта obj/local/$ABI/ в файл .zip.

Вариант 2. Отправка символов панели останова

  1. Дамп символов с помощью цепочки инструментов "Панель останова", как описано в документации по брейк-панели в разделе "Получение символов отладки".
  2. Создайте файлsymbols.zip со следующей структурой:

Примечание

Если вы отправляете символы из macOS, необходимо очистить символы от лишних папок, например, __MACOS будет создано, и чтобы удалить их, можно использовать .zip -d <symbols.zip> __MACOSX/\*

$ unzip -l symbols.zip
Archive:  symbols.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  07-22-13 15:07   symbols/
        0  07-22-13 15:07   symbols/libnative.so/
        0  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/
    12468  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/libnative.so.sym
        0  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/
    12467  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/libnative.so.sym
 --------                   -------
    24935                   6 files

Отправка символов

Примечание

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

Портал Центра приложений

  1. Войдите в Центр приложений и выберите свое приложение.
  2. В меню слева перейдите в раздел Диагностика , а затем — Проблемы.
  3. Если приложение еще не сообщило о сбое, вам потребуется использовать API или CLI для отправки символов брейк-панели.
  4. Если приложение уже сообщило о сбоях, для которого требуются символы, проверка вкладку "Несимволированная" и должна быть группа версий с отсутствующими символами, щелкните ее, чтобы открыть меню для отправки файла.
  5. После индексирования символов Центром приложений будут символизованы сбои.

API Центра приложений

Процесс отправки символов через API включает в себя ряд из трех вызовов API: один для выделения места на серверной части, один для отправки файла и другой для обновления состояния отправки. Текст первого вызова API должен иметь значение symbol_typeBreakpad.

  1. Активация POST запроса к API symbol_uploads. Этот вызов выделяет место на серверной части для файла и возвращает symbol_upload_id свойство и upload_url .
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{JSON BODY}'
  1. upload_url Используя свойство, возвращенное на первом шаге, выполните запрос с заголовком PUT : "x-ms-blob-type: BlockBlob" и укажите расположение файла на диске. Этот вызов отправляет файл в серверные учетные записи хранения. Дополнительные сведения о заголовках запросов BLOB-объектов PUT .
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. PATCH Выполните запрос к API symbol_uploads с помощью свойства, symbol_upload_id возвращенного на первом шаге. В тексте запроса укажите, нужно ли задать состояние отправки committed (успешно завершен) процесс отправки или aborted (неудачно завершено).
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{ "status": "committed" }'

Примечание

API отправки символов не работает для файлов размером более 256 МБ. Используйте интерфейс командной строки Центра приложений для отправки этих файлов. Вы можете установить интерфейс командной строки Центра приложений, следуя инструкциям в репозитории CLI центра приложений.

Интерфейс командной строки Центра приложений

Вы также можете использовать интерфейс командной строки для отправки файлов символов:

appcenter crashes upload-symbols --breakpad {symbols file}

Игнорирование символов

Если в Центре приложений нет всех файлов символов для полной символики отчетов о сбоях, они отображаются на вкладке Несимволированные . Необходимые символы отправляются с этой страницы, если у вас есть доступ к ним.

Если вы не можете отправить символы, вы можете пометить их как Игнорируемые , выбрав строки в таблице и нажав кнопку Игнорировать версии . Эта кнопка указывает Центру приложений обработать сбои и как можно более полно символично использовать символы в файле. После завершения обработки они появятся на вкладке Аварийное завершение с частичной символией. Новые сбои, которые также зависят от тех же идентификаторов символов, помеченных как игнорируемые, будут обходить вкладку Unsymbolicated по мере их прихода и прохождения через систему.