AndroidRuntime: FATAL İSTİSNA: androidmapsapi-ZoomTableManager


134

Google Maps SDK (v2) kullanan uygulamam bu istisna dışında kilitlenmeye başladı:

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'sında yığın izlemesi:

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)

Sebebi nedir?


10
Belki Google Haritalar sorunu
Eduardo Herzer

1
Bu bir üretim uygulaması mı yoksa sadece bir test mi?
user961186

18
Not: Bu soruya "ben de" yanıtları göndermeyin. Sadece soruyu cevaplayan cevaplar cevap olarak gönderilmelidir.
Wai Ha Lee

3
güncellemeler burada olacak: issuetracker.google.com/issues/154855417
lewkka

2
@ MidnightGuest Biraz daha genişletirseniz, iyi bir soru olabilir.
Makyen

Yanıtlar:


83

Düzenleme : Google'ın resmi çözümü aşağıdadır ( bağlantı )

özet

Google Maps SDK dizisi Uygulama'yı kilitliyor (ArrayIndexOutOfBoundsException) - Çözüm Sunuldu

Açıklama

23 Nisan 2020'de saat 11: 30'da PDT'den başlayarak Google, Android ve iOS için Google Haritalar SDK'larında kilitlenmeleri tetikleyen 4 saat boyunca Google Haritalar mobil bileşeninin yapılandırmasında bir güncelleme yaptı. Konfigürasyonun bu sürümünü indiren cihazlardaki uygulamalar (kesinti süresi boyunca) çökmeye karşı savunmasız kaldı. Android ve iOS için Haritalar SDK'ları için geçici çözümler sunulmaktadır.

Android için Haritalar SDK'sı

Android v2 için Google Haritalar SDK'sı (Google Play Hizmetlerine dahildir)

Kilitlenmeyi gidermek için Google Play Hizmetleri güncellemeleri, Google Play Hizmetleri 17.4.55 ve daha yeni sürümlere sahip tüm cihazlarda yayınlandı. Güncelleme yüklendikten sonra cihazdaki Google Play Hizmetleri sürüm numarasında değişiklik yapılmadı. Güncellenmiş Haritalar modülünü almak için geliştiricilerden veya son kullanıcılardan herhangi bir işlem yapılması gerekmez; ancak, geliştiriciler modülün belirli bir cihazda aşağıdaki adb komutuyla bulunduğunu doğrulayabilir:

adb shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider

Bölümde Module Set ID: mapslistelenen satırı görmelisiniz Module Sets.

Module Set ID: maps, Module Set Version: 2015120015120000

Android v2 için Maps SDK'nın kilitlenme oranları normale döndü.

Şu andan itibaren, uygulamanızı aşağıda belirtilen istemci tarafı kod geçici çözümleriyle güncellemediyseniz, başka işlem yapmanız gerekmez.

Uygulamanızı geçici çözümlerle zaten güncellediyseniz, geçici çözümü uygulamanızın sonraki bir güncellemesinde kaldırabilirsiniz (ancak geçici çözümü güvende tutarsınız).

Android v2 için Premium Plan Maps SDK veya Android v3 beta için Maps SDK (statik kütüphaneler)

Uygulamanız Android v2 için Premium Plan Maps SDK veya Android v3 beta için Maps SDK (statik kütüphaneler) kullanıyorsa ve yine de kilitlenme yaşıyorsa, uygulamanıza bir güncelleme yoluyla aşağıdaki geçici çözümleri kullanmanızı öneririz. Uygulamanız, bazı cihazlarda depolanan kötü verilerden etkilenebilecek statik bir SDK sürümü yüklediğinden, yalnızca uygulamanızda yapılan bir güncelleme sorunu çözebilir.

Play Store inceleme onayları

Uygulamanızı güncellediğiniz halde Play Store inceleme onaylarında gecikmeler yaşıyorsanız, lütfen uygulamanızın Paket Kimliğiyle bir destek vakası gönderin: ⁠ Destek ekibiyle iletişim kurun . Destek Ekibimiz talebinizi şirket içinde artıracak ve onayı hızlandıracaktır.

