AndroidRuntime:致命例外:androidmapsapi-ZoomTableManager


133

我的使用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)

原因是什么?


10
也许是Google地图问题
Eduardo Herzer

1
这是生产应用程序还是测试?
user961186

18
注意:请勿对此问题发布“我也”答案。仅回答问题的答案应作为答案发布。
Wai Wai Lee


2
@MidnightGuest如果您对此进行扩展,它可能是一个很好的问题。
Makyen

Answers:


83

编辑:以下是来自Google的官方解决方案(链接

摘要

Google Maps SDK线程使应用程序崩溃(ArrayIndexOutOfBoundsException)-提供的解决方案

描述

20204月23日美国太平洋标准时间11:30开始,Google对Maps移动组件的配置进行了4个小时的更新,触发了Android和iOS版Maps SDK崩溃。下载此版本配置的设备上的应用程序(在停机期间)很容易崩溃。针对Android和iOS的Maps SDK提供了解决方法。

Android版Maps SDK

适用于Android v2的Maps SDK(包含在Google Play服务中)

解决该崩溃的Google Play服务更新已发布到所有具有17.4.55及更高版本的Google Play设备。安装更新后,设备上的Google Play服务的版本号没有更改。开发人员或最终用户无需采取任何措施即可接收更新的Maps模块;但是,开发人员可以使用以下adb命令来验证模块是否存在于给定的设备中:

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

您应该看到Module Set ID: mapsModule Sets部分中列出的行。

Module Set ID: maps, Module Set Version: 2015120015120000

Android v2的Maps SDK的崩溃率已恢复正常。

到目前为止,如果尚未使用下面提到的客户端代码替代方法来更新应用程序,则无需采取进一步的措施。

如果您已经使用变通办法更新了您的应用程序,则可以在应用程序的后续更新中删除变通办法(但保持变通办法是安全的)。

适用于Android v2的Premium Plan Maps SDK或适用于Android v3 beta的Maps SDK(静态库)

如果您的应用使用适用于Android v2的Premium Plan Maps SDK或适用于Android v3 beta的Maps SDK(静态库),并且仍然发生崩溃,我们仍然强烈建议您通过应用更新来推出以下解决方法。由于您的应用程序正在加载静态版本的SDK,因此很容易受到某些设备上存储的错误数据的影响,因此只有对应用程序进行更新才能解决此问题。

Play商店审核批准

如果您更新了应用程序,但遇到Play商店审核批准延迟的情况,请提出带有应用程序包ID的支持案例:⁠ 联系支持团队。我们的支持团队将在内部升级您的请求并加快审批速度。

Google Play商店中的负面评论

由于崩溃,一些应用程序开发人员在Google Play商店中询问了最终用户留下的一星级评价。只有违反Google Play政策[1]的评论才能删除。您也可以在Play控制台[2]中标记侮辱性评论。由于负面评价,应用程序不会自动从Google Play商店中删除。还值得注意的是,您对应用的总体评价等级的计算偏向于最近的评价,这意味着您的评价将随着时间的推移恢复到事发前的水平。

[1]⁠ 在Play商店中的评分与评论

[2]⁠ 报告不当评论

iOS版Maps SDK

iOS的崩溃率已恢复正常。如果您的应用程序仍然发生崩溃,则需要使用此处传达的代码替代方法来更新和发布您的应用程序。

有关在Apple App Store中部署或加速应用程序的问题,请直接与Apple联系。


通过此更新,我们正在解决此问题。感谢大家的耐心配合。我们的团队正在对该事件进行深入的内部调查;我们将尽快发布分析结果(大约一周内)。同时,如果您有任何疑问或仍然遇到问题,请⁠ 提交支持案例

解决方法:

  • Android上的最终用户可以清除受影响的应用程序的数据(而不仅仅是缓存)。

  • iOS上的最终用户可以卸载然后重新安装受影响的应用程序。

  • App Developers可以应用以下代码变通办法,以便为其所有最终用户解决问题。

iOS的代码变通办法:

建议的代码放置位置是在application(_:didFinishLaunchingWithOptions :)(Swift)或application:didFinishLaunchingWithOptions:(Objective-C)方法中的GMSServices初始化之前。特别:

迅速:

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

目标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的代码变通方法:

推荐的代码放置在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) {

}

科特林

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

}

此处提供的解决方法涵盖了我们适用于Android的SDK的所有可用版本。为了进一步说明(如果您发布了较早版本的解决方法,但并未删除那么多文件):

  • 使用Maps Android SDK v2的应用程序只需删除一个文件:ZoomTables.data。
  • 使用Maps Android SDK v3 beta的应用程序只需删除一个文件,

    DATA_ServerControlledParametersManager.data.v1。+ getBaseContext()。getPackageName())或

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


1
我们的应用程序可以在模拟器上使用相同的代码运行,但不能在生产设备上运行。它在缩放时开始发生。重大
意外

1
错误是在Android上。
user961186

