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

接入Play应用内更新遇Gradle Duplicate class found错误求助

问题描述

按照官方指引实现Android应用内更新功能时,添加如下2.0.0版本的独立应用内更新依赖:

implementation("com.google.android.play:app-update:2.0.0")
implementation("com.google.android.play:app-update-ktx:2.0.0")

构建时触发大量重复类报错,典型报错信息为:

com.google.android.play.core.appupdate.AppUpdateInfo found in modules jetified-app-update-2.0.0-runtime (com.google.android.play:app-update:2.0.0) and jetified-core-1.10.2-runtime (com.google.android.play:core:1.10.2)

添加全局exclude规则同时排除app-update和core模块后,项目可以正常构建,但出现类导入异常:AppUpdateManager类无法找到,仅AppUpdateResult可正常识别使用。

问题原因
  • 重复类报错根源:项目存在传递引入的旧版Play Core依赖com.google.android.play:core:1.10.2。早期版本的Play Core是单块集成包,已经包含应用内更新相关类;Google后续将Play Core拆分为多个独立功能模块,2.0.0版本的应用内更新能力已经从core包中拆分出来,作为独立的app-update、app-update-ktx包发布。新旧包同时存在时,同路径的类会被重复加载,触发构建报错。
  • 排除规则导致类找不到的根源:全局exclude配置同时排除了app-update和core两个模块,直接把新引入的2.0.0版本应用内更新核心包也排除在依赖树外,仅剩app-update-ktx中定义的少量扩展类(如AppUpdateResult)可被识别,核心类AppUpdateManager随核心包被排除,自然无法导入。
修复步骤
  1. 移除之前添加的全局exclude配置,禁止全局排除com.google.android.play分组下的模块。
  2. 在项目根目录执行Gradle命令打印完整依赖树,定位引入旧版com.google.android.play:core的来源:
    ./gradlew :app:dependencies
    
  3. 针对引入旧core包的依赖项单独配置排除规则,仅移除旧core包,不要影响新的独立模块依赖,示例配置如下:
    // 如果是模块内手动引入过旧版core依赖,直接删除对应implementation声明即可
    // implementation("com.google.android.play:core:1.10.2")
    
    // 如果是第三方库传递引入旧core,在对应依赖项上添加排除规则
    implementation("对应第三方库的group:artifact:version") {
        exclude group: "com.google.android.play", module: "core"
    }
    
  4. 重新执行依赖拉取和构建,确认依赖树中仅存在2.0.0版本的app-update、app-update-ktx依赖,无旧版core包残留后,即可正常导入所有应用内更新相关类。

补充说明:如果项目中还用到Play Core的其他能力(如应用内评价、动态特性分发),需要同步替换为官方拆分后的对应独立模块依赖,不要继续使用旧版单块core包,避免后续出现同类冲突。

内容的提问来源于stack exchange,提问作者Murphler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:03:17