Google Play Store'daki olumsuz yorumlar

Bazı uygulama geliştiricileri, Google Play Store'daki kilitlenmeler nedeniyle son kullanıcılar tarafından bırakılan 1 yıldızlı incelemeleri sordu. Yalnızca Google Play'in politikasını [1] ihlal eden yorumlar kaldırılabilir. İstismar incelemelerini Play Console'da da işaretleyebilirsiniz [2]. Olumsuz eleştiriler nedeniyle uygulamalar Google Play mağazasından otomatik olarak kaldırılmayacak. Ayrıca, genel uygulama inceleme notunuzun hesaplanmasının son incelemeleri desteklediğini, bu da derecelendirmenizin zaman içinde olay öncesi seviyelere geri döneceği anlamına gelir.

[1] ⁠ Play Store'da Derecelendirmeler ve İnceleme

[2] inappropriate Uygunsuz yorumları bildirin

İOS için Google Haritalar SDK'sı

İOS'ta çökme oranları normale döndü. Uygulamanızda hala kilitlenme yaşanıyorsa, uygulamanızı burada iletilen kod geçici çözümleriyle güncellemeniz ve yayınlamanız gerekir.

Uygulamanızı Apple App Store'da dağıtma veya hızlandırma hakkında sorularınız için lütfen doğrudan Apple ile iletişim kurun.


Bu güncellemeyle, bu sorunu kapatıyoruz. Sabrınız için herkese teşekkürler. Ekibimiz bu olayın derinlemesine bir iç soruşturmasını yürütüyor; mümkün olan en kısa sürede analizimizi yayınlayacağız (yaklaşık bir hafta içinde). Bu arada, herhangi bir sorunuz varsa veya hala sorun yaşıyorsanız, lütfen bir destek vakası gönderin .

Geçici Çözümler:

  • Android'deki son kullanıcılar, etkilenen uygulamanın verilerini (yalnızca önbelleği değil) silebilir.

  • İOS'taki son kullanıcılar, etkilenen uygulamaları kaldırabilir ve yeniden yükleyebilir.

  • Uygulama Geliştiricileri, sorunu tüm son kullanıcıları için çözmek için aşağıdaki kod geçici çözümlerini uygulayabilir.

İOS için kod geçici çözümü:

Kod için önerilen yerleşim, uygulama (_: didFinishLaunchingWithOptions :) (Swift) veya application: didFinishLaunchingWithOptions: (Objective-C) yönteminde GMSServices başlatılmasından önce. özellikle:

Swift:

let key = "GoogleMapsServerControlledParamsKey_bug_154855417"
if !UserDefaults.standard.bool(forKey: key) {
    let urls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
    if urls.count > 0 {
        let paramUrl = urls[0].appendingPathComponent("com.google.GoogleMaps/ServerControlledParams", isDirectory: false)
        try? FileManager.default.removeItem(at: paramUrl)
    }
    UserDefaults.standard.set(true, forKey: key)
}

Objective-C:

NSString *key = @"GoogleMapsServerControlledParamsKey_bug_154855417";
BOOL keyExists = [[NSUserDefaults standardUserDefaults] boolForKey:key];
if (!keyExists) {
    NSArray<NSURL *> *array =
        [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory
                                               inDomains:NSUserDomainMask];
    if (array.count > 0) {
        NSURL *url =
            [array[0] URLByAppendingPathComponent:@"com.google.GoogleMaps/ServerControlledParams"
                                      isDirectory:NO];
        if (url) {
            [[NSFileManager defaultManager] removeItemAtURL:url error:NULL];
        }
    }
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
}

Android için kod geçici çözümü:

Kod için önerilen yerleşim Application.onCreate () konumunda:

Java

