Hilt多模块集成开启minifyEnabled的AAR文件时出现类型转换错误
问题根因
该异常本质是Hilt生成的注入器类、组件类被混淆规则错误重命名/移除,或多模块混淆规则隔离导致的类型不匹配:源码依赖module时全项目混淆规则合并执行,Hilt相关类会被默认保留;独立打包开启混淆的AAR时,module的混淆规则默认不会同步到主App,就会出现类转换异常。另外错误日志中出现的com.com.mypackage双com前缀,也可能存在包名配置错误的问题。
排查&解决步骤
- 第一步:补全module模块的Hilt混淆规则
在module模块的proguard-rules.pro中添加Hilt专用混淆规则,保留生成的注入器、组件类:
# 保留Hilt生成的核心组件类 -keep class * extends dagger.hilt.internal.GeneratedComponent -keep class * implements dagger.hilt.internal.GeneratedEntryPoint -keep @dagger.hilt.EntryPoint class * { *; } -keep @dagger.hilt.AndroidEntryPoint class * { *; } # 保留生成的注入器类 -keep class **_GeneratedInjector { *; } # 替换为你项目的实际包名,保留Hilt生成的组件实现类 -keep class com.mypackage.DaggerMainApplication_HiltComponents** { *; }
- 第二步:配置module导出混淆规则给依赖方
在module的build.gradle中配置consumerProguardFiles,将module的混淆规则打包进AAR,主App依赖时会自动应用这些规则:
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 导出混淆规则给依赖该AAR的工程 consumerProguardFiles 'proguard-rules.pro' } } }
配置完成后重新打包AAR替换原有依赖即可。
第三步:检查包名配置错误
优先核对错误日志中出现的com.com.mypackage双前缀问题,确认module、app的applicationId、namespace配置,以及@AndroidEntryPoint注解的Activity所在包名是否正确,避免包名不匹配导致类加载异常。第四步:验证问题定位(可选)
临时关闭module的minifyEnabled打包AAR测试,如果运行正常即可100%确认是混淆规则配置问题,再逐步调整规则覆盖所有Hilt相关类即可。
内容的提问来源于stack exchange,提问作者Azay Gupta
相关产品推荐
相关产品推荐

