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

更新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模块。

可能原因

  1. AGP 8.7+的R8代码收缩规则变更:Release模式下R8可能将ShowCase类误判为未使用代码而移除,导致Hilt注解处理器在生成代码时找不到该类。
  2. 跨模块注解处理器可见性问题:Gradle 8.9对模块依赖的编译路径做了调整,core模块的Hilt注解处理器无法访问billing模块中implementation依赖的类。
  3. 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,提问作者Ильин Павел

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:45:13