我正在寻找一种有效的方法来确定是否在 Java 或 XML 文件中使用了资源(主要是可绘制对象)。
问题是,在我当前的项目中,drawables 经常更改,现在我有一些drawables,可能永远不会使用。
有没有一种工具/方法可以在不搜索整个项目中的每个文件名的情况下找到那些未使用的可绘制对象?
我写了一个基于python的工具来解决这个问题。由于这里不是直接分享的地方,所以我创建了一个现在离线的项目页面。
更新:
开发已经停止,因为 Lint 可以做同样的事情并且已经包含在 Android SDK 中。
我写这个 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 新手,所以它可以得到很大的改进:
它仅搜索可绘制资源(@drawable/name
在 XML 文件和R.drawable.name
Java 文件上)。
顺便说一句,我不知道,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;
检查这个: http ://code.google.com/p/android-unused-resources
更新 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.