AndroidRuntime: घातक अपवाद: androidmapsapi-ZoomTableManager


133

Google मानचित्र 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 बीटा 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)

कारण क्या है?


10
शायद यह गूगल मैप्स की समस्या है
एडुआर्डो हर्जर

1
क्या यह उत्पादन ऐप है या सिर्फ एक परीक्षण है?
user961186

18
नोट: इस प्रश्न के उत्तर "मुझे भी" न दें। सवाल का जवाब देने वाले केवल उत्तर के रूप में पोस्ट किए जाने चाहिए।
वाई हा ली

3
अपडेट यहां होंगे: जारीकर्ता
lewkka

2
@MidnightGuest यदि आप उस पर थोड़ा विस्तार करते हैं, तो यह एक अच्छा प्रश्न बना सकता है।
मकेन

जवाबों:


83

संपादित करें : Google से आधिकारिक समाधान निम्नलिखित है ( लिंक )

सारांश

Google मैप्स SDK थ्रेड क्रैश ऐप (ArrayIndexOutOfBoundsException) - समाधान की पेशकश की

विवरण

पर 23 अप्रैल 2020 11:30 पीडीटी से शुरू , गूगल 4 घंटे एक मैप्स मोबाइल घटक के विन्यास के लिए एक अद्यतन के लिए कार्य किया, Android और iOS के लिए मानचित्र SDK में दुर्घटनाओं ट्रिगर। कॉन्फ़िगरेशन के इस संस्करण को डाउनलोड करने वाले उपकरणों पर (आउटेज अवधि के दौरान) क्रैश के लिए असुरक्षित थे। एंड्रॉइड और आईओएस के लिए मैप्स एसडीके के लिए समाधान समाधान पेश किए गए हैं।

Android के लिए मैप्स एसडीके

Android v2 के लिए मैप्स एसडीके (Google Play सेवाओं में शामिल)

क्रैश को ठीक करने के लिए Google Play Services के अपडेट Google Play Services संस्करण 17.4.55 और नए के साथ सभी उपकरणों पर प्रकाशित किए गए हैं। अद्यतन स्थापित होने के बाद डिवाइस पर Google Play Services की संस्करण संख्या में कोई परिवर्तन नहीं हुआ है। अपडेट किए गए मैप्स मॉड्यूल को प्राप्त करने के लिए डेवलपर्स या अंतिम उपयोगकर्ताओं से कोई कार्रवाई की आवश्यकता नहीं है; हालाँकि, डेवलपर्स यह सत्यापित कर सकते हैं कि मॉड्यूल दिए गए adb कमांड के साथ दिए गए डिवाइस पर मौजूद है:

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

आपको अनुभाग Module Set ID: mapsमें सूचीबद्ध रेखा देखनी चाहिए Module Sets

Module Set ID: maps, Module Set Version: 2015120015120000

एंड्रॉइड v2 के लिए मैप्स एसडीके की क्रैश दरें वापस सामान्य हैं।

अब तक, यदि आपने नीचे दिए गए क्लाइंट-साइड कोड वर्कअराउंड के साथ अपने ऐप को अपडेट नहीं किया है, तो आपको आगे की कार्रवाई करने की आवश्यकता नहीं है।

यदि आपने पहले ही अपने ऐप को वर्कअराउंड के साथ अपडेट कर दिया है, तो आप अपने ऐप के बाद के अपडेट में वर्कअराउंड को हटा सकते हैं (लेकिन वर्कअराउंड को सुरक्षित रखना)।

एंड्रॉइड v2 के लिए प्रीमियम प्लान मैप्स एसडीके या एंड्रॉइड v3 बीटा के लिए मैप्स एसडीके (स्टेटिक लाइब्रेरी)

यदि आपका ऐप एंड्रॉइड v2 के लिए प्रीमियम प्लान मैप्स एसडीके या एंड्रॉइड v3 बीटा (स्टैटिक लाइब्रेरी) के लिए मैप्स एसडीके का उपयोग करता है, और अभी भी क्रैश का सामना कर रहा है, तो हम अभी भी आपको अपने ऐप के अपडेट के माध्यम से नीचे दिए गए वर्कअराउंड को रोल आउट करने की सलाह देते हैं। जैसा कि आपका एप्लिकेशन SDK का एक स्थैतिक संस्करण लोड कर रहा है जो कुछ उपकरणों पर संग्रहीत किए जा रहे खराब डेटा के लिए असुरक्षित है, केवल आपके एप्लिकेशन के अपडेट से समस्या का समाधान हो सकता है।

