利用代码扫描工具提升Android代码健壮性

原创 2016年05月30日 21:43:27

Android Lint

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中运行

在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

lint [flags] <project directory>

举个例子,你可以用下面的命令去扫描myproject工程目录以及子目录。错误的ID是MissingPrefix,只扫描xml文件没有命名空间前缀的错误。

lint --check MissingPrefix myproject

其他的命令和参数可以通过下面这个方法查看:

lint --help

lint输出示例

下面是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个错误。错误的原因和位置都已经展示出来了,所以很方便找到并修复他们。

在代码和xml中配置lint

如果要忽略部分检查可以这样做:

@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

Infer 是facebook推出的一款静态代码扫描工具,支持Objective-C, Java, 和 C。使用过后觉得还不错,推荐给大家。
我是通过brew安装的,命令如下:

brew install infer

运行检查也非常简单

infer -- gradle xxxx(最后代表你要检查的项目名)

扫描的时间看项目大小,如果项目很大会特别的久,需要耐心等待。

扫描结果:
这里写图片描述

这里写图片描述

统计了不同的错误类型,还有错误代码的位置很详细,可能方便很多快找到问题。主要三种错误,可能的空指针,资源没释放:例如数据库或者输入输出流没有释放,context泄露。

有了这些工具帮助我们,我们项目中crash率和性能都得到了大大的提升,用户体验提升了不止一点点。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android 代码检查工具SonarQube

代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一个。官网Sonar 概述        Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不...

Android 源码 crash 隐患静态扫描工具--GodEyes-android介绍

GodEyes-android 是一款针对Android App 的源码 crash 隐患扫描工具。特点包括: Godeyes专注于无线App代码Crash隐患静态扫描,主要有以下特性: 1. 扫...

使用四大插件提高Android中的代码质量

由于之后开发将会使用Android studio进而替代Eclipse作为高效的Android开发工具,所以今天分享一篇关于利用四种插件 lint、findBugs、PMD、 CheckStyles ...

Android 代码检查工具SonarQube

代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一个。官网 Sonar 概述         Sonar 是一个用于代码质量管理的开放平台。通过插件机制...

三款主流静态源代码安全检测工具比较

静态源代码安全检测工具比较 1. 概述 随着网络的飞速发展,各种网络应用不断成熟,各种开发技术层出不穷,上网已经成为人们日常生活中的一个重要组成部分。在享受互联网带来的各种方便之处的同时,安全问题...

源码漏洞扫描工具

1.HP fortify  SCA 扫描工具 主要是提供源码级别的安全漏洞扫描,可以输出完整的漏洞报告。支持业界主流的编程语言,支持各种操作系统平台,也能够支持集成在主流的IDE中。  对于jav...
  • yaka
  • yaka
  • 2012-04-27 00:15
  • 11566

静态代码分析工具汇总

转载:http://blog.csdn.net/testing_is_believing/article/details/6601494 静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)