我有一个庞大的Android项目,在strings.xml
中声明了许多字符串。我想删除strings.xml
中未使用的字符串。
有没有简单的方法呢?
答案 0 :(得分:201)
在 Android Studio :
上菜单 - > 分析 - > 按名称运行检查 - > 未使用的资源
选中文件掩码复选框,并将strings.xml
放入文本字段中。
答案 1 :(得分:23)
在我的情况下,“按名称运行检查”没有用,尽管我使用的是“删除未使用的资源”。
解决方案:
我不知道为什么“删除未使用的资源”以一种方式工作而不是另一种方式。
答案 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)
答案 4 :(得分:4)
答案 5 :(得分:3)
请参阅链接:http://code.google.com/p/android-unused-resources/。它有一个工具AndroidUnusedResources.jar。运行此命令并获取未使用的字符串或删除任何资源。
答案 6 :(得分:3)
检查string.xml。
这很简单(至少在我的Eclipse版本中)
在Eclipse for Android(我的版本为v22.6.2-1085508)
现在,当您打开strings.xml时,您将看到未使用的字符串突出显示。
您可以解决其他潜在问题。
答案 7 :(得分:2)
在Android Studio中按
Ctlr + Alt + Shift + i
选择 - >未使用的资源
它会显示未使用的未使用的字符串和图标。
谢谢快乐编码:)
答案 8 :(得分:0)
这就是我使用Android 3.3的方式。
检入存储库中所有未保存的更改。
注意:尝试构建项目。如果编译失败,则很有可能是从某些未使用的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" > "按名称运行检查" >输入:不完整的翻译