Play Store समीक्षा अनुमोदन

यदि आप अपने ऐप को अपडेट करते हैं, लेकिन Play Store की समीक्षा में देरी का अनुभव करते हैं, तो कृपया अपने ऐप के पैकेज आईडी के साथ एक समर्थन मामला दर्ज करें: but सपोर्ट टीम से संपर्क करें । हमारी सहायता टीम आपके अनुरोध को आंतरिक रूप से बढ़ाएगी और अनुमोदन में तेजी लाएगी।

Google Play Store में नकारात्मक समीक्षाएं

कुछ एप्लिकेशन डेवलपर्स ने क्रैश के कारण एंड-यूज़र द्वारा छोड़े गए Google Play Store में 1-स्टार समीक्षाओं के बारे में पूछताछ की। Google Play की नीति [1] का उल्लंघन करने वाली टिप्पणियों को हटाया जा सकता है। आप Play Console [2] में अपमानजनक समीक्षाओं को भी चिह्नित कर सकते हैं। नकारात्मक समीक्षाओं के कारण Google Play स्टोर से एप्लिकेशन स्वचालित रूप से हटाए नहीं जाएंगे। यह भी ध्यान देने योग्य है कि आपकी समग्र ऐप समीक्षा रेटिंग की गणना हाल की समीक्षाओं का पक्ष लेती है, जिसका अर्थ है कि आपकी रेटिंग समय के साथ पूर्व-घटना के स्तर तक ठीक हो जाएगी।

[१]] प्ले स्टोर पर रेटिंग और समीक्षा

[२] ⁠ अनुचित समीक्षा की रिपोर्ट करें

आईओएस के लिए मैप्स एसडीके

IOS पर क्रैश रेट वापस सामान्य हो गए हैं। यदि आपका एप्लिकेशन अभी भी क्रैश का सामना कर रहा है, तो आपको अपने ऐप को यहां संचारित कोड वर्कअराउंड के साथ अपडेट और प्रकाशित करने की आवश्यकता है।

ऐप्पल ऐप स्टोर में अपने एप्लिकेशन को तैनात करने या उसमें तेजी लाने के बारे में प्रश्नों के लिए, कृपया सीधे ऐप्पल से संपर्क करें।


इस अद्यतन के साथ, हम इस समस्या को बंद कर रहे हैं। आपके धैर्य के लिए सभी को धन्यवाद। हमारी टीम इस घटना की आंतरिक जांच कर रही है; जितनी जल्दी हो सके, हम अपने विश्लेषण (लगभग एक सप्ताह में) प्रकाशित करेंगे। इस बीच, यदि आपके कोई प्रश्न हैं, या अभी भी समस्याओं का सामना कर रहे हैं, तो कृपया । एक समर्थन मामला दर्ज करें

समाधान:

  • एंड्रॉइड पर अंतिम उपयोगकर्ता प्रभावित ऐप के डेटा (न केवल कैश) को साफ़ कर सकते हैं।

  • IOS पर अंतिम उपयोगकर्ता अनइंस्टॉल कर सकते हैं तो प्रभावित ऐप को पुनः इंस्टॉल करें।

  • एप्लिकेशन डेवलपर अपने सभी अंतिम उपयोगकर्ताओं के लिए समस्या को हल करने के लिए नीचे दिए गए कोड वर्कअराउंड को लागू कर सकते हैं।

IOS के लिए कोड वर्कअराउंड:

कोड के लिए अनुशंसित प्लेसमेंट आवेदन में GMSServices के आरंभीकरण से पहले है (_: didFinishLaunchingWithOptions :) (स्विफ्ट) या एप्लिकेशन: didFinishLaunchingWithOptions: (ऑब्जेक्टिव-सी) विधि। विशेष रूप से:

स्विफ्ट:

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)
}

उद्देश्य सी:

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 के लिए कोड वर्कअराउंड:

कोड के लिए अनुशंसित प्लेसमेंट Application.onCreate () में है:

जावा

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) {

}

यहाँ उपलब्ध कराए गए वर्कअराउंड एंड्रॉइड के लिए हमारे एसडीके के सभी उपलब्ध फ्लेवर और संस्करणों को कवर करते हैं। आगे स्पष्ट करने के लिए (यदि आपने वर्कअराउंड का एक पुराना संस्करण जारी किया है जो कई फ़ाइलों को नहीं हटाता है):

  • मैप्स एंड्रॉइड एसडीके v2 का उपयोग करने वाले एप्लिकेशन को केवल एक फ़ाइल को हटाने की आवश्यकता होनी चाहिए: ZoomTables.data।
  • मैप्स एंड्रॉइड एसडीके वी 3 बीटा का उपयोग करने वाले अनुप्रयोगों को केवल एक फ़ाइल को हटाने की आवश्यकता होनी चाहिए

    DATA_ServerControlledParametersManager.data.v1। + getBaseContext ()। getPackageName ()) या

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


1
हमारा ऐप एमुलेटर, समान कोड पर काम करता है, लेकिन प्रोडक्शन डिवाइस पर नहीं। झूमते हुए ऐसा होने लगा। FATAL EXCEPTION: androidmapsapi-ZoomTableManager
user961186

1
त्रुटि Android पर है।
user961186

2
बस चेक किए गए कई ऐप मैप का उपयोग कर क्रैश कर रहे हैं, जिसमें उबेर, लिफ़्ट, आदि शामिल हैं। Google मैप्स मेरे लिए काम करते हैं, यह सार्वजनिक एपीआई से अलग एक और एपीआई एंडपॉइंट की ओर इशारा करना चाहिए।
एलेक्सविरल

16
यहाँ वास्तविक अपराध यह है कि जब मैप्स कॉल एक कोशिश / कैच स्टेटमेंट में एनकैप्सुलेटेड होता है, तब भी किसी तरह गूगल मैप्स आपके ट्रायल कॉल को सुपरचार्ज कर देता है और एरर को फेंकने के बजाय ऐप को क्रैश कर देता है। जब यह उपलब्ध न हो तो मानचित्रों को एक उचित अपवाद को फेंक देना चाहिए, न कि केवल सब कुछ दुर्घटनाग्रस्त कर देना चाहिए।
ब्रेटिन

2
पाकिस्तान में भी यही समस्या है
सैयद रज़ा मेहदी

44

हर ऐप में लगता है कि Google Map ZoomTables.data फ़ाइल बनाता है।

यहाँ छवि विवरण दर्ज करें

यह फ़ाइल विकृत, विकृत संस्करण थी जिसे टिप्पणी से डाउनलोड किया जा सकता था । समस्या को पुन: उत्पन्न करने के लिए डिवाइस पर ऐप पैकेज से ZoomTables.data निकालें और एक विकृत डालें। ऐप को क्रैश होना चाहिए।

वर्तमान में, समस्या को Google की ओर से हल किया गया था, लेकिन ऐप्स में अभी भी उस डेटा फ़ाइल का कैश्ड संस्करण है। समस्या को ठीक करने के लिए, हमें एप्लिकेशन ऑनक्रिट विधि में एप्लिकेशन प्रारंभ पर उस फ़ाइल को ठीक से हटा देना चाहिए।

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) {

  }
}

अपडेट १

मैंने नवीनतम Google डेवलपर टिप्पणी के आधार पर वर्कअराउंड अपडेट किया है :

यहाँ उपलब्ध कराए गए वर्कअराउंड एंड्रॉइड के लिए हमारे एसडीके के सभी उपलब्ध फ्लेवर और संस्करणों को कवर करते हैं। आगे स्पष्ट करने के लिए (यदि आपने वर्कअराउंड का एक पुराना संस्करण जारी किया है जो कई फ़ाइलों को नहीं हटाता है):

