Мое приложение, использующее Google Maps SDK (v2), только что начало сбой, за исключением этого:
Process: com.currentlocation.android, PID: 7328
java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
at com.google.maps.api.android.lib6.gmm6.vector.ct.<init>(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):9)
at com.google.maps.api.android.lib6.gmm6.vector.cv.a(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):23)
at com.google.maps.api.android.lib6.gmm6.util.m.run(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):14)
at java.lang.Thread.run(Thread.java:919)
В v3 beta SDK трассировка стека выглядит так:
2020-04-23 15:59:06.064 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 22717
java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
at com.google.android.libraries.maps.bv.zzbs.<init>(ZoomTable.java:24)
at com.google.android.libraries.maps.bv.zzbv.zza(ZoomTableQuadTree.java:57)
at com.google.android.libraries.maps.br.zzd.zza(Unknown Source:4)
at com.google.android.libraries.maps.hi.zzas.zza(Suppliers.java:7)
at com.google.android.libraries.maps.br.zza.zzh(SharedMapComponentImpl.java:58)
at com.google.android.libraries.maps.gu.zzat.zza(RendererFactoryImpl.java:88)
at com.google.android.libraries.maps.it.zzav.zza(GoogleMapImpl.java:59)
at com.google.android.libraries.maps.it.zzci.zza(MapFragmentDelegateImpl.java:3)
at com.google.android.libraries.maps.it.zzcg.zza(MapFragmentDelegateImpl.java:15)
at com.google.android.libraries.maps.SupportMapFragment$zza.onCreateView(SupportMapFragment.java:15)
at com.google.android.gms.dynamic.zae.zaa(com.google.android.gms:play-services-base@@17.1.0:4)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaa(com.google.android.gms:play-services-base@@17.1.0:9)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreateView(com.google.android.gms:play-services-base@@17.1.0:25)
at com.google.android.libraries.maps.SupportMapFragment.onCreateView(SupportMapFragment.java:34)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:336)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1186)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2222)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1995)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1951)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2621)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:336)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1186)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1432)
at android.app.Activity.performStart(Activity.java:7848)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
2020-04-23 15:59:06.064 E/AndroidRuntime: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
В чем причина?
Ответы:
Изменить : следующее официальное решение от Google ( ссылка )
Резюме
Приложение Google Maps SDK аварийно завершает работу приложения (ArrayIndexOutOfBoundsException) - предлагаемое решение
Описание
23 апреля 2020 года, начиная с 11:30 по тихоокеанскому времени , Google в течение 4 часов обновлял конфигурацию мобильного компонента Maps, вызывая сбои в SDK Maps для Android и iOS. Приложения на устройствах, которые загрузили эту версию конфигурации (в период простоя), были уязвимы для сбоя. Обходные решения предлагаются для карт SDK для Android и iOS.
Карты SDK для Android
Карты SDK для Android v2 (включены в Сервисы Google Play)
Обновления Сервисов Google Play для устранения сбоев были опубликованы на всех устройствах с Сервисами Google Play версии 17.4.55 и новее. После установки обновления номер версии Служб Google Play на устройстве не изменяется. От разработчиков или конечных пользователей не требуется никаких действий для получения обновленного модуля Карт; однако разработчики могут проверить наличие модуля на данном устройстве с помощью следующей команды adb:
Вы должны увидеть строку,
Module Set ID: maps
указанную вModule Sets
разделе.Частота сбоев Maps SDK для Android v2 вернулась к норме.
На данный момент, если вы не обновили свое приложение с помощью обходных путей на стороне клиента, упомянутых ниже, вам не нужно предпринимать дальнейших действий.
Если вы уже обновили свое приложение с помощью обходных путей, вы можете удалить обходной путь в последующем обновлении своего приложения (но сохранение обходного пути безопасно).
Премиум план Maps SDK для Android v2 или Maps SDK для Android v3 beta (статические библиотеки)
Если ваше приложение использует Premium Plan Maps SDK для Android v2 или Maps SDK для Android v3 beta (статические библиотеки) и все еще испытывает сбои, мы по-прежнему настоятельно рекомендуем развернуть указанные ниже обходные пути через обновление вашего приложения. Поскольку ваше приложение загружает статическую версию SDK, которая уязвима для неверных данных, хранящихся на некоторых устройствах, решить проблему может только обновление вашего приложения.
Одобрение обзора Play Store
Если вы обновляете свое приложение, но испытываете задержки одобрения проверки в Play Store, отправьте заявку в службу поддержки с идентификатором пакета вашего приложения: Обратитесь в службу поддержки . Наша служба поддержки внутренне обработает ваш запрос и ускорит утверждение.
Отрицательные отзывы в Google Play Store
Некоторые разработчики приложений спрашивали о 1-звездочных отзывах в магазине Google Play, оставленных конечными пользователями из-за сбоев. Только комментарии, которые нарушают политику Google Play [1], могут быть удалены. Вы также можете пометить оскорбительные отзывы в консоли Play [2]. Приложения не будут автоматически удалены из магазина Google Play из-за отрицательных отзывов. Стоит также отметить, что подсчет общего рейтинга ваших обзоров приложений благоприятствует последним обзорам, что означает, что ваш рейтинг со временем восстановится до уровня, предшествующего инцидентам.
[1] Рейтинги и обзоры в магазине Play
[2] Сообщить о неуместных отзывах
Карты SDK для iOS
Показатели аварий на iOS вернулись к норме. Если ваше приложение все еще испытывает сбои, вам необходимо обновить и опубликовать свое приложение с помощью описанных здесь обходных путей кода.
По вопросам развертывания или ускорения работы приложения в Apple App Store обращайтесь напрямую в Apple.
Этим обновлением мы закрываем эту проблему. Спасибо всем за терпение. Наша команда проводит углубленное внутреннее расследование этого инцидента; как можно скорее, мы опубликуем наш анализ (примерно через неделю). В то же время, если у вас есть какие-либо вопросы или у вас все еще есть проблемы, пожалуйста, подайте заявку в службу поддержки .
обходные:
Конечные пользователи на Android могут очистить данные уязвимого приложения (а не только кеш).
Конечные пользователи на iOS могут удалить и переустановить уязвимые приложения.
Разработчики приложений могут применить обходные пути кода ниже, чтобы решить проблему для всех своих конечных пользователей.
Обход кода для iOS:
Рекомендуемое размещение кода перед инициализацией GMSServices в приложении (_: didFinishLaunchingWithOptions :) (Swift) или в приложении: didFinishLaunchingWithOptions: (Objective-C). В частности:
Swift:
Objective-C:
Обход кода для Android:
Рекомендуемое размещение кода в Application.onCreate ():
Ява
Котлин
Обходные пути, представленные здесь, охватывают все доступные версии и версии наших SDK для Android. Для уточнения (в случае, если вы выпустили более раннюю версию обходного пути, которая не удаляла столько файлов):
Приложения, использующие бета-версию Maps Android SDK v3, должны удалять только один файл.
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) или
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())
источник
Кажется, в каждом приложении Google Map создает файл ZoomTables.data.
Этот файл был неверно сформирован, его версия была загружена из комментария . Чтобы воспроизвести проблему, удалите ZoomTables.data из пакетов приложений на устройстве и вставьте поврежденный. Приложение должно вылететь.
В настоящее время проблема была решена на стороне Google, но приложения все еще содержат кэшированную версию этого файла данных. Чтобы решить эту проблему, мы должны удалить этот файл прямо при запуске приложения в Application onCreate Method.
Обновление 1
Я обновил обходной путь, основываясь на последнем комментарии разработчиков Google :
источник
Это решение сработало для меня
Снова откройте приложение и проверьте, устранена ли проблема.
Ниже приведены предложения, чтобы помочь вашим клиентам.
Отправьте электронное письмо всем своим пользователям за причиненные неудобства, опишите им проблему, с которой они столкнулись, и дайте им вышеупомянутые шаги для решения их проблемы.
Вы также можете отправлять Push-уведомления всем своим пользователям с помощью Firebase Push-уведомлений, если в вашем приложении есть служба push-уведомлений.
Демонстрация скриншотов:
источник
Для Android несколько разработчиков упомянули обходной путь, заключающийся в удалении файла ZoomTable.data непосредственно из их приложения. После проверки это исправление кажется безопасным, и вы можете попробовать его в своем приложении.
Пожалуйста, обратитесь к https://issuetracker.google.com/154855417#comment179
Если вы хотите, чтобы пользователи продолжали использовать ваше приложение без переустановки, образец кода скопирован сюда для вашего удобства. В Application.onCreate () :
ссылка: Google Maps SDK падает - частично решена
источник
Недостатки решения выше:
Недостатки моего решения:
Мое решение перехватывает исключение, которое выдает SDK для карт, вызовите его в onCreate класса Application:
источник
Продуктивная версия была исправлена (на стороне Google), но если у вас все еще есть проблемы с вашим эмулятором, вы должны запустить следующий код только один раз.
MainActivity.kt
Обходной путь : Очистить данные приложения (не только кеш).
Примечание . Копия проблемного файла из пакетов приложений на устройстве, если кому-либо он нужен для воспроизведения.
Источник
GL
источник
Полный и официальный ответ для всех:
Диагностика: сбой мобильных SDK Google Maps Platform (iOS и Android) при загрузке.
Обходной путь: * Очистите данные уязвимого приложения (не только кеш) или удалите, а затем переустановите уязвимое приложение (я).
Рекомендуемое размещение кода перед инициализацией GMSServices в приложении (_: didFinishLaunchingWithOptions :) (Swift) или в приложении: didFinishLaunchingWithOptions: (Objective-C). В частности:
Swift:
Objective-C:
Развернув его в своем приложении, вы можете подать заявку в службу поддержки Карт, если вы хотите, чтобы мы ускорили его утверждение. Обязательно укажите идентификатор своего приложения, идентификатор комплекта и версию, которую вы хотите просмотреть в вашем случае.
Обход кода для Android:
Рекомендуемое размещение кода в Application.onCreate ():
Ява
Котлин
Источник: https://issuetracker.google.com/issues/1548554
источник
Это рабочий код для Xamarin. Вам необходимо установить пакет nuget Xamarin.Essentials.
источник
Вы должны вызвать метод follow в onCreate вашего приложения для Android, чтобы избежать сбоя.
источник