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

如何定位Android Studio/Gradle中重复protobuf类的来源?

解决Protobuf类重复及定位旧版本依赖的方案

1. 定位引入protobuf-javalite 3.22.3的依赖

通过Gradle依赖树命令,找出哪个第三方库引入了旧版本:

  • 在Android Studio终端执行(Windows用户替换为gradlew.bat):
    ./gradlew app:dependencies
    
  • 在输出结果中搜索protobuf-javalite或com.google.protobuf,找到标注3.22.3的条目,查看其依赖路径(例如xxx:yyy:1.0.0 -> com.google.protobuf:protobuf-javalite:3.22.3)。

若输出内容过多,可过滤结果缩小范围:

./gradlew app:dependencies | grep -A 5 -B 5 "protobuf-javalite"

2. 排除旧版本依赖

找到对应的依赖库后,在Module级别的build.gradle中给该依赖添加排除规则:
比如发现是com.example:some-library:2.0引入的旧版本,修改为:

implementation('com.example:some-library:2.0') {
    exclude group: 'com.google.protobuf', module: 'protobuf-javalite'
}

3. 修复本地Protobuf代码生成配置

错误提示包含本地构建目录的类文件,说明本地生成的Protobuf代码与依赖库类重复,需调整插件配置:

  • 确认Protobuf插件使用主库的java生成器(而非旧的javalite):
    protobuf {
        protoc {
            artifact = "com.google.protobuf:protoc:3.23.2"
        }
        plugins {
            java {
                artifact = "com.google.protobuf:protobuf-java:3.23.2"
            }
        }
        generateProtoTasks {
            all().each { task ->
                task.builtins {
                    remove java // 移除旧的内置生成器配置
                }
                task.plugins {
                    java {} // 使用主库生成器
                }
            }
        }
    }
    
  • 删除本地旧生成代码:手动清除app/build/generated/source/proto目录,再重新构建。

4. 强制统一Protobuf版本

若无法定位具体依赖来源,可在Project级别的build.gradle中强制所有依赖使用指定版本:

allprojects {
    configurations.all {
        resolutionStrategy {
            force 'com.google.protobuf:protobuf-java:3.23.2'
            force 'com.google.protobuf:protoc:3.23.2'
        }
    }
}

5. 清理缓存并重新构建

执行以下命令彻底清理缓存后重新构建:

./gradlew clean build --refresh-dependencies

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:35:08