Android项目切换kapt后遇ClassNotFoundException及Hilt元数据版本错误求助
一、解决java.lang.ClassNotFoundException: com.example.myapp.MyApp及Hilt_MyApp找不到的问题
检查Manifest配置准确性
确认AndroidManifest.xml里的application节点android:name属性完全匹配自定义Application类的包名和类名,比如:<application android:name="com.example.myapp.MyApp" ...>注意避免大小写、拼写错误,比如包名写成
com.exmaple这类低级失误。验证Hilt依赖配置完整性
项目级build.gradle(根目录下)需包含Hilt插件:plugins { id 'com.google.dagger.hilt.android' version '2.44' apply false // 其他插件... }App模块的
build.gradle需添加:plugins { id 'kotlin-kapt' id 'dagger.hilt.android.plugin' // 其他插件... } dependencies { implementation "com.google.dagger:hilt-android:2.44" kapt "com.google.dagger:hilt-compiler:2.44" // 其他依赖... }确保插件和依赖的版本完全一致,不要混用不同版本。
清理缓存并重建项目
执行Build → Clean Project,然后Build → Rebuild Project;或者手动删除项目根目录和App模块下的build文件夹,重启Android Studio。很多时候是编译缓存导致生成的Hilt_MyApp类没被正确打包进APK。检查混淆规则(如果开启了混淆)
如果项目开启了Proguard/R8,必须在proguard-rules.pro中添加Hilt的保留规则,避免自定义Application和Hilt生成类被混淆:-keepattributes *Annotation* -keep class com.example.myapp.MyApp { *; } -keep class com.example.myapp.Hilt_MyApp { *; } -keep class dagger.hilt.** { *; } -dontwarn dagger.hilt.**
二、解决kapt模式下的Unsupported metadata version错误
这个错误90%是Kotlin版本和Hilt版本不兼容导致的,按以下步骤排查:
匹配Kotlin与Hilt的版本兼容关系
不同Kotlin版本对应不同的Hilt最低支持版本,核心对应关系如下:- Kotlin 1.9.x → Hilt 2.48+
- Kotlin 1.8.x → Hilt 2.44+
- Kotlin 1.7.x → Hilt 2.40.5 ~ 2.43.2
- Kotlin 1.6.x → Hilt 2.38.1 ~ 2.40.5
统一依赖版本
确保hilt-android和hilt-compiler的版本完全一致,比如:implementation "com.google.dagger:hilt-android:2.48" kapt "com.google.dagger:hilt-compiler:2.48"检查KSP与kapt的混用问题
如果之前用的是KSP(Kotlin Symbol Processing)代替kapt,切换回kapt时要删除所有KSP相关的依赖和插件配置,避免冲突。比如移除id 'com.google.devtools.ksp'插件和ksp "com.google.dagger:hilt-compiler:xxx"依赖。升级/降级版本到兼容组合
如果当前版本不兼容,直接调整Kotlin或Hilt版本到上述兼容区间。比如用的是Kotlin 1.9.0,就把Hilt升级到2.48及以上版本。
内容的提问来源于stack exchange,提问作者Ali Yacine

