AndroidRuntime:致命例外:androidmapsapi-ZoomTableManager
Posted
技术标签:
【中文标题】AndroidRuntime:致命例外:androidmapsapi-ZoomTableManager【英文标题】:AndroidRuntime: FATAL EXCEPTION: androidmapsapi-ZoomTableManager 【发布时间】:2020-08-07 07:56:47 【问题描述】:我使用 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)
是什么原因?
【问题讨论】:
可能是谷歌地图问题 这是一个生产应用还是只是一个测试? 注意:不要发布“我也是”这个问题的答案。只有回答问题的答案才应该作为答案发布。 更新将在这里:issuetracker.google.com/issues/154855417 @MidnightGuest 如果您对此进行扩展,这可能是一个很好的问题。 【参考方案1】:编辑:以下是 Google 的官方解决方案 (link)
总结
Google Maps SDK 线程崩溃应用程序 (ArrayIndexOutOfBoundsException) - 提供的解决方案
说明
2020 年 4 月 23 日太平洋夏令时间 11:30 开始,Google 为地图移动组件的配置提供了 4 小时的更新服务,导致 Android 和 ios 版地图 SDK 崩溃。下载此版本配置的设备上的应用程序(在中断期间)容易受到崩溃的影响。为 Android 和 iOS 的 Maps SDK 提供了解决方案。
Android 版地图 SDK
Maps SDK for Android v2(包含在 Google Play 服务中)
用于修复崩溃的 Google Play 服务更新已发布到所有具有 Google Play 服务版本 17.4.55 及更高版本的设备。安装更新后,设备上的 Google Play 服务版本号没有变化。开发人员或最终用户无需执行任何操作即可接收更新的地图模块;但是,开发人员可以使用以下 adb 命令验证该模块是否存在于给定设备上:
adb shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider
您应该会在Module Sets
部分看到Module Set ID: maps
行。
Module Set ID: maps, Module Set Version: 2015120015120000
Maps SDK for Android v2 的崩溃率已恢复正常。
截至目前,如果您尚未使用下面提到的客户端代码解决方法更新您的应用,则无需采取进一步措施。
如果您已经使用变通方法更新了您的应用,您可以在应用的后续更新中删除该变通方法(但保持变通方法是安全的)。
Premium Plan Maps SDK for Android v2 或 Maps SDK for Android v3 beta(静态库)
如果您的应用使用 Premium Plan Maps SDK for Android v2 或 Maps SDK for Android v3 beta(静态库),并且仍然遇到崩溃,我们仍然强烈建议您通过更新应用来推出以下解决方法.由于您的应用程序正在加载一个静态版本的 SDK,该版本容易受到存储在某些设备上的不良数据的影响,因此只有对您的应用程序进行更新才能解决问题。
Play 商店审核批准
如果您更新应用但遇到 Play 商店审核批准延迟,请使用您的应用包 ID 提交支持案例:Contact the support team。我们的支持团队将在内部上报您的请求并加快审批。
Google Play 商店中的负面评论
一些应用程序开发人员询问最终用户因崩溃而在 Google Play 商店中留下的 1 星评价。只有违反 Google Play 政策 [1] 的 cmets 才能被移除。您还可以在 Play 管理中心 [ 2 ] 中标记滥用评论。由于负面评论,应用程序不会自动从 Google Play 商店中删除。还值得注意的是,您的整体应用评论评分的计算有利于最近的评论,这意味着您的评分将随着时间的推移恢复到事件前的水平。
[1]Ratings & Review on the Play Store
[ 2 ] Report inappropriate reviews
iOS 版地图 SDK
iOS 上的崩溃率已恢复正常。如果您的应用程序仍然遇到崩溃,您需要使用此处传达的代码解决方法更新和发布您的应用程序。
有关在 Apple App Store 中部署或加速您的应用程序的问题,请直接与 Apple 联系。
通过此更新,我们将关闭此问题。感谢大家的耐心等待。我们的团队正在对此事件进行深入的内部调查;我们将尽快发布我们的分析(大约一周后)。同时,如果您有任何问题,或仍有问题,请file a support case。
解决方法:
Android 上的最终用户可以清除受影响应用的数据(不仅仅是 缓存)。
iOS 上的最终用户可以卸载然后重新安装受影响的应用程序。
应用开发者可以应用以下代码变通方法来解决 所有最终用户的问题。
适用于 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() 中:
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)
科特林
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())
【讨论】:
我们的应用程序可以在模拟器上运行,代码相同,但不能在生产设备上运行。它在缩放时开始发生。致命异常:androidmapsapi-ZoomTableManager 好吧,谷歌的地图应用可以在安卓上运行,目前在 iOS 上不可用。 刚刚检查了许多使用 Map 的应用程序都崩溃了,包括 Uber、Lyft 等。谷歌地图似乎对我有用,它必须指向另一个不同于公共 API 的 API 端点。 这里真正的罪行是,即使地图调用被封装在 try / catch 语句中,Google 地图也会以某种方式取代您的 try 调用并使应用程序崩溃而不是引发错误。地图不可用时应该抛出适当的异常,而不是让一切崩溃。 巴基斯坦也有同样的问题【参考方案2】:Google Map 似乎在每个应用程序中都会创建 ZoomTables.data 文件。
这个文件是畸形的,它的畸形版本可以从comment下载。 要重现此问题,请从设备上的应用程序包中删除 ZoomTables.data 并插入格式错误的文件。应用程序应该崩溃。
目前,该问题已在 google 方面得到解决,但应用程序仍包含该数据文件的缓存版本。 要解决这个问题,我们应该在应用程序启动时在 Application 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
我已经更新了解决方法,基于最新的谷歌开发者comment:
此处提供的解决方法涵盖了我们适用于 Android 的 SDK 的所有可用风格和版本。进一步澄清(如果您发布了未删除尽可能多文件的解决方法的早期版本):
使用 Maps Android SDK v2 的应用程序只需删除一个文件:ZoomTables.data。 使用 Maps Android SDK v3 beta 的应用程序只需删除一个文件,即 DATA_ServerControlledParametersManager.data.v1。 + getBaseContext().getPackageName()) 或 DATA_ServerControlledParametersManager.data。 + getBaseContext().getPackageName())
【讨论】:
排除 ZoomTables.data 文件对我有用。非常感谢!每个人都应该使用它并标记为答案! @ArthurAttout 是的,我宁愿现在这样做并修复崩溃超过 16 小时的生产应用程序,而不是等待更多时间等待 Google 修复 @EduardoHerzer Google 的预计到达时间为 48 小时,而全面推出生产需要 48 小时以上。 (更新审核时间+推出时间) 这对我有用!我只对我的 Flutter 应用做了一点改动: var dir = await getApplicationSupportDirectory();文件损坏ZoomTables = new File(dir.path + "/ZoomTables.data"); 为什么我们只删除一次 ZoomTables.data?如果这在未来再次被破坏怎么办?【参考方案3】:这个解决方案对我有用
首先打开“应用信息”
选择“存储”
点击“清除数据”
再次打开应用并检查问题是否已解决。
以下建议只是为了帮助您的客户。
向您的所有用户发送一封电子邮件以表示不便,并向他们描述他们面临的问题,并为他们提供上述步骤来解决他们的问题。
如果您的应用具有推送通知服务,您还可以使用 Firebase 推送通知向所有用户发送推送通知。
截图演示:
【讨论】:
OP 正试图了解导致此问题的原因,以便他们可以永久解决此问题,而不是在下一次发生之前通过自己的手机解决问题。从设备中删除状态会破坏调试此问题所需的数据。【参考方案4】:上述解决方案的缺点:
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 将来能做类似的事情,它会保护我的安全。不过,我确实希望那里的测试有所改善。 我必须清除存储空间才能解决此问题。无论出于何种原因,删除 ZoomTables.data 都不足以为我解决这个问题。我在我的启动活动 onCreate() 中进行了删除。我想我应该研究一下应用程序范围的异常处理程序。【参考方案5】:对于 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 is crashing -- partially resolved
【讨论】:
请参考issuetracker.google.com/154855417#comment421【参考方案6】:为 iOS 和 Android 提供的解决方案:
https://issuetracker.google.com/issues/154855417#comment509
Maps SDK for Android v2(包含在 Google Play 服务中)
用于修复崩溃的 Google Play 服务更新已发布到所有具有 Google Play 服务版本 17.4.55 及更高版本的设备。安装更新后,设备上的 Google Play 服务版本号没有变化。开发人员或最终用户无需执行任何操作即可接收更新的地图模块;但是,开发人员可以使用以下 adb 命令验证该模块是否存在于给定设备上:
adb shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider
您应该会在Module Sets
部分看到Module Set ID: maps
行。
Module Set ID: maps, Module Set Version: 2015120015120000
Maps SDK for Android v2 的崩溃率已恢复正常。
到目前为止,如果您尚未使用客户端代码更新您的应用 下文提到的解决方法,您无需采取进一步措施。
如果您已经使用变通方法更新了您的应用,您可以 在您的应用程序的后续更新中删除解决方法(但保留 解决方法是安全的)。
Android 代码解决方法:
生产版本已修复(在 google 方面),但如果您的模拟器仍有问题,您只需运行以下代码一次。
建议的代码放置在 Application.onCreate() 中:
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();
解决方法:清除应用程序数据(不仅仅是缓存)。
注意:如果有人需要复制,请从设备上的应用程序包中复制problematic file。
Source
GL
【讨论】:
【参考方案7】:完整的官方答案:
诊断: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];
在您的应用中部署它后,如果您希望我们帮助加快批准,您可以提交地图支持案例。请确保在您的案例中包含您的应用程序 ID、Bundle ID 和您要审核的版本。
Android 代码解决方法:
推荐的代码放置在 Application.onCreate() 中:
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)
科特林
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
【讨论】:
【参考方案8】:您应该在 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
?: ""))
【讨论】:
【参考方案9】:这是 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);
【讨论】:
【参考方案10】:建议的解决方法只能使用一次:
我建议向您的应用发送有关 Google Map Zoom Data Corrupted 的静默推送通知,或进行 API 调用以检查 Google Map Zoom Data 的状态。如果您每次都认为这是不必要的服务器调用,您可以使用推送通知来触发此逻辑,或者与您检查服务器状态的现有调用之一集成。将此留给您的应用特定逻辑。这样做,如果 Google 地图再次引发此错误,您可以重新触发您的解决方法。
如果服务器调用,这将为您的所有用户重置 ZoomData。 如果是推送通知,您可以向部分用户发送通知。
fun receivedPushNotificationZoomDataCorrupted()
try
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()
catch (exception: Exception)
【讨论】:
以上是关于AndroidRuntime:致命例外:androidmapsapi-ZoomTableManager的主要内容,如果未能解决你的问题,请参考以下文章
AndroidRuntime:致命异常:AsyncTask #1 进程
错误不断崩溃 E/AndroidRuntime:致命异常:主要 [重复]
E/AndroidRuntime:致命异常:Android 的 AsyncTask #1 错误
E / AndroidRuntime:致命异常:主PID:4435