【发布时间】:2011-06-08 11:51:01
【问题描述】:
我有一个巨大的 Android 项目,其中在 strings.xml 中声明了许多字符串。我想删除strings.xml 中未使用的字符串。
有什么简单的方法吗?
【问题讨论】:
标签: android
我有一个巨大的 Android 项目,其中在 strings.xml 中声明了许多字符串。我想删除strings.xml 中未使用的字符串。
有什么简单的方法吗?
【问题讨论】:
标签: android
在 Android Studio 上:
菜单 -> 分析 -> 按名称运行检查 -> 未使用的资源
选中文件掩码复选框并将strings.xml放在文本字段中。
【讨论】:
Custom scope,选择Production classes -> app -> values 查找未使用的字符串、颜色...
tools:ignore="UnusedResources" 抑制 linter 警告
在我的情况下,“按名称运行检查”不起作用,尽管我使用的是“删除未使用的资源”。
解决方案:
我不知道为什么“删除未使用的资源”以一种方式起作用,而另一种则不起作用。
【讨论】:
使用 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.
【讨论】:
Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
这就是我在 Android 3.3 上的做法。
签入对您的存储库的任何未保存的更改。
注意:尝试构建项目。如果编译失败,很可能这些 strings.xml 是从一些布局/菜单 xml 中引用的,而这些布局/菜单 xml 本身是未使用的。 所以那些layout xmls也可以手动删除!
构建并运行。测试!
【讨论】:
检查 string.xml。
这很容易(至少在我的 Eclipse 版本中)
在 Eclipse for Android 中(我有版本 v22.6.2-1085508)
现在,当您打开 strings.xml 时,您会看到未使用的字符串被突出显示。
您可以解决其他潜在问题。
【讨论】:
在 Android Studio 中按
Ctrl+Alt+Shift+i
选择 -> 未使用的资源
它向您显示未使用的未使用的字符串和图标。
感谢快乐编码:)
【讨论】:
从项目的根目录运行此脚本。
对于`find res/values/*.xml`中的资源文件;做 对于 `grep '.*/\1/g'` 中的字符串名称;做 count1=`grep -rc "R.string.${stringname}" src | egrep -v ':0$' |厕所-l` count2=`grep -rc "@string/${stringname}" res/layout | egrep -v ':0$' |厕所-l` count3=`grep -rc "@string/${stringname}" res/menu | egrep -v ':0$' |厕所-l` count4=`grep -rc "@string/${stringname}" AndroidManifest.xml | egrep -v '^0$' |厕所-l` count5=`grep -rc "@string/${stringname}" res/xml | egrep -v ':0$' |厕所-l` 如果 [ $count1 -eq 0 -a $count2 -eq 0 -a $count3 -eq 0 -a $count4 -eq 0 -a $count5 -eq 0 ];然后 回显 $resourcefile : $stringname 菲 完毕 完毕 对于`find res/drawable* -type f -name '*.???'`中的资源名称;做 资源=`回显 $resourcename | xargs 基本名称 | sed "s/^\(.*\)\....$/\1/g"` count1=`grep -rc "R\.drawable\.${resource}" src | egrep -v ':0$' |厕所-l` count2=`grep -rc "@drawable/${resource}" res/layout | egrep -v ':0$' |厕所-l` count3=`grep -rc "@drawable/${resource}" res/drawable*/*.xml | egrep -v ':0$' |厕所-l` count4=`grep -rc "@drawable/${resource}" res/menu | egrep -v ':0$' |厕所-l` count5=`grep -rc "@drawable/${resource}" AndroidManifest.xml | egrep -v '^0$' |厕所-l` 如果 [ $count1 -eq 0 -a $count2 -eq 0 -a $count3 -eq 0 -a $count4 -eq 0 -a $count5 -eq 0 ];然后 回声$资源名称 菲 完毕 `find res/layout/*.xml` 中的资源名称;做 资源=`回显 $resourcename | xargs 基本名称 | sed "s/^\(.*\)\....$/\1/g"` count1=`grep -rc "R\.layout\.${resource}" src | egrep -v ':0$' |厕所-l` 如果 [ $count1 -eq 0 ];然后 回声$资源名称 菲 完毕它给了我这种输出:
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 ...【讨论】:
仅适用于缺少的翻译:
使用 InteliJ,点击你的 InteliJ 的面板栏:“分析”>“按名称运行检查”>输入:不完整的翻译
【讨论】: