Поделиться через


NDK для Android

Это важно

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

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

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

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

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

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

Замечание

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

Создайте файл .zip для загрузки

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

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

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

Вариант 2: Загрузка символов Breakpad

  1. Выгрузите символы с помощью цепочки инструментов Breakpad, как описано в документации Breakpad в разделе "Получение символов отладки".
  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 или командный интерфейс для отправки символов Breakpad.
  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 и укажите путь к вашему файлу на диске. Этот запрос отправляет файл на наши серверные учетные записи хранения. Узнайте больше о заголовках запросов PUT для BLOB.
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 App Center, следуя инструкциям в репозитории CLI App Center.

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

Вы также можете использовать ИНТЕРФЕЙС командной строки для отправки файлов символов:

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

Игнорировать символы

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

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