未启用Hilt的应用如何调用内部库中带@AndroidEntryPoint注解的自定义视图?
解决未启用Hilt的应用使用带@AndroidEntryPoint自定义视图的崩溃问题
问题根源
带@AndroidEntryPoint注解的自定义视图,Hilt会强制要求它必须依附在同样标注了@AndroidEntryPoint的Activity或Fragment上,但你的主应用未启用Hilt,自然触发这个非法状态异常。
可行解决方案
方案1:修改内部库的自定义视图代码(如果有权限的话)
- 直接移除自定义视图上的
@AndroidEntryPoint注解,把依赖注入逻辑改成手动实现:比如在视图的构造方法或初始化方法里,让外部传入所需依赖,或者用库内部独立的DI方案,别绑死Hilt。 - 如果视图必须依赖Hilt注入的实例,抽离注入逻辑,提供外部手动设置依赖的入口方法,让主应用可以自行提供所需对象。
方案2:主应用最小化启用Hilt(无法修改库代码时)
不需要全项目改造,只做基础配置就能让目标页面承载这个自定义视图:
- 给你的Application类加上
@HiltAndroidApp注解 - 在项目的模块级build.gradle里添加Hilt的插件和依赖,注意版本要和内部库使用的Hilt版本保持一致,避免版本冲突:
// 插件 id 'com.google.dagger.hilt.android' version '对应版本' apply false // 依赖 implementation "com.google.dagger:hilt-android:对应版本" kapt "com.google.dagger:hilt-compiler:对应版本" - 把要添加这个自定义视图的Activity或Fragment,加上
@AndroidEntryPoint注解 - 同步项目后,这个页面就能正常加载带
@AndroidEntryPoint的自定义视图,其他未配置Hilt的页面不受影响。
内容的提问来源于stack exchange,提问作者kartik srivastava
相关产品推荐
相关产品推荐

