有什么简单的方法可以找出Android项目中未使用的字符串?


152

我有一个巨大的Android项目,其中包含许多在中声明的字符串strings.xml。我想删除中未使用的字符串strings.xml

有什么简单的方法吗?

Answers:


238

Android Studio上

菜单 -> 分析 -> 按名称运行检查 -> 未使用的资源

选中文件掩码复选框,然后将其放在strings.xml文本字段中。


2
然后,您可以定义Custom scope,选择Production classes-> app-> values以查找未使用的字符串,颜色...
Jemshit Iskenderov

2
使用SDK Tools 26.0.2时,它不会找到我未使用的字符串,而“查找用法”不会显示它们的任何用法(对于实际使用的字符串也是如此)。
user905686

顺便说一句,当实际使用字符串(在代码中动态引用)时,您可以使用tools:ignore="UnusedResources"
jakub.g

4
这一个没有按预期工作。我尝试添加未使用的字符串并进行检查,但无法识别它
chikka.anddev 18-3-14

这似乎是坏的,它认为我的一堆字符串没有使用,但是很快找到了用法。小心。
szaske

37

这是另一种相当简单的解决方案。在Android Studio菜单中,转到

重构>删除未使用的资源...

在此处输入图片说明

单击预览查看未使用的资源,然后有选择地删除它们。


1
这删除了许多实际使用的资源。必须手动
取消

1
@stoefln,如果单击“预览”,则可以手动选择要删除的内容,而不要删除。
Suragch

1
请注意“也删除未使用的@id声明”。它删除了我的代码实际上正在使用的许多ID(Kotlin Android扩展插件-允许从“活动”,“片段”和“视图”中恢复视图)
Dan Alboteanu

28

在我的情况下,尽管我正在使用“删除未使用的资源”,但“按名称运行检查”没有起作用。

解:

  1. 打开strings.xml
  2. 二次点击
  3. 重构->删除未使用的资源

我不知道为什么“删除未使用的资源”以一种方式起作用,而另一种却不起作用。


2
您也可以在项目浏览器中执行此操作,选择所需的模块,然后右键单击并重构>删除未使用的资源,删除任何类型的资源,例如未使用的可绘制对象
FRL

22

使用ADT 16,您可以做得尽可能简单。更新至ADT 16并使用Android Lint。这真的是一个了不起的工具。它可以找到所有未使用的资源(不仅是字符串),还有更多。从其官方网站:

Here are some examples of the types of errors that it looks for:

- Missing translations (and unused translations)
- Layout performance problems (all the issues the old layoutopt tool used to find, and more)
- Unused resources
- Inconsistent array sizes (when arrays are defined in multiple configurations)
- Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
- Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
- Usability problems (like not specifying an input type on a text field)
- Manifest errors
and many more.

11
从ADT 20.0.2开始,Android Lint找不到未使用的字符串,也没有声称。我只是通过添加具有完全随机id的字符串然后运行Lint进行测试。我不能投票,上面下来的答复,因为我没有足够的声誉:(。
弗兰克·哈珀

正如@FrankHarper所说:以前没有。正如Flash勋爵所说,现在可以了:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc

3

要检查string.xml。

这很容易(至少在我的Eclipse版本中)

在Eclipse for Android中(我具有v22.6.2-1085508版本)

  • 右键单击“ Package Explorer”中的项目名称
  • 选择“ Android工具”。
  • 选择“运行Lint:检查常见错误”。

现在,当您打开strings.xml时,您将看到未使用的字符串突出显示。

您可以解决其他潜在问题。


这对于查找默认文件中没有翻译的字符串很有用
ePeace 2015年

3

在Android Studio Press中

Ctlr + Alt + Shift + i

选择->未使用的资源
它显示未使用的未使用字符串和图标。

谢谢快乐编码:)


3

这就是我使用Android 3.3的方式。

检入对存储库的所有未保存的更改。

  • 右键单击您应用程序的模块->重构->删除未使用的资源->预览
  • 在“重构预览”中,折叠两个视图(“要删除的项目”和“未使用的资源声明”)
  • 右键单击“要删除的项目”->排除
  • 右键单击“未使用的资源声明”->排除
  • 现在,展开“未使用的资源声明”,然后在该位置下找到您的应用程序特定的strings.xml(会有多个strings.xmls)
  • 右键单击该strings.xml->包含
  • 重构!xml文件中所有未使用的字符串都将被删除!

注意:尝试构建项目。如果编译失败,则很有可能是从某些未使用的layout / menu xmls中引用了这些strings.xml。因此,这些布局xml也可以手动删除!

构建并运行。测试!


-1

从项目的根目录运行此脚本。

查找`res / values / *。xml`中的资源文件;做
  用于`grep'。* / \ 1 / g'`中的字符串名; 做
    count1 =`grep -rc“ R.string。$ {stringname}” src | egrep -v':0 $'| wc -l`
    count2 =`grep -rc“ @string / $ {stringname}” res /布局| egrep -v':0 $'| wc -l`
    count3 =`grep -rc“ @string / $ {stringname}” res /菜单| egrep -v':0 $'| wc -l`
    count4 =`grep -rc“ @string / $ {stringname}” AndroidManifest.xml | egrep -v'^ 0 $'| wc -l`
    count5 =`grep -rc“ @string / $ {stringname}” res / xml | egrep -v':0 $'| wc -l`
    if [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; 然后
      echo $ resourcefile:$ stringname
    科幻
  做完了
做完了

在`find res / drawable * -type f -name'*。???'中的资源名称; 做
  resource =`echo $ resourcename | xargs基本名称| sed“ s / ^ \(。* \)\ .... $ / \ 1 / g”`
  count1 =`grep -rc“ R \ .drawable \。$ {resource}” src | egrep -v':0 $'| wc -l`
  count2 =`grep -rc“ @drawable / $ {resource}” res /布局| egrep -v':0 $'| wc -l`
  count3 =`grep -rc“ @drawable / $ {resource}” res / drawable * / *。xml | egrep -v':0 $'| wc -l`
  count4 =`grep -rc“ @drawable / $ {resource}” res /菜单| egrep -v':0 $'| wc -l`
  count5 =`grep -rc“ @drawable / $ {resource}” AndroidManifest.xml | egrep -v'^ 0 $'| wc -l`
  如果[$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; 然后
      echo $资源名称
  科幻
做完了

在`find res / layout / *。xml`中获取资源名称;做
  resource =`echo $ resourcename | xargs基本名称| sed“ s / ^ \(。* \)\ .... $ / \ 1 / g”`
  count1 =`grep -rc“ R \ .layout \。$ {resource}” src | egrep -v':0 $'| wc -l`
  如果[$ count1 -eq 0]; 然后
      echo $资源名称
  科幻
做完了

它给了我这种输出:

res / values / activity_strings.xml:activity_more
res / values / activity_strings.xml:activity_as_reply_to
res / values / db_strings.xml:sql_backlog_count
res / values / db_strings.xml:sql_backlog_update_last_resend
...

很酷的方法,但是它是否检查资源名称是否不在注释或字符串中?它也需要进行一些修改才能与新的Android Studio项目结构兼容。
Mohammad Jafar Mashhadi 2015年

-1

仅对于缺少翻译:

使用InteliJ,单击您的InteliJ的面板栏:“分析”>“按名称运行检查”>键入:不完整的翻译

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.