读完文章大概需要1.5分钟
“近来有一个Android小项目需要优化, 包括从AndroidManifest.xml删除不必要的permission(权限)。
需要删除的权限有点多, 而我又不是很确定哪些权限对于App是必要的。如果我这样做: 每删除一个权限, 就运行一下App, 看各样功能正常不, 那就太费时间了。
或者, 我可以写Android Instrumentation Test测试来检测每一次删除的permission是不是导致App运行错误。
但这些方法都好麻烦~
有没有更简单快捷的方式呢? 要知道程序员是要懂得偷懒的。
我想到了Lint。
Lint是什么?
Lint是一种工具程式的名称,它用来标记原始码中,某些可疑的、不具结构性(可能造成bug)的段落。
它是一种静态程序分析工具,最早适用于C语言,在UNIX平台上开发出来。后来它成为通用术语,可用于描述在任何一种电脑程式语言中,用来标记原始码中有疑义段落的工具。
Lint规则
Lint检测不少规则, 你可以输入以下命令来查看:
lint --show
Lint的报告
Lint的报告就是Lint检测完指定项目后生成的一个文件, 可以是HTML, XML等格式, 指明了哪些地方需要优化和改正。
Lint报告类似这样:
Lint测试生成的报告还可以被[SonarQube](http://www.sonarqube.org/)这样的开源代码质量管理系统以图表的形式展示出来, 非常利于项目优化。
下次我会写一篇SonarQube配合各种工具生成报告的文章。先来一睹为快吧:
上图是SonarQube的报告示例。
Android项目中使用Lint
Android的Lint官方教程, 需要番茄的链接:
https://developer.android.com/studio/write/lint.html
我们可以在Android Studio的Gradle配置文件中设置Lint的检测规则:
然后, 可以在Android Studio中直接启动Lint检测:
点击Android Studio的菜单栏中的Analyze -> Inspect code, 选择要用Lint检测的项目(当然了, 你也可以不检测所有Lint规则, 而是选择Run Inspection by Name, 然后输入规则名字, Lint就只会检测此项规则 ), 可以是整个Project, 或者是一个Module :
或者用命令行的模式来启动Lint检测:
到项目的根目录中, 输入下面的命令, 回车
./gradlew lint
Gradle工具就会编译你的项目, 生成Lint测试的报告:
看到上图中说:
Wrote HTML report to file:///home/exe/qksms/QKSMS/build/outputs/lint-results-noAnalyticsDebug.html
Wrote XML report to file:///home/exe/qksms/QKSMS/build/outputs/lint-results-noAnalyticsDebug.xml
意思是:
* HTML格式的报告已生成, 在/home/exe/qksms/QKSMS/build/outputs/lint-results-noAnalyticsDebug.html
* XML格式的报告已生成, 在/home/exe/qksms/QKSMS/build/outputs/lint-results-noAnalyticsDebug.xml
Android Studio中配合Lint来检测缺失的permission
可以配置Lint检测permission的规则, 点击Android Studio的菜单栏中的File -> Settings, 在搜索框中输入lint, 再在子搜索框中输入permission, 然后可以勾选。
在Android Studio中运行Lint, 或者用上面说过的命令行。
在生成的报告中, 可以查看
Android -> Constant and Resource Type Mismatches
里面就会有Missing permission
总结
Lint是非常有用的一个代码监测工具, 可以审查很多种编程语言, 配合Android开发非常好用, 至于更多Lint的特性和使用, 请参考网上更多教程。