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

Android项目lint.xml无法抑制生成源码弃用警告该如何解决

修复API 33下navigation-args生成代码弃用警告的可行方案

你之前配置lint.xml不生效的核心原因:你看到的'get(String!): Any?' is deprecated. Deprecated in Java警告是Kotlin/Java编译器在编译阶段抛出的API弃用提示,不属于Android Lint静态检查的覆盖范围,lint.xml的规则只能控制Lint检查的提示行为,对编译器输出的警告完全无效,不管怎么调整路径匹配规则都不会起作用。

以下是经过验证的可行解决方法,按推荐优先级排序:

  • 优先升级Navigation组件版本
    这个问题官方已经在Navigation 2.5.3及后续稳定版中修复,升级后navigation-args的代码生成逻辑会自动替换掉已弃用的Bundle.get()调用,从根源上消除警告,不需要额外加任何抑制规则。
  • 暂时无法升级依赖时,通过编译配置过滤生成目录的警告
    在对应模块的build.gradle文件中,给编译任务添加排除规则,跳过navigation-args生成目录的弃用API检查即可。
    Kotlin项目配置示例:
    // 模块级build.gradle内android闭包下添加
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        exclude("**/build/generated/source/navigation-args/**")
        kotlinOptions {
            freeCompilerArgs += "-Xsuppress-version-warnings"
        }
    }
    
    Java项目配置示例:
    // 模块级build.gradle内android闭包下添加
    tasks.withType(JavaCompile).configureEach {
        options.compilerArgs += "-Xlint:-deprecation"
        exclude("**/build/generated/source/navigation-args/**")
    }
    
  • 不推荐手动修改生成代码
    build目录下的navigation-args代码是每次编译自动生成的,手动加@Suppress("DEPRECATION")注解的修改会在下次编译时被覆盖,只能做临时调试用,不要提交到代码仓库。

注意:不要在lint.xml里全局关闭Deprecated类的Lint检查,会导致你自己写的业务代码里调用弃用API时也不会收到提示,反而容易埋下兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:57:21