升级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
相关产品推荐
相关产品推荐

