AGP 8.4与Dagger/Hilt适配求助:多模块Release构建失败解决方案
AGP 8.4 与 Dagger/Hilt 适配完整解决方案
一、解决Dagger/Hilt Release构建失败问题
1. 升级Hilt至适配版本
AGP 8.4对R8规则兼容性要求更高,必须使用2.48及以上版本的Hilt,否则会出现规则不匹配问题:
- 根项目
build.gradle配置:dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.48' } - 业务模块
build.gradle配置:implementation 'com.google.dagger:hilt-android:2.48' kapt 'com.google.dagger:hilt-compiler:2.48'
2. 移除多余手动Keep规则
Hilt官方已内置完整的R8混淆规则,AGP 8.4会自动识别加载,无需手动为注入类添加-keep规则——手动添加的规则反而可能干扰Hilt的自动处理逻辑。
3. 解决CoroutineScope注入错误
构建提示CoroutineScope缺少@Provides规则时,按场景处理:
- 若使用Hilt自带Scope(如
viewModelScope、lifecycleScope):无需额外配置,确保androidx.lifecycle:lifecycle-runtime-ktx版本适配即可。 - 若使用自定义CoroutineScope:必须在Hilt模块中显式提供绑定,示例:
@Module @InstallIn(SingletonComponent::class) object CoroutineScopeModule { @Provides @Singleton fun provideAppCoroutineScope(): CoroutineScope { return CoroutineScope(SupervisorJob() + Dispatchers.Default) } }
AGP 8.4下Hilt对依赖绑定的检查更严格,所有注入对象必须有明确的绑定规则。
二、解决多模块混淆命名冲突问题
1. 配置模块专属混淆前缀
放弃repackageclasses 'x'的临时方案,为每个模块配置唯一的包前缀,确保混淆后的类路径不重复:
在每个模块的proguard-rules.pro中添加:
-repackageclasses com.yourapp.module.[模块名]
例如:
- 模块A:
-repackageclasses com.yourapp.module.a - 模块B:
-repackageclasses com.yourapp.module.b
2. 独立模块混淆规则
每个模块使用独立的proguard-rules.pro文件,避免共用规则导致跨模块混淆冲突。通用规则可通过proguardFile引入,而非直接复制。
3. 排查重复类
若仍有冲突,检查是否存在跨模块的重复类(同一类名在不同模块中定义),可通过以下方式解决:
- 调整模块依赖结构,将重复类抽离至公共模块。
- 对重复类添加
-keep规则保留类名:-keep class com.yourapp.duplicate.ClassName { *; }
内容的提问来源于stack exchange,提问作者johngray1965
相关产品推荐
相关产品推荐

