通过Refactor移除string.xml未使用字符串时预览无内容怎么办
Android Studio 未使用字符串资源检测无结果的排查方案
问题复现
执行Android项目冗余资源清理时,尝试移除strings.xml中未被引用的字符串资源,但触发检测后预览界面无任何内容展示,项目实际存在大量未使用的字符串资源,无法完成冗余字符串移除操作。
复现操作步骤:
- 打开项目内的
strings.xml文件 - 右键点击唤出操作菜单
- 依次选择
Refactor->Unused Resource选项触发未使用资源检测,最终未返回任何可清理的资源结果
排查与解决方法
- 检查检测配置的过滤规则
触发Unused Resource操作后会先弹出配置弹窗,首先确认Resource types列表中已勾选String资源类型;其次检查过滤选项,不要误勾选Ignore resources referenced from下的非必要项(比如忽略测试源集引用、忽略动态模块引用等),同时清空自定义的资源名过滤正则,确认配置无误后再执行检测。 - 排查隐式引用导致的Lint误判
如果项目中存在通过getIdentifier()动态拼接资源名获取字符串的逻辑、或者在Manifest、第三方SDK配置、路由表中存在通配符形式的资源引用,Lint会默认判定匹配命名规则的所有字符串都可能被调用,不会标记为未使用。这种场景可以换用专项Lint扫描:依次打开Analyze->Inspect Code,在检查规则中找到Android -> Lint -> Performance -> Unused resources,指定扫描范围为全项目后执行,扫描结果会标注所有疑似未使用的资源,手动核对确认无引用后即可清理。 - 修复IDE索引缓存异常
IDE缓存损坏会导致资源引用关系计算错误,出现漏检。依次点击File -> Invalidate Caches...,勾选Clear file system cache and Local History后点击Invalidate and Restart,等待重启完成全量索引重建后,再重新触发检测即可。 - 调整检测范围适配多模块/多构建变体项目
如果项目采用多模块结构、配置了多个productFlavor构建变体,在单个strings.xml文件上触发检测时,IDE默认仅扫描当前模块当前变体的引用关系,不会跨模块、跨变体计算引用链路,很容易出现检测结果为空的问题。这种场景不要在单个资源文件上触发操作,直接选中项目根目录唤起Unused Resource检测,同时在配置弹窗中勾选Check all variants选项,覆盖全量引用场景后即可得到准确结果。
内容的提问来源于stack exchange,提问作者Raj Gohel
相关产品推荐
相关产品推荐