मैप्स एंड्रॉइड एसडीके v2 का उपयोग करने वाले एप्लिकेशन को केवल एक फ़ाइल को हटाने की आवश्यकता होनी चाहिए: ZoomTables.data। मैप्स एंड्रॉइड एसडीके v3 बीटा का उपयोग करने वाले अनुप्रयोगों को केवल एक फ़ाइल को हटाने की आवश्यकता है, या तो DATA_ServerControlledParametersManager.data.v1। + getBaseContext ()। getPackageName ()) या DATA_ServerControlledParametersManager.data। + getBaseContext ()। getPackageName ())


2
ZoomTables.data फ़ाइल को छोड़कर मेरे लिए काम किया। आपका बहुत बहुत धन्यवाद! सभी को इसका उपयोग करना चाहिए और उत्तर के रूप में चिह्नित करना चाहिए!
एडुआर्डो हर्जर

@AththurAttout हां, मैं अभी के लिए ऐसा करता हूं और अपने प्रोडक्शन एप्स को ठीक करता हूं जो कि 16 घंटे से ज्यादा समय के लिए दुर्घटनाग्रस्त हो जाते हैं, गूगल के फिक्स होने के लिए ज्यादा समय इंतजार करने से
एडुआर्डो हर्जर

@EduardoHerzer Google का ETA 48 घंटे का है और उत्पादन पूर्ण रोल आउट में 48 घंटे से अधिक समय लगेगा। (अपडेट रिव्यू टाइम + रोल आउट टाइम)
मुहम्मद साकिब

यह मेरे लिए काम किया! मैंने केवल अपने फ़्लटर ऐप के लिए थोड़ा बदलाव किया: var dir = getit getApplicationSupportDirectory (); फ़ाइल करप्टेडZoomTables = नई फ़ाइल (dir.path + "/ZTTables.data");
csk

हम सिर्फ एक बार ZoomTables.data को क्यों निकालते हैं? क्या होगा अगर यह भविष्य में फिर से दूषित हो जाए?
जनवरी नेप्रास

11

इस समाधान ने मेरे लिए काम किया

  1. सबसे पहले "App Info" खोलें
  2. "संग्रहण" चुनें
  3. "डेटा साफ़ करें" पर क्लिक करें
  4. फिर से ऐप खोलें और जांच लें कि क्या समस्या ठीक हो गई है।

    नीचे अपने ग्राहकों की मदद करने के लिए सुझाव दिए गए हैं।

  5. असुविधा के लिए अपने सभी उपयोगकर्ताओं को एक ईमेल भेजें और उनके द्वारा बताई गई समस्या का वर्णन करें और उनके मुद्दे को हल करने के लिए उपर्युक्त चरणों में दें।

  6. यदि आपके ऐप में पुश नोटिफिकेशन सेवा है, तो आप अपने सभी उपयोगकर्ताओं को फायरबेस पुश नोटिफिकेशन के साथ पुश नोटिफिकेशन भी भेज सकते हैं।

स्क्रीनशॉट प्रदर्शन:

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें


6

Android के लिए, कई डेवलपर्स ने अपने अनुप्रयोग से सीधे ZoomTable.data फ़ाइल को हटाने के लिए वर्कअराउंड का उल्लेख किया। समीक्षा के बाद, यह फिक्स सुरक्षित लगता है, और आप इसे अपने आवेदन में आज़मा सकते हैं।

देखें https://issuetracker.google.com/154855417#comment179

यदि आप चाहते हैं कि आपके उपयोगकर्ता आपके ऐप को फिर से इंस्टॉल किए बिना उपयोग करना जारी रखें, तो आपकी सुविधा के लिए नमूना कोड यहां कॉपी-पेस्ट किया गया है। में 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();
}

संदर्भ: Google मैप्स SDK क्रैश हो रहा है - आंशिक रूप से हल किया गया है



6

उपरोक्त समाधान की कमियां:

  • ZoomTables.data को हर डिवाइस पर हटा दिया जाता है, भले ही डिवाइस क्रैश से प्रभावित हो या नहीं
  • वर्कअराउंड केवल एक बार काम करता है, क्या यह सुनिश्चित है कि यह समस्या फिर कभी नहीं होती है?

मेरे समाधान की कमियां:

  • प्रभावित उपकरण मानचित्र पर मानचित्र गतिविधि के पहले निष्पादन पर रिक्त है। डिवाइस के रोटेशन के बाद या दूसरा निष्पादन मानचित्र ऊपर दिखाया गया है

