Android Lint是很好的检查工具,可以帮助开发者检查很多问题,其中检查android项目重复的资源文件非常有用。
1、命令行下使用
Android Lint有很多命令,具体可以在网上查到。今天主要使用check,这个命令目的是只进行某个或某几个类型的检查,比如只检查无用的资源“lint --check UnusedResources <project dir>”。至于都有哪些类型的检查,可以输入命令"lint --list"来查看,也可以输入命令"lint
--show"来查看详细介绍。我们也可以把结果保存成文件,以便我们来查看,下面是一条简单的例子:
lint --simplehtml <savefile> --check UnusedResources <project dir>
这样就可以检查某个工程下的重复资源,并将结果保存成html文件方便查看(文件路径不需要加引号)。
2、idea下使用
eclipse下有lint的插件,而且网上相关介绍非常多,但是idea的相关文档就比较少。idea中已经支持android lint,如何使用呢?
在项目中点击右键,在出现的右键菜单中有“Analyze” --> “run inspaction by Name ...”。在弹出的搜索窗口中输入想执行的检查类型,如“Unused Resources”。不必全部输入就应该自动找到了,点击后会弹出“inspaction scope”选择窗口,选择检查的范围,一般选择整个项目或模块。“inspaction
scope”窗口下面还可以设置文件过滤,选择好后点ok就开始检查了。然后就可以根据检查结果来去除重复的资源。
3、idea项目检查不全问题。
对idea的android项目检查是发现问题,不论是使用命令行还是idea自带插件来检查重复资源,根据结果可以发现检查的并不全面,没有检查图片资源。但是网上一些文档却很明确lint能检查图片资源,那么问题出在哪里?
其实就是idea的android项目结构的问题,idea创建的android项目built后会发现R.java等临时文件里面其实是空的,而对图片资源检查就需要基于R.java这个文件来检查。那么idea项目的真正的R.java文件在哪里?
它的位置是“C:\Users\<username>\.IntelliJIdea13\system\compile-server\<projectname_*****>\targets\java-production\<projectname>\android\generated_sources\aapt\<packagename>\R.java”。
自己简单研究了一下,找出了一个比较笨拙的解决方法。对命令行和idea,具体解决方法有些不同:
(1)命令行下。在项目下手的建立gen文件夹,在其下建立包名对应的文件夹,然后将R.java复制到下面。然后再使用lint来进行检查就可以了。因为android默认的文件结构R.java文件是在gen下的,所以lint会去这个文件夹下找R.java文件。
(2)idea下。与命令行的方法类似,不过根据创建的项目类型的不同,R.java存在的文件夹也不同。比如maven项目会在“target\generated-sources\r”下(想知道本项目的R.java文件位置,可以在项目右键菜单“open modules setting” --> "modules"中,选择对应的模块下的"Android",在右边窗口中选择“Generated
Sources”选项卡,下面可以看到对应的设置,也可以对其进行修改。)。将R.java复制到对应的文件夹下替换空的R.java文件,然后在使用idea的lint来检查就会检查图片资源了。
小小总结一下,之所以idea项目会出现问题,究其原因还是idea没有将R.java等临时文件放在项目目录下,这也是idea的一个特色。上面的解决方法也比较笨拙,不知道是否还有更有效便捷的方法,如果有人知道希望可以指点一下。而且还有一个文件,就是styles.xml文件中重复的部分仍然无法检测出来,有人知道是什么问题么?
Android Lint 去除重复资源 之 idea探究