升级Gradle 3.1.0后遇API废弃及ProGuard规则警告,如何解决?
嘿,升级Gradle到3.1.0后遇到这俩问题很常见,我来给你拆解解决办法:
1. 处理废弃API的提示
你看到的“部分输入文件使用或覆盖了已废弃的API”是编译时的提示,要拿到具体信息才能针对性解决:
- 第一步,按照提示添加
-Xlint:deprecation参数获取详细日志。打开你的模块级build.gradle文件,在android块里添加编译选项:android { // 其他已有配置... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 // 换成你项目使用的Java版本 targetCompatibility JavaVersion.VERSION_1_8 compilerArgs.add("-Xlint:deprecation") } } - 重新执行编译任务(比如终端运行
./gradlew compileDebugJavaWithJavac),这时控制台会输出具体哪些类、哪些方法调用了废弃API,甚至会告诉你替代的新API是什么。 - 后续处理建议:
- 优先替换成官方推荐的新API:这是最彻底的解决方式,比如如果是Android SDK的废弃方法,查官方文档找替代方案;如果是第三方依赖的问题,考虑升级依赖库版本。
- 如果暂时无法替换(比如依赖库暂未更新),可以添加
-Xlint:-deprecation关闭警告,但这只是临时方案,不建议长期使用。
2. 修复ProGuard规则的警告
这个警告是因为Java里的注解(Annotation)本质上是实现了java.lang.annotation.Annotation接口,而不是继承(extends)它。Gradle 3.1.0搭配的ProGuard版本对规则的检查更严格了,所以会抛出这个提示。
解决方法非常直接:把你的ProGuard规则里的extends改成implements即可:
-keep public class * implements java.lang.annotation.Annotation { *; }
修正后的规则会正确匹配所有自定义注解类,同时消除这个警告。
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

