Недавно мы обновили наши приложения, чтобы использовать наборы приложений Android (aab), а также включить собственные библиотеки arm64.
После этого наши журналы сбоев в собственном коде в «Консоли Google Play» -> «Android Vitals» -> «ANR и сбои» неправильно символизируют (стеки вызовов Java символизируют нормально).
Фрагмент типичного стека вызовов выглядит так:
#21 pc 000000000015addc /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
#22 pc 0000000000293768 /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
#23 pc 0000000000294cf0 /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
Проблема затрагивает сбои как в armv7, так и в arm64. Иногда ошибка будет иметь правильно символизированный стек вызовов, примерно 10% теперь правильно символизированы. До использования AAB и arm64 почти все стеки вызовов отображались правильно.
Чтобы обойти это, мы исследовали использование Crashlytics, но также столкнулись с проблемами при получении стека вызовов с правильными символами. Поскольку мы не использовали Crashlytics раньше, нам трудно понять, страдает ли он от той же проблемы или мы просто неправильно настроили Crashlytics. Однако этот сообщение указывает на то, что у других пользователей могут возникнуть проблемы с AAB и Crashlytics.
Кто-нибудь еще испытывает подобные трудности?
Существуют ли какие-либо известные обходные пути?
Кто-нибудь обновился, чтобы использовать AAB, и не видит проблем с символикой отчетов о сбоях в консоли Google Play?
Отвечает ли это на ваш вопрос? Crashlytics Отсутствуют символы NDK с пакетом приложений для Android
Редактировать: NDK 21 RC1 должен решить эту проблему.
Похоже, это связано с тем, что нативные библиотеки хранятся в APK в несжатом виде.
Добавив следующую опцию в свой gradle.properties, вы можете отключить ее:
android.bundle.enableUncompressedNativeLibs=false
Вам нужно будет выпустить новый пакет приложений, созданный с этой опцией.
Звучит многообещающе, спасибо. Может пройти неделя или около того, прежде чем я смогу развернуть обновление, чтобы узнать, помогает ли оно, но я сообщу, когда сделаю это.
Имейте в виду, что отключение этой функции сделает ваше приложение больше на устройствах пользователей, поскольку платформа должна будет извлечь собственные библиотеки, чтобы иметь возможность их загружать.
Да, вроде поправил. Спасибо! (небольшая награда в пути)
У меня была точно такая же проблема, и это исправило ее для меня, спасибо! @Pierre, вы не знаете, можно ли решить эту проблему без этого флага?
Команда Google работает над решением этой проблемы. Обратите внимание, что в последней версии Gradle этот флаг не будет помечен как неподдерживаемый.
Это все еще проблема? Поскольку я получаю несколько идентичных сбоев в Play Console, но если я добавлю '''enableUncompressedNativeLibs=false''', появится предупреждение о том, что этот параметр является экспериментальным и не поддерживается. Я думаю, что в любом случае не проблема установить эту конфигурацию.
Предупреждение было удалено в более поздней версии плагина Android Gradle.
Последняя версия NDK должна решить эту проблему.
@pierre Вы имеете в виду, что последний NDK означает, что нам больше не нужно использовать enableUncompressedNativeLibs=false, или что последний NDK означает, что мы больше не будем получать предупреждение о том, что опция является экспериментальной и не поддерживается?
С последним NDK вы получите полные символические трассировки стека, как и раньше, без этого свойства gradle. Предупреждение: его не должно быть в последней версии Gradle.
@Pierre Какая версия NDK исправит это?
НДК 21 RC1: developer.android.com/ndk/downloads#beta-downloads
Я считаю, что вы можете взять стек, как указано выше, и передать адреса утилите адрес2линия в вашей цепочке инструментов NDK. Вам нужно будет предоставить неразрезанный файл so, который соответствует версии, встроенной в PlayStore aab.