Aplikasi saya yang menggunakan Google Maps SDK (v2) baru saja mulai mogok dengan pengecualian ini:
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)
Di v3 beta SDK, jejak tumpukan adalah:
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)
Apa penyebabnya?
Jawaban:
Sunting : berikut ini adalah solusi resmi dari Google ( tautan )
Ringkasan
Aplikasi Google Maps SDK crash (ArrayIndexOutOfBoundsException) - Solusi Ditawarkan
Deskripsi
Pada 23 April 2020 mulai pukul 11:30 PDT , Google melayani pembaruan selama 4 jam untuk konfigurasi komponen seluler Maps, memicu gangguan pada Maps SDK untuk Android dan iOS. Aplikasi pada perangkat yang mengunduh versi konfigurasi ini (selama periode pemadaman) rentan terhadap kerusakan. Solusi pemecahan masalah ditawarkan untuk Maps SDKs untuk Android dan iOS.
Maps SDK untuk Android
Maps SDK untuk Android v2 (termasuk dalam Layanan Google Play)
Pembaruan untuk Layanan Google Play untuk memperbaiki kerusakan telah dipublikasikan ke semua perangkat dengan Layanan Google Play versi 17.4.55 dan yang lebih baru. Tidak ada perubahan pada nomor versi Google Play Services di perangkat setelah pembaruan diinstal. Tidak diperlukan tindakan dari pengembang atau pengguna akhir untuk menerima modul Maps yang diperbarui; namun, pengembang dapat memverifikasi bahwa modul hadir pada perangkat yang diberikan dengan perintah adb berikut:
Anda harus melihat baris yang
Module Set ID: maps
tercantum diModule Sets
bagian ini.Tingkat kerusakan Maps SDK untuk Android v2 kembali normal.
Sampai sekarang, jika Anda belum memperbarui aplikasi Anda dengan solusi kode sisi klien yang disebutkan di bawah, Anda tidak perlu mengambil tindakan lebih lanjut.
Jika Anda telah memperbarui aplikasi Anda dengan solusinya, Anda dapat menghapus solusinya di pembaruan aplikasi Anda berikutnya (tetapi menjaga solusinya aman).
Premium Plan Maps SDK untuk Android v2 atau Maps SDK untuk Android v3 beta (perpustakaan statis)
Jika aplikasi Anda menggunakan Premium Plan Maps SDK untuk Android v2 atau Maps SDK untuk Android v3 beta (perpustakaan statis), dan masih mengalami crash, kami masih sangat menyarankan Anda untuk meluncurkan solusi di bawah ini melalui pembaruan ke aplikasi Anda. Karena aplikasi Anda memuat versi statis SDK yang rentan terhadap data buruk yang disimpan pada beberapa perangkat, hanya pembaruan ke aplikasi Anda yang dapat menyelesaikan masalah.
Persetujuan ulasan Play Store
Jika Anda memperbarui aplikasi tetapi mengalami keterlambatan peninjauan ulasan Play Store, harap ajukan kasasi dengan ID Paket aplikasi Anda: Hubungi tim dukungan . Tim Dukungan kami akan meningkatkan permintaan Anda secara internal dan mempercepat persetujuan.
Ulasan negatif di Google Play Store
Beberapa pengembang aplikasi bertanya tentang ulasan 1 bintang di Google Play Store yang ditinggalkan oleh pengguna akhir karena macet. Hanya komentar yang melanggar kebijakan Google Play [1] yang dapat dihapus. Anda juga dapat menandai ulasan kasar di Play Console [2]. Aplikasi tidak akan dihapus secara otomatis dari Google Play store karena ulasan negatif. Perlu juga dicatat bahwa perhitungan peringkat ulasan aplikasi Anda secara keseluruhan mendukung ulasan terbaru, yang berarti bahwa peringkat Anda akan pulih ke tingkat pra-insiden seiring waktu.
[1] Peringkat & Tinjauan di Play Store
[2] Laporkan ulasan yang tidak pantas
Maps SDK untuk iOS
Tingkat kerusakan pada iOS kembali normal. Jika aplikasi Anda masih mengalami crash, Anda perlu memperbarui dan menerbitkan aplikasi Anda dengan pemecahan kode yang dikomunikasikan di sini.
Untuk pertanyaan tentang menyebarkan atau mempercepat aplikasi Anda di Apple App Store, silakan hubungi Apple secara langsung.
Dengan pembaruan ini, kami menutup masalah ini. Terima kasih untuk semuanya atas kesabaran Anda. Tim kami sedang melakukan penyelidikan internal mendalam atas insiden ini; sesegera mungkin, kami akan mempublikasikan analisis kami (dalam sekitar satu minggu). Sementara itu, jika Anda memiliki pertanyaan, atau masih mengalami masalah, harap mengajukan kasus dukungan .
Penanganan masalah:
Pengguna akhir di Android dapat menghapus data aplikasi yang terpengaruh (bukan hanya cache).
Pengguna akhir di iOS dapat menghapus instalasi lalu menginstal ulang aplikasi yang terpengaruh.
Pengembang Aplikasi dapat menerapkan solusi kode di bawah ini untuk menyelesaikan masalah bagi semua pengguna akhir mereka.
Penanganan masalah kode untuk iOS:
Penempatan kode yang disarankan adalah sebelum inisialisasi GMSServices dalam aplikasi (_: didFinishLaunchingWithOptions :) (Swift) atau aplikasi: didFinishLaunchingWithOptions: (Objective-C) metode. Secara khusus:
Cepat:
Tujuan-C:
Penanganan kode untuk Android:
Penempatan kode yang disarankan ada di Application.onCreate ():
Jawa
Kotlin
Solusi yang disediakan di sini mencakup semua rasa dan versi SDK yang tersedia untuk Android. Untuk memperjelas lebih lanjut (jika Anda merilis versi sebelumnya dari solusi yang tidak menghapus banyak file):
Aplikasi yang menggunakan Maps Android SDK v3 beta hanya perlu menghapus satu file
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) atau
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())
sumber
Tampak di setiap aplikasi Google Map membuat file ZoomTables.data.
File ini cacat, versi cacat itu yang dapat diunduh dari komentar . Untuk mereproduksi masalah, hapus ZoomTables.data dari paket aplikasi pada perangkat dan masukkan yang salah. Aplikasi seharusnya macet.
Saat ini, masalah diselesaikan di sisi google, tetapi aplikasi masih berisi versi cache dari file data tersebut. Untuk memperbaiki masalah ini, kita harus menghapus file itu tepat di awal aplikasi di Metode onCreate Aplikasi.
Perbarui 1
Saya telah memperbarui solusinya, berdasarkan komentar pengembang google terbaru :
sumber
Solusi ini berhasil untuk saya
Buka aplikasi lagi dan periksa apakah masalah telah diperbaiki.
Di bawah ini adalah saran untuk membantu pelanggan Anda.
Kirim email ke semua pengguna Anda untuk ketidaknyamanan ini dan jelaskan masalah yang mereka hadapi dan berikan mereka langkah-langkah yang disebutkan di atas untuk menyelesaikan masalah mereka.
Anda juga dapat mengirim Pemberitahuan Push ke semua pengguna Anda dengan Firebase Push Notification, jika aplikasi Anda memiliki layanan pemberitahuan push.
Peragaan tangkapan layar:
sumber
Untuk Android, beberapa pengembang menyebutkan solusi yang terdiri dari menghapus file ZoomTable.data langsung dari aplikasi mereka. Setelah ditinjau, perbaikan ini tampaknya aman, dan Anda bisa mencobanya di aplikasi Anda.
Silakan merujuk ke https://issuetracker.google.com/154855417#comment179
Jika Anda ingin pengguna Anda terus menggunakan aplikasi Anda tanpa menginstal ulang, Kode sampel disalin-tempel di sini untuk kenyamanan Anda. Di Application.onCreate () :
referensi: Google Maps SDK mogok - sebagian diselesaikan
sumber
Kerugian dari solusi di atas:
Kerugian dari solusi saya:
Solusi saya menangkap Pengecualian yang dilemparkan oleh Maps SDK, sebut ini di onCreate dari kelas Aplikasi:
sumber
Versi produktif diperbaiki (di sisi google) tetapi jika Anda masih memiliki masalah dengan emulator Anda, Anda harus menjalankan kode berikut hanya sekali.
MainActivity.kt
Penanganan masalah : Bersihkan data aplikasi (bukan hanya cache).
Catatan : Salinan file bermasalah dari paket aplikasi pada perangkat jika ada yang membutuhkannya untuk repro.
Sumber
GL
sumber
Lengkap & jawaban resmi untuk semua:
Diagnosis: Kecelakaan SDK seluler Platform Google Maps (iOS & Android) saat dimuat.
Penanganan masalah: * Bersihkan data aplikasi yang terpengaruh (bukan hanya cache), atau hapus instalan lalu instal ulang aplikasi yang terpengaruh.
Penempatan kode yang disarankan adalah sebelum inisialisasi GMSServices dalam aplikasi (_: didFinishLaunchingWithOptions :) (Swift) atau aplikasi: didFinishLaunchingWithOptions: (Objective-C) metode. Secara khusus:
Cepat:
Tujuan-C:
Setelah Anda menempatkannya di aplikasi Anda, Anda dapat mengajukan kasus Dukungan Peta jika Anda ingin kami membantu mempercepat persetujuannya. Pastikan untuk memasukkan ID aplikasi Anda, Bundle ID, dan versi yang ingin Anda tinjau dalam kasus Anda.
Penanganan kode untuk Android:
Penempatan kode yang disarankan ada di Application.onCreate ():
Jawa
Kotlin
Sumber: https://issuetracker.google.com/issues/1548554
sumber
Ini adalah kode yang berfungsi untuk Xamarin. Anda perlu menginstal paket nuget Xamarin.Essentials.
sumber
Anda harus memanggil metode ikuti di onCreate aplikasi Android Anda untuk menghindari crash.
sumber