替换compile为implementation后仍收到Gradle过时警告的原因排查
这种情况我之前也碰到过——明明把自己能找到的compile全换成implementation了,警告却还赖着不走,多半是这些地方藏着漏网之鱼:
第三方依赖/插件偷偷用了compile
有些老版本的第三方库或者Gradle插件,内部配置里还在沿用compile,你自己的项目代码里搜不到,但它们会间接触发警告。可以用命令行排查:# 针对Android项目的app模块 ./gradlew app:dependencies --configuration compile这个命令会列出所有依赖
compile配置的模块,找到对应的库后,优先升级到最新稳定版,一般新版本都会把compile替换成implementation。漏看了其他Gradle配置文件
别只盯着app模块的build.gradle!项目根目录的build.gradle、其他子模块的配置文件,甚至是自定义的*.gradle脚本、gradle.properties里,都可能藏着compile。比如很多项目会在根目录的allprojects块里配置全局依赖,这块很容易被忽略。Gradle缓存在搞鬼
Gradle的缓存有时候会保留旧的配置信息,哪怕你已经改了代码,它还是会读缓存里的旧内容。试试彻底清理缓存并刷新依赖:./gradlew clean build --refresh-dependencies执行完这个命令再重新构建,很多时候警告就直接消失了。
Android Gradle Plugin版本太旧
如果你用的AGP版本比较老,哪怕你已经用了implementation,它可能还是会弹出这个过时提示。试试把根build.gradle里的AGP版本升级到最新稳定版(比如7.x或8.x系列,根据你的项目适配情况调整)。隐性的compile引用
有些时候会用变量或者动态配置来引用compile,比如定义了def depConfig = 'compile'然后写$depConfig 'com.example:xxx:1.0',这种情况直接搜“compile”字符串搜不到,但实际还是在使用旧配置。可以试试搜索类似的变量定义,或者检查有没有project.configurations.compile这类代码。
内容的提问来源于stack exchange,提问作者Rob