try {
  SharedPreferences hasFixedGoogleBug154855417 = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE);
  if (!hasFixedGoogleBug154855417.contains("fixed")) {
    File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data");
    File corruptedSavedClientParameters = new File(getFilesDir(), "SavedClientParameters.data.cs");
    File corruptedClientParametersData =
        new File(
          getFilesDir(),
          "DATA_ServerControlledParametersManager.data."
              + getBaseContext().getPackageName());
    File corruptedClientParametersDataV1 =
        new File(
          getFilesDir(),
          "DATA_ServerControlledParametersManager.data.v1."
              + getBaseContext().getPackageName());
    corruptedZoomTables.delete();
    corruptedSavedClientParameters.delete();
    corruptedClientParametersData.delete();
    corruptedClientParametersDataV1.delete();
    hasFixedGoogleBug154855417.edit().putBoolean("fixed", true).apply();
  }
} catch (Exception e) {

}

Kotlin

try {
    val sharedPreferences = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE)
    if (!sharedPreferences.contains("fixed")) {
        val corruptedZoomTables = File(filesDir, "ZoomTables.data")
        val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs")
        val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.${packageName}")
        val corruptedClientParametersDataV1 = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}")
        corruptedZoomTables.delete()
        corruptedSavedClientParameters.delete()
        corruptedClientParametersData.delete()
        corruptedClientParametersDataV1.delete()
        sharedPreferences.edit().putBoolean("fixed", true).apply()
    }
} catch (exception: Exception) {

}

Burada sağlanan geçici çözümler, Android için SDK'larımızın mevcut tüm lezzetlerini ve sürümlerini kapsar. Daha fazla açıklığa kavuşturmak için (geçici çözümün daha fazla dosya silmeyen daha eski bir sürümünü yayınlamanız durumunda):

  • Haritalar Android SDK v2 kullanan uygulamaların yalnızca bir dosyayı silmesi gerekir: ZoomTables.data.
  • Haritalar Android SDK v3 beta kullanan uygulamaların yalnızca bir dosyayı silmesi gerekir

    DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) veya

    DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())


1
Uygulamamız emülatörde, aynı kodda çalışıyor, ancak bir üretim cihazında çalışmıyor. Yakınlaştırma sırasında gerçekleşmeye başladı. FATAL İSTİSNA: androidmapsapi-ZoomTableManager
user961186

1
Hata Android'de.
user961186

2
Uber, Lyft vb. Dahil olmak üzere Harita'yı kullanan birçok uygulamanın çöktüğünü kontrol ettim. Google Haritalar benim için çalışıyor gibi görünüyor, herkese açık API'dan farklı başka bir API uç noktasına işaret ediyor olmalı.
AlexVPerl

16
Buradaki asıl suç, harita çağrısı bir dene / yakala ifadesinde yer alsa bile, Google Haritalar'ın bir şekilde deneme çağrınızı aşması ve bir hata atmak yerine uygulamayı çökmesidir. Haritalar, yalnızca her şeyi çökertmek için değil, kullanılabilir olmadığında uygun bir istisna atmalıdır.
Brettins

2
Pakistan'da aynı sorun
Syed Raza Mehdi

44

Her uygulamada Google Map'in ZoomTables.data dosyası oluşturduğu görülüyor.

resim açıklamasını buraya girin

Bu dosya, yorumdan indirilebilen hatalı biçimlendirilmiş, yanlış biçimlendirilmiş bir versiyonuydu . Sorunu yeniden oluşturmak için aygıttaki uygulama paketlerinden ZoomTables.data dosyasını kaldırın ve hatalı biçimlendirilmiş olanı ekleyin. Uygulama çökmelidir.

Şu anda, sorun google tarafında çözüldü, ancak uygulamalar yine de bu veri dosyasının önbelleğe alınmış bir sürümünü içeriyor. Sorunu çözmek için, Application onCreate Method'daki uygulama başlangıcında bu dosyayı kaldırmalıyız.

private void fixGoogleMapBug() {
  try {
    SharedPreferences hasFixedGoogleBug154855417 = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE);
    if (!hasFixedGoogleBug154855417.contains("fixed")) {
      File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data");
      File corruptedSavedClientParameters = new File(getFilesDir(), "SavedClientParameters.data.cs");
      File corruptedClientParametersData =
          new File(
            getFilesDir(),
            "DATA_ServerControlledParametersManager.data."
                + getBaseContext().getPackageName());
      File corruptedClientParametersDataV1 =
          new File(
            getFilesDir(),
            "DATA_ServerControlledParametersManager.data.v1."
                + getBaseContext().getPackageName());
      corruptedZoomTables.delete();
      corruptedSavedClientParameters.delete();
      corruptedClientParametersData.delete();
      corruptedClientParametersDataV1.delete();
      hasFixedGoogleBug154855417.edit().putBoolean("fixed", true).apply();
    }
  } catch (Exception e) {

  }
}

