我正在寻找一种有效的方法来确定在Java或XML文件中是否使用了资源(主要是可绘制的)。
问题是,在我当前的项目中,drawables经常被更改,现在我有一些drawables,可能永远不会被使用。
是否有工具/方法可以在不搜索整个项目中的每个文件名的情况下找到那些未使用的drawable?
答案 0 :(得分:31)
我写了一个基于python的工具来解决这个问题。由于这不是直接共享它的地方,我创建了一个现在离线的项目页面。
<强>更新强>
由于Lint可以做同样的事情并且已经包含在Android SDK中,因此开发已经停止。
答案 1 :(得分:17)
我只是为了好玩而写了这个bash脚本:
PROJECT="/path/to/the/project"
for file in $(ls $PROJECT/res/drawable -l | awk '{ print $8}' | sed 's/\..\+//g'); do count=0; for SRCFILE in `find $PROJECT -name "*.xml" -print 2> /dev/null`; do let "count+=$(grep -c @drawable/$file $SRCFILE)"; done; for SRCFILE in `find $PROJECT -name "*.java" -print 2> /dev/null`; do let "count+=$(grep -c R.drawable.$file $SRCFILE)"; done; if [ $count -lt 1 ]; then echo -e "\e[0;31m$file\e[0m not used"; else echo -e "\e[0;32m$file\e[0m used"; fi; done;
它工作正常,虽然我是一个bash新手,所以它可以大大改善:
它仅搜索drawables资源(XML文件上为@drawable/name
,Java文件上为R.drawable.name
。
顺便说一句,我不知道我的项目中没有使用boxscore
和calendarlogos
。另一个有趣的事实是大多数用户不使用Linux,所以这对太多人没有帮助。
对于MacOs会是这样的:
PROJECT="/path/to/the/project"
for file in $(ls -l $PROJECT/res/drawable | awk '{ print $9}' | sed 's/\..\+//g'); do count=0; for SRCFILE in `find $PROJECT -name "*.xml" -print 2> /dev/null`; do let "count+=$(grep -c @drawable/$file $SRCFILE)"; done; for SRCFILE in `find $PROJECT -name "*.java" -print 2> /dev/null`; do let "count+=$(grep -c R.drawable.$file $SRCFILE)"; done; if [ $count -lt 1 ]; then echo -e "$file not used"; else echo -e "$file used"; fi; done;
答案 2 :(得分:10)
检查一下: http://code.google.com/p/android-unused-resources
UPDATE 14.12.2011:现在您可以找到尽可能简单的未使用资源。更新到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.