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

迁移到AndroidX后启动Activity报RuntimeException崩溃如何解决?

问题根源

崩溃触发自你项目引入的老旧全局字体库uk.co.chrisjenx:calligraphy,该库已停止维护,最后版本发布于2017年,完全不兼容AndroidX体系下的新版AppCompat库。它通过反射获取AppCompat内部字段实现全局字体替换,迁移AndroidX后新版ActionBarOverlayLayout的内部字段结构发生变化,反射返回空值触发空指针,最终导致布局充气失败。

可行解决建议

  • 优先方案:替换为Android官方全局字体方案
    1. 在res目录下新建font文件夹,将你的自定义字体文件放入该目录
    2. 打开项目的主题配置文件,在App全局主题中添加以下配置:
      <item name="android:fontFamily">@font/你的字体文件名</item>
      <item name="fontFamily">@font/你的字体文件名</item>
      
    3. 移除项目中所有Calligraphy相关依赖、Application初始化代码、Activity的attachBaseContext包装逻辑即可。
  • 备选方案:替换为兼容AndroidX的Calligraphy分支版本
    1. 移除旧版Calligraphy依赖,替换为当前社区维护的兼容版本:
      implementation 'io.github.inflationx:calligraphy3:3.1.1'
      implementation 'io.github.inflationx:viewpump:2.0.3'
      
    2. 在Application的onCreate方法中初始化新的配置:
      ViewPump.init(ViewPump.builder()
          .addInterceptor(new CalligraphyInterceptor(
                  new CalligraphyConfig.Builder()
                          .setDefaultFontPath("你的字体路径")
                          .setFontAttrId(R.attr.fontPath)
                          .build()))
          .build());
      
    3. 在BaseActivity的attachBaseContext方法中,将原来的CalligraphyContextWrapper.wrap(context)替换为ViewPump.wrap(context)。
  • 临时验证方案
    可先注释掉所有Calligraphy相关的初始化和Context包装逻辑,运行项目确认崩溃消失后,再选择以上长期方案落地。

内容的提问来源于stack exchange,提问作者Kiran Rai Chamling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:27:02