更新AGP至8.7.2后Hilt编译Release版本报错的解决咨询
AGP 8.7.2 + Gradle 8.9 升级后Hilt Release构建类解析失败问题解决
问题背景
升级AGP到8.7.2、Gradle到8.9后,Debug模式可正常运行,但Release构建时Hilt报错无法解析com.ilyin.billing.showcase.ShowCase类,报错指向core模块GameBillingModule中的provideFillwordShowcase方法。已确认ShowCase为非生成类、导入正确,且core模块通过implementation(project(":billing"))依赖了包含ShowCase的billing模块。
可能原因
- AGP 8.7+的R8代码收缩规则变更:Release模式下R8可能将
ShowCase类误判为未使用代码而移除,导致Hilt注解处理器在生成代码时找不到该类。 - 跨模块注解处理器可见性问题:Gradle 8.9对模块依赖的编译路径做了调整,core模块的Hilt注解处理器无法访问billing模块中
implementation依赖的类。 - Gradle缓存残留:升级后旧缓存未清理,导致构建逻辑冲突。
解决步骤
1. 保留ShowCase类避免被R8移除
在billing模块的ProGuard规则文件(如proguard-rules.pro)中添加保留规则:
-keep class com.ilyin.billing.showcase.ShowCase { *; }
或直接在ShowCase类上添加@Keep注解(更精准):
import androidx.annotation.Keep @Keep class ShowCase { // 类实现代码 }
2. 确保Hilt注解处理器能访问跨模块类
在core模块的build.gradle(或build.gradle.kts)中,给Hilt注解处理器添加billing模块的依赖,保证编译时能找到ShowCase类:
// Kotlin DSL示例 dependencies { implementation(project(":billing")) // 给KAPT添加billing模块依赖,Java项目替换为annotationProcessor kapt(project(":billing")) }
3. 检查模块依赖的代码导出规则
若billing模块配置了consumerProguardFiles,需确保其中没有排除ShowCase类;同时在core模块的Release构建类型中,确认代码收缩规则未限制跨模块类的访问:
// core模块build.gradle.kts示例 android { buildTypes { release { isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) // 若有自定义consumer规则,确保包含ShowCase的保留规则 consumerProguardFiles("consumer-rules.pro") } } }
4. 清理Gradle缓存并重新构建
执行以下命令清理缓存后重新构建Release包:
./gradlew clean ./gradlew assembleRelease
内容的提问来源于stack exchange,提问作者Ильин Павел
相关产品推荐
相关产品推荐