2
刚刚检查了许多使用Map的应用程序是否崩溃,包括Uber,Lyft等。GoogleMaps似乎对我有用,它必须指向另一个不同于公共API的API端点。
AlexVPerl

16
真正的罪过是,即使将maps调用封装在try / catch语句中,Google Maps仍会以某种方式取代您的try调用并使应用程序崩溃而不是引发错误。当地图不可用时,地图应抛出适当的异常,而不仅仅是崩溃。
Brettins

2
在巴基斯坦的同样问题
Syed Raza Mehdi

44

似乎在每个应用程序中Google Map都会创建ZoomTables.data文件。

在此处输入图片说明

该文件格式不正确,格式不正确,可以从comment下载。要重现此问题,请从设备上的应用程序包中删除ZoomTables.data,然后插入格式错误的文件。该应用程序应该崩溃。

目前,该问题已在Google方面解决,但应用程序仍包含该数据文件的缓存版本。要解决此问题,我们应该在应用程序上的应用程序onCreate方法上直接删除该文件。

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

  }
}

更新1

我已经根据最新的Google开发人员评论更新了解决方法:

此处提供的解决方法涵盖了我们适用于Android的SDK的所有可用版本。为了进一步说明(如果您发布了较早版本的解决方法,但并未删除那么多文件):

使用Maps Android SDK v2的应用程序只需删除一个文件:ZoomTables.data。使用Maps Android SDK v3 Beta的应用程序只需删除一个文件DATA_ServerControlledParametersManager.data.v1。+ getBaseContext()。getPackageName())或DATA_ServerControlledParametersManager.data。+ getBaseContext()。getPackageName())


2
不包括ZoomTables.data文件对我有用。非常感谢!每个人都应使用此标记为答案!
Eduardo Herzer

@ArthurAttout是的,我宁愿现在这样做并修复崩溃超过16小时的生产应用程序,而不是等待更多时间进行Google修复
Eduardo Herzer

@EduardoHerzer Google的预计到达时间为48小时,全面投入生产将需要48小时以上。(更新审阅时间+推出时间)
Muhammad Saqib

这对我有用!我只对Flutter应用程序做了些改动:var dir = await getApplicationSupportDirectory(); 文件损坏ZoomTables =新文件(dir.path +“ /ZoomTables.data”);
csk

为什么只删除一次ZoomTables.data?如果将来再次损坏该怎么办?
JanNepraš

11

这个解决方案对我有用

  1. 首先打开“应用信息”
  2. 选择“存储”
  3. 点击“清除数据”
  4. 再次打开应用程序,然后检查问题是否已解决。

    以下是仅用于帮助您的客户的建议。

  5. 给所有用户发送电子邮件给您带来不便,并向他们描述他们所面临的问题,并为他们提供上述解决问题的步骤。

  6. 如果您的应用程序具有推送通知服务,您还可以使用Firebase推送通知将推送通知发送给所有用户。

屏幕截图演示:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


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 Maps SDK崩溃-部分解决



6

上述解决方案的缺点:

  • 无论设备是否受崩溃影响,都会在每个设备上删除ZoomTables.data
  • 解决方法仅适用一次,是否确定此问题不再发生?

我的解决方案的缺点:

  • 首次执行地图时,受影响的设备地图上的活动为空。显示设备旋转或第二次执行图之后

我的解决方案捕获了Maps SDK引发的异常,请在Application类的onCreate中调用此方法:

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能够做类似的事情时,可以确保我的安全。我确实希望那里的测试会有所改善。
Ifor

我必须清除存储空间才能解决此问题。出于某种原因,删除ZoomTables.data不足以为我解决此问题。我在启动活动onCreate()中进行了删除。我想我应该研究应用程序范围的异常处理程序。
ShellDude

3

我们认为,已修复导致Google Maps 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();
    }
}

解决方法:清除应用程序数据(而不仅仅是缓存)。

注意:如果有人需要进行复制,请从设备上的应用程序包中复制有问题的文件

块

资源

GL


3

完整的官方答案:

诊断:加载时Google Maps Platform移动SDK(iOS和Android)崩溃。

解决方法:*清除受影响的应用程序的数据(而不仅仅是缓存),或者先卸载再重新安装受影响的应用程序。

  • iOS的代码变通办法:

建议的代码放置位置是在application(_:didFinishLaunchingWithOptions :)(Swift)或application:didFinishLaunchingWithOptions:(Objective-C)方法中的GMSServices初始化之前。特别:

迅速:

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

目标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];
}

将其部署到您的应用中后,如果您希望我们帮助加快审批速度,则可以提出Google Maps支持案例。请确保包括您的应用程序ID,捆绑ID和您要检查的版本。

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

    科特林

    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 nuget软件包。

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

1
最后一行不应该阅读Preferences.SET(.....
AndyM

1
你是对的。我修好了它。
JanNepraš

1

您应该在Android应用程序的onCreate上调用follow方法,以避免崩溃。

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
                    ?: ""))
        }
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.