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

使用Hilt框架的Android项目如何查找未使用类

Hilt项目精准查找未使用类的可行方案

Android Studio默认的Unused declaration检查会把Hilt编译期生成的XXX_GeneratedInjector、Hilt_XXX等类的引用判定为有效引用,确实会漏报大量真正未被使用的手写类,可以通过以下几个方案组合解决:

  • 调整IDE检查规则,过滤Hilt生成代码干扰
    打开IDE设置路径Settings/Preferences -> Editor -> Inspections -> Java -> Declaration redundancy -> Unused declaration做两处配置:

    1. 修改检查的作用域,将app/build/generated、各业务模块下的build/generated目录排除在引用分析范围之外,避免生成代码的假引用干扰结果
    2. 在检查配置的Entry points标签页,将Hilt核心注解标记的元素手动添加为入口点,避免误判:包括@HiltAndroidApp标注的Application类、@AndroidEntryPoint标注的Android组件、@Module+@InstallIn标注的模块类、带@Inject构造器的公开类、@EntryPoint标注的接口,这些类本身不会被手写业务代码显式引用,是Hilt直接调用的入口。
  • 用R8代码收缩输出做高可信度校验
    这是准确率最高的方案,R8在构建release包时会遍历完整的代码引用链(包括Hilt注解处理后的所有真实引用关系),不会被无效的生成类引用误导。配置方式很简单:

    1. 在对应模块的build.gradle中开启release构建的代码收缩:
    android {
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    1. 注意不要在ProGuard规则中添加-keep class 你的包名.**这类全局keep规则,否则会导致代码收缩失效
    2. 执行一次全量release构建后,查看build/outputs/mapping/release/usage.txt文件,文件中列出的所有类、方法、字段就是R8判定为完全无有效引用、最终会被移除的代码,可信度远高于IDE静态检查。
  • 交叉校验过滤误判
    拿到IDE检查结果和R8输出的列表后,做两轮过滤排除特殊场景:

    1. 过滤在AndroidManifest.xml、导航图XML、布局XML中被引用的类(比如声明在Manifest里的四大组件、布局里引用的自定义View)
    2. 过滤通过反射被调用的类(比如路由框架注册的页面类、序列化用的实体类)
    3. 过滤被Hilt模块真实提供依赖的类:如果一个类在@Module标注的类中被@Provides/@Binds方法返回,且该依赖在依赖图中存在请求点,就算没有显式业务代码引用也是被使用的。
  • 删除前的最终验证
    所有标记为待删除的类,先临时注释/删除类的全部代码,执行全量debug+release构建,再跑一遍核心业务路径的Monkey测试,确认没有编译错误、没有运行时类找不到的崩溃,再做最终移除。

不要依赖单一工具的检查结果,静态检查永远无法覆盖所有反射、资源引用的场景,交叉验证+构建运行验证是避免误删的最稳妥手段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:36:25