Güncelleme 1

En son google geliştiricileri yorumuna dayanarak geçici çözümü güncelledim :

Burada sağlanan geçici çözümler, Android için SDK'larımızın mevcut tüm lezzetlerini ve sürümlerini kapsar. Daha fazla açıklığa kavuşturmak için (geçici çözümün daha fazla dosya silmeyen daha eski bir sürümünü yayınlamanız durumunda):

Haritalar Android SDK v2 kullanan uygulamaların yalnızca bir dosyayı silmesi gerekir: ZoomTables.data. Haritalar Android SDK v3 beta kullanan uygulamaların DATA_ServerControlledParametersManager.data.v1 gibi yalnızca bir dosyayı silmesi gerekir. + getBaseContext (). getPackageName ()) veya DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())


2
ZoomTables.data dosyası hariç benim için çalıştı. Çok teşekkürler! Herkes bunu kullanmalı ve cevap olarak işaretlemelidir!
Eduardo Herzer

@ArthurAttout Evet, şimdilik şimdilik bunu yapıyorum ve Google'ın düzeltmesi için daha fazla zaman beklemekten 16 saatten fazla süren üretim uygulamalarımı
düzeltiyorum

@EduardoHerzer Google'ın ETA'sı 48 saattir ve üretimin tamamı kullanıma sunulması 48 saatten fazla sürecektir. (İnceleme süresini güncelleyin + teslim süresi)
Muhammad Saqib

Bu benim için çalıştı! Ben sadece Flutter uygulaması için biraz değişti: var dir = await getApplicationSupportDirectory (); Dosya bozukZoomTables = yeni Dosya (dir.path + "/ZoomTables.data");
csk

Neden ZoomTables.data'yı yalnızca bir kez kaldırıyoruz? Bu gelecekte tekrar bozulursa ne olur?
Jan Nepraš

11

Bu çözüm benim için çalıştı

  1. İlk önce "Uygulama Bilgisi" ni açın
  2. "Depolama" yı seçin
  3. "Verileri temizle" yi tıklayın
  4. Uygulamayı tekrar açın ve sorunun çözülüp çözülmediğini kontrol edin.

    Aşağıda, yalnızca müşterilerinize yardımcı olacak öneriler bulunmaktadır.

  5. Bu sorun için tüm kullanıcılarınıza bir e-posta gönderin ve karşılaştıkları sorunu açıklayın ve sorunlarını çözmek için yukarıda belirtilen adımları uygulayın.

  6. Uygulamanızda push bildirimleri hizmeti varsa Firebase Push Bildirimleri ile tüm kullanıcılarınıza Push Bildirimi gönderebilirsiniz.

Ekran görüntüleri gösterisi:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


6

Android için, birden fazla geliştirici ZoomTable.data dosyasını doğrudan uygulamalarından silmekten oluşan bir geçici çözümden bahsetti. İncelemeden sonra bu düzeltme güvenli görünüyor ve uygulamanızda deneyebilirsiniz.

Lütfen https://issuetracker.google.com/154855417#comment179 adresine bakın

Kullanıcılarınızın yeniden yüklemeden uygulamanızı kullanmaya devam etmesini istiyorsanız, örnek kod size kolaylık sağlamak için buraya kopyalanmıştır. İçinde ) (Application.onCreate :

SharedPreferences googleBug = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE);
if (!googleBug.contains("fixed")) {
        File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data");
        corruptedZoomTables.delete();
        googleBug.edit().putBoolean("fixed", true).apply();
}

başvuru: Google Haritalar SDK'sı kilitleniyor - kısmen çözüldü



6

