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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:33:06