Android Lint是安卓强烈推荐的代码扫描工具,我会对官方的文档做一些翻译,并结合自己的理解进行一些整理。你也可以直接访问官方文档查看文档。 原文链接: https://developer.android.com/studio/write/lint.html?hl=zh-cn 。
在保证你的应用功能需求测试通过的同时,保证你的代码没有结构性错误也非常的重要。结构糟糕的代码,将会对你的应用可靠性和效率带来不利的影响,也会让代码难以维护。比如,你的xml中有未被使用的命名空间,既占用了空间,也会招致多余的处理。其他的错误,例如使用过时的api或者目标版本不支持的api,也会让代码运行不正确。
Android Studio提供了一个叫做Lint的代码扫描工具,能够帮助你轻松地找出并修复代码中的质量问题,不需要运行应用和写测试用例。工具把每个问题按照问题描述和严重级别报告给你,你也可以配置错误的严重等级忽略与项目不相关的错误,也可以提升错误的等级。这个工具有命令行结果,你可以很方便的集成进来做自动测试。
下面是Lint工具的工作原理。
Lint扫描流程
Application source files
应用资源文件包括代码,xml文件,图标文件,混淆器配置文件。
lint.xml文件
用来配置你想排除或者自定义的问题严重等级。
Lint工具
这个就是静态代码扫描的工具。
扫描结果
可以在控制台或者事件日志等地方看到扫描结果。
在Android Studio中,当你编译程序的时候,Lint会自动运行。查看修改问题严重等级,你可以打开设置File > Settings > Editor > Inspections 进行修改,这个是windows的设置,mac基本大同小异。在build.gradle中也可以修改配置。
android {
lintOptions {
// 设置成true关闭lint的分析进程
quiet true
// 设置成true, 当发现问题的时候就会终止gradle build
abortOnError false
// 设置成true,只报告错误
ignoreWarnings true
}
...
}
也可以手动执行扫描,在Analyze > Inspect Code下,然后制定扫描的范围。
lint [flags] <project directory>
举个例子,你可以用下面的命令去扫描myproject工程目录以及子目录。错误的ID是MissingPrefix,只扫描xml文件没有命名空间前缀的错误。
lint --check MissingPrefix myproject
其他的命令和参数可以通过下面这个方法查看:
lint --help
下面是Lint扫描Earthquake项目后的结果:
$ lint Earthquake
Scanning Earthquake: ...............................................................................................................................
Scanning Earthquake (Phase 2): .......
AndroidManifest.xml:23: Warning: <uses-sdk> tag appears after <application> tag [ManifestOrder]
<uses-sdk android:minSdkVersion="7" />
^
AndroidManifest.xml:23: Warning: <uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?" [UsesMinSdkAttributes]
<uses-sdk android:minSdkVersion="7" />
^
res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]
res: Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]
0 errors, 4 warnings
输入了4个警告,0个错误。错误的原因和位置都已经展示出来了,所以很方便找到并修复他们。
如果要忽略部分检查可以这样做:
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
@SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {
xml中是这样的
namespace xmlns:tools="http://schemas.android.com/tools"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="UnusedResources" >
<TextView
android:text="@string/auto_update_prompt" />
</LinearLayout>
tools:ignore="NewApi,StringFormatInvalid"
Infer 是facebook推出的一款静态代码扫描工具,支持Objective-C, Java, 和 C。使用过后觉得还不错,推荐给大家。
我是通过brew安装的,命令如下:
brew install infer
运行检查也非常简单
infer -- gradle xxxx(最后代表你要检查的项目名)
扫描的时间看项目大小,如果项目很大会特别的久,需要耐心等待。
扫描结果:
统计了不同的错误类型,还有错误代码的位置很详细,可能方便很多快找到问题。主要三种错误,可能的空指针,资源没释放:例如数据库或者输入输出流没有释放,context泄露。
有了这些工具帮助我们,我们项目中crash率和性能都得到了大大的提升,用户体验提升了不止一点点。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。