Yukarıdaki çözümlerin sakıncaları:

  • ZoomTables.data, cihazın kilitlenmeden etkilenip etkilenmediğine bakılmaksızın her cihazda silinir
  • Geçici çözüm yalnızca bir kez çalışır, bu sorunun bir daha asla gerçekleşmeyeceğinden emin misiniz?

Çözümümün sakıncaları:

  • etkilenen cihaz haritasında ilk harita yürütme etkinliği boş. Cihazın dönmesinden sonra veya ikinci yürütme haritası gösterilir

Çözümüm, Haritalar SDK'sı tarafından atılan Özel Durumu yakalar, bunu Uygulama sınıfının onCreate öğesinde arayın:

public static void catchGoogleMapsException(final Context context)
{
  final Thread.UncaughtExceptionHandler defaultHandler =
    Thread.getDefaultUncaughtExceptionHandler();
  Thread.setDefaultUncaughtExceptionHandler(
    (@NonNull final Thread thread, @NonNull final Throwable ex) ->
    {
      if (thread.getName().contains("ZoomTableManager"))
      {
        new File(context.getFilesDir(), "ZoomTables.data").delete();
        Log.w("Maps Bug 154855417", "Caught exception and deleted ZoomTables.data");
      }
      else
        if (defaultHandler!=null)
          defaultHandler.uncaughtException(thread, ex);
        else
          throw new RuntimeException(
            "No default uncaught exception handler.", ex);
    });
}

Ben de benzer bir çözüm buldum. Uygulamamda Google'a alternatif eşleme kaynaklarına sahip olduğum için, varsayılan kaynağı Google olarak değiştirmem ve kullanıcıya ne yapıldığını açıklayan bir mesaj vermeyi değiştiriyorum. Umarım Google gelecekte benzer bir şey yapmayı başarırsa beni güvende tutacaktır. Ben orada olsa test geliştirmek için bekliyoruz.
Ifor

Bu sorunu çözmek için depolama alanını temizlemem gerekti. Hangi nedenle olursa olsun, ZoomTables.data dosyasını silmek bunu benim için çözmek için yeterli değildi. Silme işlemini başlangıç ​​etkinliğimde onCreate () yaptım. İstisna Handler uygulama kapsamına bakmalıyım sanırım.
ShellDude

3

Google Haritalar SDK'sının kilitlenmesinin temel nedeninin giderildiğine inanıyoruz. Düzeltme etkilenen uygulamalara yayılıyor ve beklenen hızda çözülmeye devam ediyor. Tam çözünürlüğün 2020-04-23 Perşembe günü ABD / Pasifik'te tamamlanması bekleniyor.

Üretken sürüm düzeltildi (google'ın tarafında), ancak emülatörünüzle ilgili hala sorun yaşıyorsanız, aşağıdaki kodu yalnızca bir kez çalıştırmanız gerekir.

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    fixGoogleMapBugTemp()   //TODO: Then clean this line

//  ...  

}

/**
 * Observation: Invoke this method only once
 */
private fun fixGoogleMapBugTemp() {
    val googleBug = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE)
    if (!googleBug.contains("fixed")) {
        val corruptedZoomTables = File(filesDir, "ZoomTables.data");
        corruptedZoomTables.delete();
        googleBug.edit().putBoolean("fixed", true).apply();
    }
}

Çözüm : Uygulama verilerini temizleyin (yalnızca önbellek değil).

Not : Sorunlu dosyanın , repro için herhangi birine ihtiyacı varsa cihazdaki uygulama paketlerinden bir kopyası.

Blok

Kaynak

GL


3

Herkes için tam ve resmi cevap:

Teşhis: Yüklenirken Google Haritalar Platformu mobil SDK'larının (iOS ve Android) çökmesi.

Çözüm: * Etkilenen uygulamanın verilerini (yalnızca önbellek değil) silin veya etkilenen uygulamaları kaldırın.

  • İOS için kod geçici çözümü:

Kod için önerilen yerleşim, uygulama (_: didFinishLaunchingWithOptions :) (Swift) veya application: didFinishLaunchingWithOptions: (Objective-C) yönteminde GMSServices başlatılmasından önce. özellikle:

Swift:

