Android Kotlin Hilt报错:Activity无无参构造函数,如何解决?
解决Hilt多模块应用中MainActivity无参构造函数崩溃问题
问题根源
崩溃日志明确指出:
java.lang.InstantiationException: java.lang.Class<com.myApp.myApp.activities.main.MainActivity> has no zero argument constructor
Android系统要求Activity必须通过无参构造函数实例化,当前MainActivity使用带参数的构造函数注入,导致系统无法直接创建实例;同时Hilt的代理类未正确生成或生效,无法完成依赖注入的代理逻辑。
具体解决步骤
1. 修改MainActivity的注入方式
将构造函数注入改为字段注入,确保Activity拥有默认无参构造(Kotlin中未显式定义构造时自动生成),让Hilt在Activity生命周期内完成依赖注入:
@AndroidEntryPoint class MainActivity : FragmentActivity(), IActionListeners, IImageListeners, OnListFragmentInteractionListener { @Inject lateinit var awLocale: AWLocale @Inject lateinit var awUtils: AWUtils @Inject lateinit var awDate: AWDate @Inject lateinit var awPreferences: AWPreferences // 使用Hilt支持的ViewModel获取方式 private val mainViewModel: MainViewModel by viewModels() // ... 原有业务代码 }
2. 补全Hilt依赖配置
确保模块级build.gradle中添加ViewModel的Hilt支持依赖:
dependencies { // 已有的Hilt依赖 implementation 'com.google.dagger:hilt-android:2.42' kapt 'com.google.dagger:hilt-android-compiler:2.42' kapt 'androidx.hilt:hilt-compiler:1.0.0' // 补充ViewModel的Hilt依赖 implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0' }
3. 确认Application配置
检查AndroidManifest.xml,确保指定了带有@HiltAndroidApp注解的Application类:
<application android:name=".AWApplication" <!-- 其他属性 --> > <!-- Activity等组件配置 --> </application>
4. 清理重建项目
注解处理器生成的代码可能存在缓存问题,执行以下操作:
- Android Studio中点击
Build->Clean Project - 再点击
Build->Rebuild Project - 或使用命令行:
./gradlew clean assembleDebug
5. 多模块依赖检查
如果Dependencies模块位于:Core等子模块中,确保:
- 子模块已应用
kotlin-kapt插件 - 主应用模块正确依赖子模块
- 子模块的Hilt模块(如
@Module类)的@InstallIn注解范围正确(当前SingletonComponent::class是全局单例,符合需求)
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

