По умолчанию в конечных сборках приложений нативные библиотеки урезаются. Из них удаляются таблицы символов и сведения для отладки. Это позволяет значительно уменьшить размер библиотек, но из-за отсутствия информации (например, названий классов и функций) в Google Play Console становится невозможно диагностировать сбои. Чтобы отлаживать сбои, добавьте в приложение файл с отладочными символами в Play Console.
Загрузите файл символов
В Google Play Console отчеты о сбоях на уровне ОС находятся в разделе Android Vitals. Вы можете создать и загрузить файл с отладочными символами для своего приложения. Это позволит добавлять символы в трассировки стека при сбоях на уровне ОС (включая названия классов и функций) в Android Vitals, чтобы вы могли отлаживать приложение в рабочей версии. Эти шаги зависят от версии плагина Android Gradle, используемой в вашем проекте, и от того, используете ли вы набор Android App Bundle (рекомендуется) или APK.
Плагин Android Gradle версии 4.1 или более поздней.
Если ваш проект создает набор Android App Bundle (AAB), то вы можете настроить сборку так, чтобы файл с отладочными символами автоматически включался в AAB и загружался в Play Console при публикации приложения. Чтобы добавить этот файл в конечные сборки, укажите в файле build.gradle.kts приложения следующее:
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
Выберите один из следующих уровней символов отладки:
- Используйте
SYMBOL_TABLE, чтобы получить названия функций в трассировках стека с символами в Play Console. Этот уровень поддерживает надгробные плиты. - Используйте
FULL, чтобы получить названия функций, файлы и номера строк в трассировках стека с добавленными символами в Play Console.
Если в вашем проекте создается APK, используйте параметр android.buildTypes.release.ndk.debugSymbolLevel, описанный выше, чтобы сгенерировать файл с отладочными символами отдельно. Вручную загрузите файл с нативными отладочными символами в Google Play Console. Процесс аналогичен загрузке файла сопоставления для деобфускации трассировок стека.
В процессе сборки плагин Android Gradle создает этот файл в следующем каталоге проекта:
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
Если в зависимостях есть нативные библиотеки, то, скорее всего, сведения для отладки удалены, чтобы уменьшить размер. Чтобы проверить это, запустите сборку с уровнем ведения журнала info и задайте debugSymbolLevel = { SYMBOL_TABLE | FULL }.
Затем найдите в выходных данных сборки следующую строку:
Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.
Плагин Android Gradle версии 4.0 или более ранней (и другие системы сборки)
В процессе сборки плагин Android Gradle сохраняет копию библиотек с отладочными символами в каталоге проекта. Структура каталогов выглядит следующим образом:
app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
Заархивируйте содержимое этого каталога:
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .Вручную загрузите файл
symbols.zipв Google Play Console.