You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android低版本设备出现java.lang.ClassCastException崩溃求助

问题分析与解决方案

原因分析

这是Android 8.1(API 27)至Android 10(API 29)系统内置ArrayMap的内存复用逻辑bug导致的:

  • 该版本区间的ArrayMap会缓存已分配的数组对象以优化性能,但缓存复用逻辑存在漏洞——如果之前缓存的是String类型数组,后续代码尝试将其强制转为Object[]时就会抛出ClassCastException。
  • 近2个月未修改代码却突然出现崩溃,大概率是第三方SDK(如Google Ads、Google Analytics所属的GMS服务)的远程更新触发了这个系统bug,而非你的代码问题。

可行解决方案

1. 禁用ArrayMap全局缓存(最直接有效)

通过反射清空ArrayMap的全局缓存池,避免复用错误类型的数组。在自定义Application的onCreate()方法中添加以下代码:

import android.util.ArrayMap;
import android.os.Build;
import java.lang.reflect.Field;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 仅针对受影响的Android版本执行
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
            try {
                Field baseCacheField = ArrayMap.class.getDeclaredField("mBaseCache");
                baseCacheField.setAccessible(true);
                baseCacheField.set(null, null);

                Field twiceBaseCacheField = ArrayMap.class.getDeclaredField("mTwiceBaseCache");
                twiceBaseCacheField.setAccessible(true);
                twiceBaseCacheField.set(null, null);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

2. 升级第三方依赖

检查并升级项目中Google Play Services相关依赖到最新稳定版,例如:

  • 将com.google.android.gms:play-services-ads升级至最新版本
  • 将com.google.android.gms:play-services-analytics升级至最新版本
    Google可能已经在SDK中修复了触发该系统bug的逻辑。

3. 临时规避:限制SDK行为(可选)

如果升级依赖无法解决,可以尝试临时关闭部分第三方SDK的非核心功能(如非必要的广告或分析上报),但这仅作为临时应急方案,不推荐长期使用。

崩溃日志参考

Fatal Exception: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
   at android.util.ArrayMap.allocArrays(ArrayMap.java:174)
   at android.util.ArrayMap.put(ArrayMap.java:463)
   at android.os.BaseBundle.putString(BaseBundle.java:503)
   at com.google.android.gms.ads.internal.scionintegration.l.n(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.scionintegration.l.i(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.gmsg.ap.a(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.webview.r.x(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.webview.r.e(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.webview.an.run(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at m.bcf.a(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at com.google.android.gms.ads.internal.util.f.a(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at m.bcf.dispatchMessage(:com.google.android.gms.policy_ads_fdr_dynamite@24)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6121)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

内容的提问来源于stack exchange,提问作者dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:45:57