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

升级Hilt至1.1.0后,final自定义Activity编译失败求助

Hilt 1.1.0升级后因final Activity方法引发编译失败的解决办法

问题根因

Hilt 1.1.0版本在处理@AndroidEntryPoint注解的Activity时,生成的代理类会自动重写onCreate()和onDestroy()方法,用于集成Saved State Handle的相关逻辑。但如果你的自定义基类Activity(比如AppCompatCustomActivity)把这两个生命周期方法标记为final,就会触发编译报错——因为Java中final方法不允许被子类重写。

虽然Hilt的公开提交记录里没有明确标注这个变更,但这是版本升级中对Saved State支持的隐性调整,属于底层逻辑的必要改动。

解决办法

方案一:移除基类方法的final修饰符

这是最直接的解决方式,修改你的自定义基类Activity,去掉onCreate()和onDestroy()的final关键字:

// 原报错代码
public final void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 你的自定义逻辑
}

public final void onDestroy() {
    super.onDestroy();
    // 你的自定义逻辑
}

// 修改后代码
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 你的自定义逻辑
}

@Override
public void onDestroy() {
    super.onDestroy();
    // 你的自定义逻辑
}

Hilt生成的代理类会在重写的方法中调用super.onCreate()和super.onDestroy(),完全不会影响你原有业务逻辑的执行顺序。

方案二:绕过Hilt自动处理Saved State(临时 workaround)

如果因为架构限制无法修改基类的final方法,可以手动接管Hilt组件和Saved State的初始化:

  • 移除目标Activity上的@AndroidEntryPoint注解
  • 通过HiltAndroidApp的组件手动获取依赖,并自行初始化Saved State Handle
  • 注意:这种方式会丢失Hilt自动注入的便利性,仅作为临时过渡方案

验证步骤

执行项目的clean编译命令:

./gradlew clean build

确认编译错误消失后,测试Activity的生命周期流程,确保Saved State相关功能(比如状态恢复)正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:17:12