let key = "GoogleMapsServerControlledParamsKey_bug_154855417"
if !UserDefaults.standard.bool(forKey: key) {
    let urls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
    if urls.count > 0 {
        let paramUrl = urls[0].appendingPathComponent("com.google.GoogleMaps/ServerControlledParams", isDirectory: false)
        try? FileManager.default.removeItem(at: paramUrl)
    }
    UserDefaults.standard.set(true, forKey: key)
}

Objective-C:

NSString *key = @"GoogleMapsServerControlledParamsKey_bug_154855417";
BOOL keyExists = [[NSUserDefaults standardUserDefaults] boolForKey:key];
if (!keyExists) {
    NSArray<NSURL *> *array =
        [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory
                                               inDomains:NSUserDomainMask];
    if (array.count > 0) {
        NSURL *url =
            [array[0] URLByAppendingPathComponent:@"com.google.GoogleMaps/ServerControlledParams"
                                      isDirectory:NO];
        if (url) {
            [[NSFileManager defaultManager] removeItemAtURL:url error:NULL]);
        }
    }
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
}

Uygulamanızda dağıttıktan sonra, onayını hızlandırmamıza yardımcı olmak istiyorsanız bir Haritalar Destek vakası sunabilirsiniz. Lütfen uygulamanızın kimliğini, Paket Kimliğini ve davanızda incelenmesini istediğiniz sürümü eklediğinizden emin olun.

  • Android için kod geçici çözümü:

    Kod için önerilen yerleşim Application.onCreate () konumunda:

    Java

    try {
      SharedPreferences hasFixedGoogleBug154855417 = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE);
      if (!hasFixedGoogleBug154855417.contains("fixed")) {
        File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data");
        File corruptedSavedClientParameters = new File(getFilesDir(), "SavedClientParameters.data.cs");
        File corruptedClientParametersData =
            new File(
              getFilesDir(),
              "DATA_ServerControlledParametersManager.data.v1."
                  + getBaseContext().getPackageName());
        corruptedZoomTables.delete();
        corruptedSavedClientParameters.delete();
        corruptedClientParametersData.delete();
        hasFixedGoogleBug154855417.edit().putBoolean("fixed", true).apply();
      }
    } catch (Exception e) {
    
    }

    Kotlin

    try {
        val sharedPreferences = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE)
        if (!sharedPreferences.contains("fixed")) {
            val corruptedZoomTables = File(filesDir, "ZoomTables.data")
            val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs")
            val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}")
            corruptedZoomTables.delete()
            corruptedSavedClientParameters.delete()
            corruptedClientParametersData.delete()
            sharedPreferences.edit().putBoolean("fixed", true).apply()
        }
    } catch (exception: Exception) {
    
    }

Kaynak: https://issuetracker.google.com/issues/1548554


2

Bu Xamarin için çalışma kodudur. Xamarin.Essentials nuget paketini kurmanız gerekiyor.

if (!Preferences.Get("google_bug_fixed", false))
{
    var corruptedZoomTables = new File(FileSystem.AppDataDirectory, "ZoomTables.data");
    corruptedZoomTables.Delete();
    Preferences.Set("google_bug_fixed", true);
}

1
Son satır Tercihleri
okumamalıdır.SET

1
Haklısın. Düzelttim.
Jan Nepraš

1

Kilitlenmeyi önlemek için Android uygulamanızın onCreate öğesinde aşağıdaki yöntemi çağırmalısınız.

private fun clearCorruptedGMapsPreference() {
        try {
            val sharedPreferences = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE)
            if (!sharedPreferences.contains("fixed")) {
                val corruptedZoomTables = File(filesDir, "ZoomTables.data")
                val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs")
                val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.${packageName}")
                val corruptedClientParametersDataV1 = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}")
                corruptedZoomTables.delete()
                corruptedSavedClientParameters.delete()
                corruptedClientParametersData.delete()
                corruptedClientParametersDataV1.delete()
                sharedPreferences.edit().putBoolean("fixed", true).apply()
            }
        } catch (exception: Exception) {
            LogUtil.e(this@CourierApplication::class.java.name, "An error has happened. Error: ".plus(exception.cause?.message
                    ?: ""))
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.