Meine App, die Google Maps SDK (v2) verwendet, stürzte gerade mit dieser Ausnahme ab:
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@[email protected] (120400-0):9)
at com.google.maps.api.android.lib6.gmm6.vector.cv.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (120400-0):23)
at com.google.maps.api.android.lib6.gmm6.util.m.run(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (120400-0):14)
at java.lang.Thread.run(Thread.java:919)
Im Beta-SDK der Version 3 lautet der Stack-Trace:
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)
Was ist die Ursache?
Antworten:
Bearbeiten : Folgendes ist die offizielle Lösung von Google ( Link )
Zusammenfassung
Google Maps SDK-Thread stürzt ab App (ArrayIndexOutOfBoundsException) - Lösung angeboten
Beschreibung
Am 23. April 2020, ab 11:30 Uhr PDT , stellte Google 4 Stunden lang ein Update für die Konfiguration einer mobilen Maps-Komponente bereit, das Abstürze in Maps SDKs für Android und iOS auslöste. Anwendungen auf Geräten, die diese Version der Konfiguration heruntergeladen haben (während des Ausfallzeitraums), waren für den Absturz anfällig. Problemumgehungslösungen werden für Maps SDKs für Android und iOS angeboten.
Karten SDK für Android
Karten SDK für Android v2 (in Google Play Services enthalten)
Die Updates für Google Play Services zur Behebung des Absturzes wurden auf allen Geräten mit Google Play Services Version 17.4.55 und neuer veröffentlicht. Nach der Installation des Updates wird die Versionsnummer von Google Play Services auf dem Gerät nicht geändert. Entwickler oder Endbenutzer müssen keine Maßnahmen ergreifen, um das aktualisierte Maps-Modul zu erhalten. Entwickler können jedoch mit dem folgenden Befehl adb überprüfen, ob das Modul auf einem bestimmten Gerät vorhanden ist:
Sie sollten die
Module Set ID: maps
imModule Sets
Abschnitt aufgeführte Zeile sehen .Die Absturzraten von Maps SDK für Android v2 sind wieder normal.
Wenn Sie Ihre App nicht mit den unten genannten clientseitigen Code-Problemumgehungen aktualisiert haben, müssen Sie ab sofort keine weiteren Maßnahmen ergreifen.
Wenn Sie Ihre App bereits mit den Problemumgehungen aktualisiert haben, können Sie die Problemumgehung in einem nachfolgenden Update Ihrer App entfernen (die Problemumgehung ist jedoch sicher).
Premium Plan Maps SDK für Android v2 oder Maps SDK für Android v3 Beta (statische Bibliotheken)
Wenn Ihre App das Premium Plan Maps SDK für Android v2 oder das Maps SDK für Android v3 Beta (statische Bibliotheken) verwendet und weiterhin Abstürze auftreten, empfehlen wir Ihnen dringend, die folgenden Problemumgehungen über ein Update Ihrer App einzuführen. Da Ihre Anwendung eine statische Version des SDK lädt, die für die auf einigen Geräten gespeicherten fehlerhaften Daten anfällig ist, kann das Problem nur durch ein Update Ihrer Anwendung behoben werden.
Genehmigungen für Play Store-Überprüfungen
Wenn Sie Ihre App aktualisieren, aber Verzögerungen bei der Genehmigung von Play Store-Überprüfungen feststellen, reichen Sie bitte einen Support-Fall mit der Paket-ID Ihrer App ein: Wenden Sie sich an das Support-Team . Unser Support-Team wird Ihre Anfrage intern eskalieren und die Genehmigung beschleunigen.
Negative Bewertungen im Google Play Store
Einige Anwendungsentwickler erkundigten sich nach 1-Stern-Bewertungen im Google Play Store, die Endbenutzer aufgrund von Abstürzen hinterlassen hatten. Nur Kommentare, die gegen die Richtlinien von Google Play [1] verstoßen, können entfernt werden. Sie können auch missbräuchliche Bewertungen in der Spielekonsole [2] markieren. Anwendungen werden aufgrund negativer Bewertungen nicht automatisch aus dem Google Play Store entfernt. Es ist auch erwähnenswert, dass die Berechnung Ihrer Gesamtbewertung für App-Bewertungen die jüngsten Bewertungen begünstigt, was bedeutet, dass sich Ihre Bewertung im Laufe der Zeit auf das Niveau vor dem Vorfall erholt.
[1] Ratings & Review im Play Store
[2] Unangemessene Bewertungen melden
Karten SDK für iOS
Die Absturzraten unter iOS sind wieder normal. Wenn Ihre Anwendung immer noch abstürzt, müssen Sie Ihre App mit den hier angegebenen Code-Problemumgehungen aktualisieren und veröffentlichen.
Bei Fragen zur Bereitstellung oder Beschleunigung Ihrer Anwendung im Apple App Store wenden Sie sich bitte direkt an Apple.
Mit diesem Update schließen wir dieses Problem. Vielen Dank an alle für Ihre Geduld. Unser Team führt eine eingehende interne Untersuchung dieses Vorfalls durch. Wir werden unsere Analyse so bald wie möglich veröffentlichen (in ungefähr einer Woche). Wenn Sie in der Zwischenzeit Fragen haben oder immer noch Probleme haben, reichen Sie bitte einen Support-Fall ein .
Problemumgehungen:
Endbenutzer unter Android können die Daten der betroffenen App löschen (nicht nur den Cache).
Endbenutzer unter iOS können die betroffenen Apps deinstallieren und anschließend neu installieren.
App-Entwickler können die folgenden Code-Problemumgehungen anwenden, um das Problem für alle Endbenutzer zu lösen.
Code-Problemumgehung für iOS:
Die empfohlene Platzierung für den Code erfolgt vor der Initialisierung von GMSServices in der Anwendung (_: didFinishLaunchingWithOptions :) (Swift) oder der Anwendung: didFinishLaunchingWithOptions: (Objective-C) -Methode. Speziell:
Schnell:
Ziel c:
Code-Problemumgehung für Android:
Die empfohlene Platzierung für den Code befindet sich in Application.onCreate ():
Java
Kotlin
Die hier bereitgestellten Problemumgehungen decken alle verfügbaren Varianten und Versionen unserer SDKs für Android ab. Weitere Erläuterungen (falls Sie eine frühere Version der Problemumgehung veröffentlicht haben, bei der nicht so viele Dateien gelöscht wurden):
Anwendungen, die Maps Android SDK v3 Beta verwenden, sollten auch nur eine Datei löschen müssen
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) oder
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())
quelle
Scheint in jeder App Google Map erstellt ZoomTables.data-Datei.
Diese Datei war fehlerhaft, eine fehlerhafte Version davon, die aus dem Kommentar heruntergeladen werden konnte . Um das Problem zu reproduzieren, entfernen Sie ZoomTables.data aus den App-Paketen auf dem Gerät und fügen Sie eine fehlerhafte ein. Die App sollte abstürzen.
Derzeit wurde das Problem auf Googles Seite behoben, aber die Apps enthalten immer noch eine zwischengespeicherte Version dieser Datendatei. Um das Problem zu beheben, sollten wir diese Datei direkt beim Start der App in Application onCreate Method entfernen.
Update 1
Ich habe die Problemumgehung basierend auf dem neuesten Kommentar der Google-Entwickler aktualisiert :
quelle
Diese Lösung hat bei mir funktioniert
Öffnen Sie die App erneut und überprüfen Sie, ob das Problem behoben wurde.
Nachfolgend finden Sie Vorschläge, um Ihren Kunden zu helfen.
Senden Sie eine E-Mail an alle Benutzer für die Unannehmlichkeiten und beschreiben Sie ihnen das Problem, mit dem sie konfrontiert sind, und geben Sie ihnen die oben genannten Schritte, um das Problem zu beheben.
Sie können Push-Benachrichtigungen auch mit Firebase-Push-Benachrichtigungen an alle Benutzer senden, wenn Ihre App über den Push-Benachrichtigungsdienst verfügt.
Screenshots Demonstration:
quelle
Für Android erwähnten mehrere Entwickler eine Problemumgehung, die darin bestand, die Datei ZoomTable.data direkt aus ihrer Anwendung zu löschen. Nach der Überprüfung scheint dieses Update sicher zu sein, und Sie können es in Ihrer Anwendung versuchen.
Weitere Informationen finden Sie unter https://issuetracker.google.com/154855417#comment179
Wenn Sie möchten, dass Ihre Benutzer Ihre App weiterhin verwenden, ohne sie erneut zu installieren, wird der Beispielcode hier zur Vereinfachung kopiert. In Application.onCreate () :
Referenz: Google Maps SDK stürzt ab - teilweise behoben
quelle
Nachteile der oben genannten Lösungen:
Nachteile meiner Lösung:
Meine Lösung fängt die vom Maps SDK ausgelöste Ausnahme ab. Rufen Sie dies in onCreate der Application-Klasse auf:
quelle
Die produktive Version wurde behoben (auf Googles Seite), aber wenn Sie immer noch Probleme mit Ihrem Emulator haben, müssen Sie den folgenden Code nur einmal ausführen.
MainActivity.kt
Problemumgehung : Löschen Sie Anwendungsdaten (nicht nur den Cache).
Hinweis : Eine Kopie der problematischen Datei aus den App-Paketen auf dem Gerät, falls jemand sie für die Repro benötigt.
Quelle
GL
quelle
Vollständige und offizielle Antwort für alle:
Diagnose: Absturz der mobilen SDKs der Google Maps Platform (iOS & Android) beim Laden.
Problemumgehung: * Löschen Sie die Daten der betroffenen App (nicht nur den Cache) oder deinstallieren Sie die betroffenen Apps und installieren Sie sie erneut.
Die empfohlene Platzierung für den Code erfolgt vor der Initialisierung von GMSServices in der Anwendung (_: didFinishLaunchingWithOptions :) (Swift) oder der Anwendung: didFinishLaunchingWithOptions: (Objective-C) -Methode. Speziell:
Schnell:
Ziel c:
Sobald Sie es in Ihrer App bereitgestellt haben, können Sie einen Maps Support-Fall einreichen, wenn Sie möchten, dass wir die Genehmigung beschleunigen. Stellen Sie sicher, dass Sie die ID Ihrer Anwendung, die Bundle-ID und die Version angeben, die Sie in Ihrem Fall überprüfen möchten.
Code-Problemumgehung für Android:
Die empfohlene Platzierung für den Code befindet sich in Application.onCreate ():
Java
Kotlin
Quelle: https://issuetracker.google.com/issues/1548554
quelle
Dies ist Arbeitscode für Xamarin. Sie müssen das Nuget-Paket Xamarin.Essentials installieren.
quelle
Sie sollten die folgende Methode auf onCreate Ihrer Android-App aufrufen, um den Absturz zu vermeiden.
quelle