Closed vyurking closed 5 months ago
Добрый день!
Инициализировать можно только в MainActivity, как указано в readme.
Пожалуйста приложите flutter doctor -v
и список используемых плагинов. Также подскажите, проект используется как "Add-to-app" или же обычное флаттер приложение?
Добрый день, у меня обычное flutter приложение. Делал, как указано в Readme, но ловил точно такую же ошибку(
Вот flutter doctor -v:
[✓] Flutter (Channel stable, 3.10.2, on macOS 13.4 22F66 darwin-arm64, locale ru-RU)
• Flutter version 3.10.2 on channel stable at /Users/vsevolodurkin/development/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 9cd3d0d9ff (7 недель назад), 2023-05-23 20:57:28 -0700
• Engine revision 90fa3ae28f
• Dart version 3.0.2
• DevTools version 2.23.1
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
• Android SDK at /Users/vsevolodurkin/Library/Android/sdk
• Platform android-34, build-tools 34.0.0
• Java binary at: /Users/vsevolodurkin/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.10320515/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 14E300c
• CocoaPods version 1.11.3
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2022.3)
• Android Studio at /Users/vsevolodurkin/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.10320515/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
[✓] VS Code (version 1.80.0)
А вот список плагинов (здесь Ваш пакет форкнут):
battery_plus: 3.0.6
bloc: 8.1.2
bloc_concurrency: 0.2.2
#convert: ^3.1.1
cupertino_icons: ^1.0.2
#dart_des: ^1.0.2
device_info_plus: 9.0.2
encrypt: 5.0.1
equatable: 2.0.5
#flutter_3des: ^0.0.4
firebase_core: ^2.13.1
firebase_crashlytics: ^3.3.2
firebase_performance: ^0.9.2+2
flutter_bloc: 8.1.3
#flutter_des: ^2.1.0
flutter_local_notifications: 9.5.3+1
flutter_map: ^4.0.0
flutter_map_marker_cluster: ^1.1.1
flutter_simple_dependency_injection: 2.0.0
flutter_slidable: 3.0.0
flutter_statusbarcolor_ns: 0.5.0
flutter_svg: any
grpc: 3.1.0
html: ^0.15.0
intl: ^0.17.0
latlong2: 0.8.1
mask_text_input_formatter: 2.4.0
material_color_utilities: 0.2.0
package_info_plus: ^4.0.2
path_provider: 2.0.15
plugin_platform_interface: 2.1.4
provider: 6.0.5
qr_code_scanner: 1.0.1
safe_device: ^1.1.4
share_plus: 7.0.2
shared_preferences: ^2.1.1
simple_json_persistence: 2.1.0+2
#tripledes_nullsafety: ^1.0.3
url_launcher: 6.1.11
uuid: 3.0.7
vector_graphics: ^1.1.6
vector_graphics_compiler: ^1.1.6
#yandex_mapkit: 3.2.0
yandex_mapkit:
path: ./yandex_mapkit
Вот как написано у Яндекса в комментариях к примеру инициализации:
/**
И, кстати, в официальном mapkit-android-demo ключ инициализируются так же в в Application.onCreate
@Override
public void onCreate() {
super.onCreate();
// Set the api key before calling initialize on MapKitFactory.
MapKitFactory.setApiKey(MAPKIT_API_KEY);
}
Возникает вопрос, каким образом корректно во flutter можно инициализировать ключ в Application.onCreate или еще как-то до MainActivity ?
@vyurking Не получается воспроизвести, что onAttachedToEngine, что configureFlutterEngine всегда вызываются один раз.
Подскажите, на эмуляторе воспроизводится такое? и какая версия gradle используется?
@DCrow на данный момент у меня тоже не получается воспроизвести, мне кажется что старый ключ где-то в кэше карты (возможно) Версия градла: gradle-7.3.3
UDP: Ошибка ловится, но в соотношение запусков 1:100+ На эмуляторе не пробовал
Склонировал yandex_maprit и вставил initMap в onAttachedToEngine на своем проекте.
private void initMap(FlutterPluginBinding binding) { if (mapinit) { return; } System.out.println("InitMap"); mapinit = true; MapKitFactory.setApiKey("XXXXXXX"); MapKitFactory.initialize(binding.getApplicationContext()); }
Вот такой лог получаю (жирным выделен вызов InitMap - в моем случае 2 раза (!) и потом эксепшн. Судя по всему, проблему двойного вызова тут создает Firebase:
2023-07-14 09:53:43.885 32467-32467 System.out ru.serviopump.spmobile I InitMap 2023-07-14 09:53:45.025 32467-32467 FlutterGeolocator ru.serviopump.spmobile D Initializing Geolocator services 2023-07-14 09:53:46.841 0-0 init kernel I Untracked pid 32456 received signal 1 2023-07-14 09:53:48.496 32467-32539 FirebaseApp ru.serviopump.spmobile I Device unlocked: initializing all Firebase APIs for app [DEFAULT] 2023-07-14 09:53:48.932 32467-32467 FlutterJNI ru.serviopump.spmobile W FlutterJNI.init called more than once 2023-07-14 09:53:48.982 32467-32467 System.out ru.serviopump.spmobile I InitMap 2023-07-14 09:53:48.984 32467-32467 GeneratedP...nsRegister ru.serviopump.spmobile E Received exception while registering
А теперь провел эксперимент с Вашим примером из yandex_mapkit (без лишних плагинов и т.д.):
Ключ устанавливаю в MainActivity. В onAttachedToEngine просто вывожу строку "initMap".
@Override
public void onAttachedToEngine(FlutterPluginBinding binding) {
System.out.println("InitMap");
MapKitFactory.initialize(binding.getApplicationContext());
BinaryMessenger messenger = binding.getBinaryMessenger();
binding.getPlatformViewRegistry().registerViewFactory(VIEW_TYPE, new YandexMapFactory(messenger, new LifecycleProvider()));
setupChannels(messenger, binding.getApplicationContext());
}
Каждый нечетный запуск все ок. "initMap" показывается 1 раз, карты работают ок! Лог ниже:
2023-07-14 10:51:31.501 5911-5911 EGL_emulation pid-5911 D eglCreateContext: 0xebbea1d0: maj 3 min 0 rcv 3 2023-07-14 10:51:31.511 5911-5942 HostConnection pid-5911 D HostConnection::get() New Host Connection established 0xebbe9f30, tid 5942 2023-07-14 10:51:31.540 5911-5942 HostConnection pid-5911 D HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_YUV_Cache ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 2023-07-14 10:51:31.543 5911-5942 EGL_emulation pid-5911 D eglMakeCurrent: 0xebbea1d0: ver 3 0 (tinfo 0xb90804b0) (first time) 2023-07-14 10:51:31.592 5911-5911 System.out pid-5911 I InitMap 2023-07-14 10:51:31.861 5911-5951 flutter pid-5911 I The Dart VM service is listening on http://127.0.0.1:46645/nydZ2-gvsnI=/ 2023-07-14 10:51:32.017 5911-5911 yandex.maps pid-5911 W t6c8XyOLWgTnpOP9OqRR: Locale is already set. Ignored. 2023-07-14 10:51:32.018 5911-5911 yandex.maps pid-5911 W aenAWaCiPaULDXYndbnK: API key is already set. Ignored.
Каждый четный запуск (после выхода по кнопке Back) "initMap" не показывается вообще и сразу вылетает эксепшн пhо setApiKey(). Лог ниже:
2023-07-14 10:48:07.201 5768-5857 HostConnection pid-5768 D HostConnection::get() New Host Connection established 0xebbfed70, tid 5857 2023-07-14 10:48:07.209 5768-5857 HostConnection pid-5768 D HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_YUV_Cache ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 2023-07-14 10:48:07.210 5768-5857 EGL_emulation pid-5768 D eglMakeCurrent: 0xab280710: ver 3 0 (tinfo 0xae8be410) (first time) 2023-07-14 10:48:07.238 5768-5768 AndroidRuntime pid-5768 D Shutting down VM 2023-07-14 10:48:07.239 5768-5768 AndroidRuntime pid-5768 E FATAL EXCEPTION: main Process: com.unact.yandexmapkitexample, PID: 5768 java.lang.AssertionError: setApiKey() should be called before initialize()! at com.yandex.mapkit.MapKitFactory.setApiKey(MapKitFactory.java:36) at com.unact.yandexmapkitexample.MainActivity.configureFlutterEngine(MainActivity.java:13) at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:641) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2023-07-14 10:48:07.245 558-8410 ActivityTaskManager pid-558 W Force finishing activity com.unact.yandexmapkitexample/.MainActivity 2023-07-14 10:48:07.252 318-359 goldfish-address-space pid-318 D claimShared: Ask to claim region [0x3fb997000 0x3fbd1b000] 2023-07-14 10:48:07.257 558-5858 DropBoxManagerService pid-558 I add tag=data_app_crash
Тот же пример из yandex_mapkit - убрал setApiKey из MainActivity и вставил в onAttachedToEngine:
private void initMap(FlutterPluginBinding binding) { if (mapinit) { return; } mapinit = true; System.out.println("InitMap"); MapKitFactory.setApiKey("XXX"); MapKitFactory.initialize(binding.getApplicationContext()); }
@Override
public void onAttachedToEngine(FlutterPluginBinding binding) {
System.out.println("** onAttachedToEngine **");
initMap(binding);
BinaryMessenger messenger = binding.getBinaryMessenger();
binding.getPlatformViewRegistry().registerViewFactory(VIEW_TYPE, new YandexMapFactory(messenger, new LifecycleProvider()));
setupChannels(messenger, binding.getApplicationContext());
}
Нечетный запуск прошел, как и ожидалось, штатно - вызвался 1 раз onAttachedToEngine и initMap А вот на четном запуске случилось вот такое:
2023-07-17 09:10:48.230 558-7893 EGL_emulation system_process D eglCreateContext: 0xb26c1820: maj 3 min 0 rcv 3 2023-07-17 09:10:48.231 558-7893 EGL_emulation system_process D eglMakeCurrent: 0xb26c1820: ver 3 0 (tinfo 0xb651d610) (first time) 2023-07-17 09:10:48.237 558-726 HostConnection system_process D HostConnection::get() New Host Connection established 0xebbf4810, tid 726 2023-07-17 09:10:48.252 18756-19170 HostConnection com.unact.yandexmapkitexample D HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_YUV_Cache ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 2023-07-17 09:10:48.252 18756-19170 EGL_emulation com.unact.yandexmapkitexample D eglMakeCurrent: 0xab347f60: ver 3 0 (tinfo 0xb83febb0) (first time) 2023-07-17 09:10:48.274 18756-18756 System.out com.unact.yandexmapkitexample I onAttachedToEngine 2023-07-17 09:10:48.275 18756-18756 System.out com.unact.yandexmapkitexample I InitMap 2023-07-17 09:10:48.276 18756-18756 GeneratedP...nsRegister com.unact.yandexmapkitexample E Tried to automatically register plugins with FlutterEngine (io.flutter.embedding.engine.FlutterEngine@d39529c) but could not find or invoke the GeneratedPluginRegistrant. 2023-07-17 09:10:48.280 18756-18756 GeneratedP...nsRegister com.unact.yandexmapkitexample E Received exception while registering java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1302) at com.unact.yandexmapkitexample.MainActivity.configureFlutterEngine(MainActivity.java:14) at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:641) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.AssertionError: setApiKey() should be called before initialize()! at com.yandex.mapkit.MapKitFactory.setApiKey(MapKitFactory.java:36) at com.unact.yandexmapkit.YandexMapkitPlugin.initMap(YandexMapkitPlugin.java:46) at com.unact.yandexmapkit.YandexMapkitPlugin.onAttachedToEngine(YandexMapkitPlugin.java:55) at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.add(FlutterEngineConnectionRegistry.java:146) at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:29) at java.lang.reflect.Method.invoke(Native Method) at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1302) at com.unact.yandexmapkitexample.MainActivity.configureFlutterEngine(MainActivity.java:14) at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:641) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2023-07-17 09:10:48.284 558-726 HostConnection system_process D HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_YUV_Cache ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 2023-07-17 09:10:48.323 18756-18756 FlutterAct...ntDelegate com.unact.yandexmapkitexample W A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps. 2023-07-17 09:10:48.452 318-318 goldfish-address-space and...raphics.allocator@3.0-service D claimShared: Ask to claim regio
И еще вдруг обнаружил странную странность: Вообще закомментировал вызов MapKitFactory.Initializeв в Вашем примере, выкинул приложение из памяти и... у меня прекрасно и без этого запустились карты как будто initialize вызвался еще откуда-то !
private void initMap(FlutterPluginBinding binding) {
if (mapinit) {
return;
}
mapinit = true;
System.out.println("InitMap");
MapKitFactory.setApiKey("XXX");
//MapKitFactory.initialize(binding.getApplicationContext());
}
Из странностей 1го запуска выделю вот это :
t6c8XyOLWgTnpOP9OqRR: Locale is already set. Ignored. 2023-07-18 14:28:28.474 3418-3418 yandex.maps com.unact.yandexmapkitexample W aenAWaCiPaULDXYndbnK: API key is already set. Ignored. 2023-07-18 14:28:28.485 3418-3418 yandex.maps com.unact.yandexmapkitexample W t6c8XyOLWgTnpOP9OqRR: Locale is already set. Ignored. 2023-07-18 14:28:28.485 3418-3418 yandex.maps com.unact.yandexmapkitexample W aenAWaCiPaULDXYndbnK: API key is already set. Ignored. 2023-07-18 14:28:28.495 3418-3418 yandex.maps com.unact.yandexmapkitexample W t6c8XyOLWgTnpOP9OqRR: Locale is already set. Ignored. 2023-07-18 14:28:28.496 3418-3418 yandex.maps com.unact.yandexmapkitexample W aenAWaCiPaULDXYndbnK: API key is already set. Ignored. 2023-0
Второй запуск (после выхода по Back) выдал ексепшн, как предыдущем моем посте:
2023-07-17 10:39:54.041 28119-28119 GeneratedP...nsRegister com.unact.yandexmapkitexample E Tried to automatically register plugins with FlutterEngine (io.flutter.embedding.engine.FlutterEngine@a427f22) but could not find or invoke the GeneratedPluginRegistrant. 2023-07-17 10:39:54.056 28119-28119 GeneratedP...nsRegister com.unact.yandexmapkitexample E Received exception while registering java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at
Честно говоря, не знаю, что думать ?
Судя по нашей ошибке. MainActivity в какой-то момент пересоздается (или создается первый раз при запуске), но карта на тот момент уже считается инициализирована почему-то. Каким костылем это обойти, не понятно... Fatal Exception: java.lang.AssertionError: setApiKey() should be called before initialize()! at com.yandex.mapkit.MapKitFactory.setApiKey(MapKitFactory.java:36) at ru.goldapple.courier.MainActivity.initMap(MainActivity.java:49) at ru.goldapple.courier.MainActivity.configureFlutterEngine(MainActivity.java:58) at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:641) at android.app.Activity.performCreate(Activity.java:7144) at android.app.Activity.performCreate(Activity.java:7135) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6718) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
i got temporary solution. it works for me
Получилось найти решение?
Столкнулся с такой же проблемой, причем воспроизводится только при открытии через deeplink
https://github.com/Unact/yandex_mapkit/issues/321#issuecomment-1698622003 из коммента выше помогает, но всё равно работает не корректно - сначала приложение крашится, а после запускается заново :/
У меня работают оба и не крешатся. https://github.com/Unact/yandex_mapkit/issues/321#issuecomment-1713832735
Мы пока отложили вопрос. У нас это не критично. Просто раздражает в фаербейзе ошибка. try catch даже не помогает. и в OnCreate не помогает, ибо ощущение, что активити пересоздается. Но стабильно воспроизвести не получалось, поэтому пока висит в бэклоге.
Всем привет! На нашем проекте мы также столкнулись с данной ошибкой. У нас она чаще всего приходила с Huawei/Xiaomi девайсов. Нам удалось воспроизвести эту ошибку с помощью опции don't keep activites: она происходила при сворачивании-разворачивании приложения с этой включенной опцией. Возможно у вас также получится ее затригерить таким образом.
UPD: по-моему вот таким образом и мы починили это https://github.com/Unact/yandex_mapkit/issues/321#issuecomment-1700820245
Всем спасибо
Получилось так же и вторым способом, но проблема с "перезапуском" так и осталась. Пока тоже так оставлю, не критично (главное что открывает)
Огромное спасибо @TerasKatt, с этой опцией стабильно воспроизводилось.
Для избавления от ошибки надо инициализировать приложение следующим образом:
Создать класс MainApplication(или использовать свой если есть кастомный класс типа Application)
import android.app.Application;
import com.yandex.mapkit.MapKitFactory;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MapKitFactory.setLocale("YOUR_LOCALE"); // Your preferred language. Not required, defaults to system language
MapKitFactory.setApiKey("YOUR_API_KEY"); // Your generated API key
}
}
После этого изменить в AndroidManifest.xml
android:name="${applicationName}"
на android:name=".MainApplication"
Также убрать код, который в README, надо было указывать в MainActivity
.
На андроидах иногда ловлю ошибку, что ключ или устанавливается несколько раз или как-то вызывается инициализация несколько раз, Решил форкнуть пакет и сделать установку ключа перед MapKitFactory.initialize в файле YandexMapkitPlugin, а не в MainActivity, но при старте приложения все равно ловлю setApiKey несколько раз. Скрин вывода "принтом" в консоль установки ключа, на котором видно, что приложение устанавливает его несколько раз.
Честно, не понимаю в чем проблема :C
Вот так устанавливаю ключ: