Closed nurjan84 closed 3 years ago
Дубль https://github.com/yandex/mapkit-android-demo/issues/74 Предлагаю этот тикет закрыть
Нужно больше информации, в тикетах потенциально могут быть разные ошибки.
Тоже появляются такие креши на разных устройствах, при включении appbundle со сплитом по архитектурам.
MapKit 3.4
conquest-S11 Android 7, Meizu 16th Android 8.1, ZenFone 2 (ZE551ML) 6.01, Redmi Note 5 Pro Android 9
MapKit 3.5, в проекте включен app bundle c abi splitting
LGE Nexus 5X Android 8.1.0, Pixel 3 XL Android 10
Fatal Exception: java.lang.UnsatisfiedLinkError: Couldn't load c++_shared at com.yandex.runtime.Runtime.loadLibrary(Runtime.java:124) at com.yandex.runtime.Runtime.init(Runtime.java:99) at com.yandex.mapkit.MapKitFactory.initialize(MapKitFactory.java:25) at ....App.onCreate(App.java:62) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Скорее всего ошибка, с тем что не может найти библиотеку c++_shared. Вы уверены, что на девайсах, на которых происходят падения, прилетела эта библиотека?
Скорее всего ошибка, с тем что не может найти библиотеку c++_shared. Вы уверены, что на девайсах, на которых происходят падения, прилетела эта библиотека?
Краши приходят в crashlytics, соотвественно могу судить только по стек трейсу.
Тем временем количество пострадавших увеличивается: samsung Galaxy J2 Core Android 8.1.0, Huawei Huawei Enjoy 9s Android 5.1, Xiaomi Redmi Note 8T Android 10.0, Trend TaintArt for x86 Android 7.1.2, vivo vivo S1 Android 5.1
@username4564 а у вас случайно не включен флаг android.bundle.enableUncompressedNativeLibs=false? Не уверен что это может влиять, но у нас он был включен, когда мы пытались раскатать appbundle
@maxim-pandra нет, не включен. Этот флаг может помочь вылечить проблему?
Если вы его не используете, то вряд-ли. Потому что у нас как раз с таким флагом краши есть. Думал что может это из-за него.
Обнаружил как воспроизвести проблему.
В случае если собрать apk, поставить breakpoint в классе ReLinker.loadLibrary(...)
в строке System.loadLibrary(library);
и бросить там исключение, то фолбек в catch отрабатывает нормально, библиотеки загружаются, карта работает. В папке app_lib
появляется библиотека при загрузки которой произошло исключение.
В случае если собрать appbundle со split по архитектуре и флагом android.bundle.enableUncompressedNativeLibs=false
(без флага поведение то же не работает),
то при вызове исключения в указанном месте, фолбек отрабатывает не корректно, библиотеки не загружаются и карта не работает. В папке app_lib
нет нативной бибиотеки.
Эта проблема не позволяет использовать мапкит с appbundle, а скро это станет обязательным для всех. Да или лимит +50мб дает.
P.S. Устанавливать бандлы на устройство можно так:
brew install bundletool
bundletool build-apks --bundle=./app.aab --output=./app.apks
bundletool install-apks --apks=app.apks
Похожую проблему исправляли в SoLoader https://github.com/facebook/SoLoader/pull/26 Может как-то поможет
А вот как это поправили в ReLinker котоый похоже и используется в кратах
https://github.com/KeepSafe/ReLinker/commit/9bc6d1709f8f51ab34ed0dca0650fefd6b839c16
Правда странно почему это влияет на андроиды 5+, как я понял реликер и солоадер решают проблемы только до android 5, а дальше loadLibrary должен нормально работать.
Есть утилита https://developer.android.com/studio/command-line/bundletool, она позволяет локально собрать бандлы, можно проверить, попадает ли в них нужные библиотеки, если нет, то поиграться с параметрами, по которым происходит сплит.
Недавно вышла новая версия, в ней библиотека c++_shared статически влинкована. Проблема должна пропасть.
https://yandex.ru/dev/maps/mapkit/doc/dg/concepts/versions-docpage/
Да, я проверил все варианты. и бибилотеки попадают все 4 вида апк v7a, v8a, x86, x86_64. Параметр управляющий сплитом по abi в bundletool один.
abi {
enableSplit = true
}
А может ли проблема в устаревшей версии релинкера?
--
Спасибо! попробуем новую версию
Создал и опубликовал приложение (через app bundle) в плэй маркете. На следующий день крашлитикс показал мне ошибки, которые прилетели, возможно, от гугла и возможно от автомат. тестирования (nexus 5x, vivo x9, Android 6.0.1). На всех моих девайсах и эмуляторах yandex map работает нормально. Не пойму что за краши.
краш на строчке:
в build.gradle есть такая штука: