有没有简单的方法来找出Android项目中未使用的字符串?

时间:2011-01-13 12:55:14

标签: android

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

有没有简单的方法呢?

11 个答案:

答案 0 :(得分:201)

Android Studio

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

选中文件掩码复选框,并将strings.xml放入文本字​​段中。

答案 1 :(得分:23)

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

解决方案:

  1. 打开strings.xml
  2. 辅助点击
  3. 重构 - >删除未使用的资源
  4. 我不知道为什么“删除未使用的资源”以一种方式工作而不是另一种方式。

答案 2 :(得分: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.

答案 3 :(得分:21)

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

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

enter image description here

点击预览以查看未使用的资源,并有选择地将其删除。

答案 4 :(得分:4)

看看我的问题:Find out if resource is used

由于没有人有真正的答案,我编写了一个脚本来搜索包含字符串的未使用资源。

希望对你有所帮助。

答案 5 :(得分:3)

请参阅链接:http://code.google.com/p/android-unused-resources/。它有一个工具AndroidUnusedResources.jar。运行此命令并获取未使用的字符串或删除任何资源。

  • 迪普斯

答案 6 :(得分:3)

检查string.xml。

这很简单(至少在我的Eclipse版本中)

在Eclipse for Android(我的版本为v22.6.2-1085508)

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

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

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

答案 7 :(得分:2)

在Android Studio中按

Ctlr + Alt + Shift + i

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

谢谢快乐编码:)

答案 8 :(得分:0)

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

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

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

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

构建并运行。测试!

答案 9 :(得分:-1)

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

for resourcefile in `find res/values/*.xml`; do
  for stringname in `grep '.*/\1/g'`; do
    count1=`grep -rc "R.string.${stringname}" src | egrep -v ':0$' | wc -l`
    count2=`grep -rc "@string/${stringname}" res/layout | egrep -v ':0$' | wc -l`
    count3=`grep -rc "@string/${stringname}" res/menu | 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 ]; then
      echo $resourcefile : $stringname
    fi
  done
done

for resourcename in `find res/drawable* -type f -name '*.???'`; do
  resource=`echo $resourcename | xargs basename | sed "s/^\(.*\)\....$/\1/g"`
  count1=`grep -rc "R\.drawable\.${resource}" src | egrep -v ':0$' | wc -l`
  count2=`grep -rc "@drawable/${resource}" res/layout | egrep -v ':0$' | wc -l`
  count3=`grep -rc "@drawable/${resource}" res/drawable*/*.xml | egrep -v ':0$' | wc -l`
  count4=`grep -rc "@drawable/${resource}" res/menu | egrep -v ':0$' | wc -l`
  count5=`grep -rc "@drawable/${resource}" AndroidManifest.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 ]; then
      echo $resourcename
  fi
done

for resourcename in `find res/layout/*.xml`; do
  resource=`echo $resourcename | xargs basename | sed "s/^\(.*\)\....$/\1/g"`
  count1=`grep -rc "R\.layout\.${resource}" src | egrep -v ':0$' | wc -l`
  if [ $count1 -eq 0 ]; then
      echo $resourcename
  fi
done

它给了我这样的输出:

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
...

答案 10 :(得分:-1)

仅缺少翻译:

使用InteliJ,点击InteliJ的面板栏:" Analyze" > "按名称运行检查" >输入:不完整的翻译