Google Cloud Translate API中Autovalue与ProGuard冲突问题求助
你碰到的这个Cannot compute meet of types: OBJECT and INT错误,本质是旧版本Google Cloud Translate SDK和现代Android构建工具(D8/R8)不兼容导致的。结合你的配置场景,我给你几个靠谱的解决思路:
方案1:升级Google Cloud Translate SDK版本
你当前用的0.5.0版本实在太老旧了——这是2017年发布的版本,它的内部依赖和代码结构已经完全适配不了现在的D8编译器。直接升级到最新的稳定版才是一劳永逸的办法,比如目前的2.32.0(你可以根据Google Maven仓库的最新版本调整):
替换你的Gradle依赖为:
implementation 'com.google.cloud:google-cloud-translate:2.32.0'
新版本不仅会修复大量兼容性问题,还可能让你不再需要手动排除那些依赖(如果仍有冲突,再根据实际依赖树调整排除规则即可)。升级后,之前的Autovalue警告和D8类型错误大概率会自动消失。
方案2:调整ProGuard/R8规则(针对无法升级SDK的情况)
如果暂时没办法升级SDK,你需要给ProGuard添加更多保护规则,避免D8对相关类进行错误的类型优化:
除了你已经添加的-dontwarn规则,再补充以下内容:
# 保留Google Cloud Translate及相关依赖的类结构,防止类型信息被破坏 -keep class com.google.cloud.translate.** { *; } -keep class autovalue.shaded.com.google.** { *; } # 暂时禁用可能引发类型错误的优化选项(如果需要保留部分优化,可尝试只禁用特定项) -dontoptimize -dontshrink
解释一下:
-keep规则确保核心类的结构和类型信息不被混淆或移除,避免D8在合并类型时出错-dontoptimize和-dontshrink会关闭代码优化和压缩,如果必须保留优化,可以尝试替换为-optimizations !code/allocation/variable来禁用特定的变量分配优化
方案3:排查依赖冲突问题
你手动排除了多个依赖(比如grpc-all、protobuf-java等),这可能导致某些核心类缺失或者版本不匹配,进而触发D8的类型计算错误。你可以运行./gradlew app:dependencies命令生成依赖树,仔细检查是否有版本冲突的依赖,确保所有相关依赖的版本是兼容的。
另外,额外提一句:如果是Android项目做翻译功能,其实更推荐使用Google ML Kit的翻译API——它是专门为移动平台优化的,体积更小,兼容性更好,还不用处理这么复杂的ProGuard规则。
内容的提问来源于stack exchange,提问作者Adeeb karim