मेरा समाधान मैप्स एसडीके द्वारा फेंके गए अपवाद को पकड़ता है, इसे एप्लिकेशन क्लास के ऑनक्रिट में कॉल करें:

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);
    });
}

मैंने अभी एक समान वर्कअराउंड को धकेला है। जैसा कि मेरे ऐप में Google के लिए वैकल्पिक मैपिंग स्रोत हैं, मैं डिफ़ॉल्ट स्रोत को Google के रूप में नहीं बदलने के साथ-साथ उपयोगकर्ता को यह बताने का संदेश देता हूं कि क्या किया गया है। उम्मीद है कि यह मुझे सुरक्षित रखेगा अगर Google भविष्य में ऐसा ही कुछ करने का प्रबंधन करे। मैं उम्मीद करता हूं कि हालांकि सुधार के लिए परीक्षण हो सकता है।
इफोर

मुझे इस समस्या को हल करने के लिए भंडारण को साफ़ करना पड़ा। जो भी कारण के लिए, ZoomTables.data को हटाना मेरे लिए इसे हल करने के लिए पर्याप्त नहीं था। मैंने अपनी स्टार्टअप गतिविधि को डिलीट ऑन क्रिएट () में किया था। मुझे लगता है कि मुझे आवेदन क्षेत्र अपवाद हैंडलर में देखना चाहिए।
शेलडूड

3

हमारा मानना ​​है कि Google मैप्स SDK के क्रैश का मूल कारण तय किया गया है। फिक्स को प्रभावित अनुप्रयोगों में प्रचारित किया जा रहा है और यह अपेक्षित गति से संकल्प की ओर जारी है। पूर्ण संकल्प गुरुवार, 2020-04-23 19:45 यूएस / प्रशांत तक पूरा होने की उम्मीद है।

उत्पादक संस्करण तय किया गया था (Google की ओर) लेकिन अगर आपको अभी भी अपने एमुलेटर के साथ समस्या है तो आपको केवल एक बार निम्नलिखित कोड चलाना होगा।

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();
    }
}

वैकल्पिक हल : एप्लिकेशन डेटा साफ़ करें (केवल कैश नहीं)।

नोट : यदि किसी को रेप्रो की जरूरत है तो डिवाइस पर ऐप पैकेज से समस्याग्रस्त फ़ाइल की एक प्रति ।

खंड मैथा

स्रोत

जीएल


3

सभी के लिए पूर्ण और आधिकारिक उत्तर:

निदान: Google मैप्स प्लेटफ़ॉर्म मोबाइल SDK (iOS और Android) का क्रैश लोड पर।

वर्कअराउंड: * प्रभावित ऐप के डेटा (न केवल कैश) को साफ़ करें, या फिर प्रभावित ऐप को अनइंस्टॉल करें।

  • IOS के लिए कोड वर्कअराउंड:

कोड के लिए अनुशंसित प्लेसमेंट आवेदन में GMSServices के आरंभीकरण से पहले है (_: didFinishLaunchingWithOptions :) (स्विफ्ट) या एप्लिकेशन: didFinishLaunchingWithOptions: (ऑब्जेक्टिव-सी) विधि। विशेष रूप से:

स्विफ्ट:

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)
}

उद्देश्य सी:

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 के लिए कोड वर्कअराउंड:

    कोड के लिए अनुशंसित प्लेसमेंट Application.onCreate () में है:

    जावा

    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) {
    
    }

स्रोत: https://issuetracker.google.com/issues/1548554


2

यह Xamarin के लिए काम कर रहा कोड है। आपको Xamarin.Essentials नगेट पैकेज स्थापित करना होगा।

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

1
पिछली पंक्ति को प्राथमिकताएं नहीं पढ़नी चाहिए। सेट (.....
एंडीएम

1
तुम सही हो। मैंने ठीक कर दिया।
जनवरी नेप्रैस

1

क्रैश से बचने के लिए आपको अपने एंड्रॉइड ऐप के onCreate पर फॉलो का तरीका बताना चाहिए।

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
                    ?: ""))
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.