pre { direction: ltr; color: rgba(0, 0, 10, 1); text-align: left }
pre.western { font-family: "Liberation Serif", serif; font-size: 12pt }
pre.cjk { font-family: "Droid Sans Fallback"; font-size: 12pt }
pre.ctl { font-family: "Droid Sans Fallback"; font-size: 12pt }
h2 { margin-top: 0.42cm; direction: ltr; color: rgba(0, 0, 10, 1); text-align: left }
h2.western { font-family: "Liberation Sans", sans-serif; font-size: 14pt; font-weight: normal }
h2.cjk { font-size: 14pt; font-weight: normal }
h2.ctl { font-size: 14pt; font-weight: normal }
h1 { margin-bottom: 0.21cm; direction: ltr; color: rgba(0, 0, 10, 1); text-align: left }
h1.western { font-family: "Liberation Sans", sans-serif; font-size: 14pt; font-weight: normal }
h1.cjk { font-family: "Droid Sans Fallback"; font-size: 14pt; font-weight: normal }
h1.ctl { font-family: "Droid Sans Fallback"; font-size: 14pt; font-weight: normal }
p { margin-bottom: 0.25cm; direction: ltr; color: rgba(0, 0, 10, 1); line-height: 120%; text-align: left }
p.western { font-family: "Liberation Serif", serif; font-size: 12pt }
p.cjk { font-family: "Droid Sans Fallback"; font-size: 12pt }
p.ctl { font-family: "Droid Sans Fallback"; font-size: 12pt }
code.ctl { font-family: "Liberation Mono", monospace }

1 lint简介

1.1 概述

lint是随Android SDK自带的一个静态代码分析工具。它用来对Android工程的源文件进行检查,找出在正确性、安全、性能、可使用性、可访问性及国际化等方面可能的bugs和可优化提升的地方。

1.2 lint工作流程

针对我们的项目,通过lint.xml配置lint分析的选项,执行检查后,会针对要分析的issue生成报告。

2 lint使用

有关lint的使用,有以下地方需要理解:

2.1 分析的范围

要对Android项目进行静态分析,首先就是指定要分析的源文件的范围。包括以下方面:

  1. 整个工程或模块。

  2. 目录和文件。

  3. xml和java文件中使用标签和注解来忽略检查。

  4. lint检查结果分warning和error两个等级,可以忽略warning问题。

2.2 检查的方面

lint工具提供了对代码的一系列不同方面的问题进行检查的功能。每一个问题(issue)都有它唯一的id。这些issue是分类的。
可以通过为工程配置lint.xml来指定要分析哪些方面的问题:
每个issue一个标签,可以指定它的严重性(severity)为ignore、error、warning等:
下面是一个lint.xml的示例:

<?xml
version="1.0" encoding="UTF-8"?>
<lint>
    <!--
Disable the given check in this project -->
    <issue
id="IconMissingDensityFolder" severity="ignore"
/>
    <!--
Ignore the ObsoleteLayoutParam issue in the specified files -->
    <issue
id="ObsoleteLayoutParam">
        <ignore
path="res/layout/activation.xml" />
        <ignore
path="res/layout-xlarge/activation.xml" />
    </issue>
    <!--
Ignore the UselessLeaf issue in the specified file -->
    <issue
id="UselessLeaf">
        <ignore
path="res/layout/main.xml" />
    </issue>
    <!--
Change the severity of hardcoded strings to "error" -->
    <issue
id="HardcodedText" severity="error" />
</lint>

在xml和java文件中,也可以禁用lint检查:

  • To disable lint checking for a specific Java class or method, use the @SuppressLint annotation.

  • To disable lint checking for specific sections of your XML file, use the tools:ignore attribute.

2.3 生成报告

lint分析完成后,可以生成xml、html格式的文档。文档具体指出了代码在不同方面所发现的问题,每个问题项都指出了在源文件的位置和问题描述。

3.
Android
Studio
中使用

lint提供了命令行接口,所以可以作为单独工具被使用,或者集成到ide的构建流程中去。
在Android
Studio中,通过菜单或者在Project视图以及代码视图中的右键菜单中选择Analyze
> Inspect Code就可以打开lint检查的对话框Specify
Inspection
Scope,在这里设置好要进行代码分析的范围,确定后工具就开始对代码进行检查了,完成后会自动打开Inspection工具窗口。

根据检测的类型分为以下三类:

1.
检测整个工程,以上截图中有
“Whole
project” 选项,选中即可。

2.
检测部分模块,比如
“/package/apps/Settings”
模块,首先在Android
Studio 左边的目录列表中点击选中这个模块的根目录,然后执行Analyze
> Inspect Code打开lint检查的对话框Specify
Inspection Scope,界面中就已经显示选中了刚才的“/package/apps/Settings”
模块,点击ok即可。

3.
检测某个文件,一种方法是打开这个文件,然后执行Analyze
> Inspect Code打开lint检查的对话框Specify
Inspection Scope,界面选中的就是当前打开的文件。另一中就是在目录中选中该文件,然后执行Analyze
> Inspect Code打开lint检查的对话框Specify
Inspection Scope。

下图,左边是分类了的问题,选中一个问题后,右边是针对此问题的详细说明。
Location指出了发生问题在源文件的位置,Problem
synopsis问题概要给出了此问题的解释,可以看到,在MaterialHeader类的源文件的21行,字段mPtrFrameLayout可以被
转换为局部变量使用。(局部变量具有更快的访问速度,而且更精确的变量范围具有更好的维护性)

在Android
Studio生成lint报告后,可以在Inspection工具窗口中快速定位到代码位置,就像logcat工具窗口那样,在下图右边,Problem
resolution标题下有“Convert
to
local”的连接,点击后可直接将当前问题修复!
Inspection窗口左边的工具栏,可以Export当前的分析结果为xml或html文件。

安卓性能测试之Lint测试的更多相关文章

  1. 【腾讯优测干货分享】安卓专项测试之GPU测试探索

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...

  2. 安卓app测试之Monkey测试

    一.Monkey特点 1.运行时机:一般是产品稳定后 首轮功能测试完成的夜间进行 2.需要知道packageName 3.目的:主要测试产品是否存在崩溃问题和ANR问题. 二.获取包名的两个方法 首先 ...

  3. 性能测试之LoardRunner 测试场景监控关注的几点

    1.系统业务处理能力,即通常我们在进行性能测试的时候,在特定的硬件和软件环境下考察的业务处理能力,即“事物”,需要关注当前.平时.峰值以及长远未来业务发展情况,考虑不同业务的处理数量,从而设定相应的业 ...

  4. 安卓性能测试之 adb shell 常用命令

    pm list packages 列出包名adb shell pm list packages:列出所有的包名.adb shell dumpsys package:列出所有的安装应用的信息adb sh ...

  5. Shell脚本 | 性能测试之启动流量

    安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...

  6. 性能测试之Windows常见性能计数器

    性能计数器(counter)是描述服务器或操作系统性能的一些数据指标.计数器在性能测试中发挥着“监控和分析”的关键作用,尤其是在分析系统的可扩展性.进行性能瓶颈的定位时,对计数器的取值的分析非常关键. ...

  7. [转载]软件测试之Web测试经典总结

    转载自:软件测试之Web测试经典总结 基于Web的系统测试在基于Web的系统开发中,如果缺乏严格的过程,我们在开发.发布.实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大.而且, ...

  8. 性能测试培训:Ajax接口级性能测试之jmeter版

    性能测试培训:Ajax接口级性能测试之jmeter版   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest认为工具 ...

  9. 老李分享知识:性能测试之TPS和吞吐率

    老李分享知识:性能测试之TPS和吞吐率        当增大系统的压力(或添加并发用户数)时,吞吐率和TPS的改变曲线呈大体一致,则系统基本稳定. 若压力增大时,吞吐率的曲线添加到一定程度后出现改变缓 ...

随机推荐

  1. Linux下配置远程免密登录

    第一步: 输入ssh-keygen: [root@localhost zookeeper-3.5.7]# ssh-keygen Generating public/private rsa key pa ...

  2. linux 系统 解决php -v查看到版本于phpinfo()打印的版本不一致问题

    发现问题的原因: 安装zip扩展后,配置成功,但是使用gitlab合并的时候发生错误,经检查,使用phpinfo打印出来的php版本为7.1,而使用linux度服务器 运行 php -v的版本却是5. ...

  3. 实践2:如何使用word2vec和k-means聚类寻找相似的城市

    理解业务 一个需求:把相似的目的地整理出来,然后可以通过这些相似目的地做相关推荐,或者是相关目的地的推荐 准备数据 Word2Vec算法:可以学习输入的文本,并输出一个词向量模型 对数据进行清洗,去出 ...

  4. 从读写角度,带你了解数仓的IO基本框架

    摘要:本文从读取和写入的角度分别描述了行存和列存的IO模型,并对文件结构做了简单介绍. 本文分享自华为云社区<GaussDB(DWS)基本IO框架>,作者: Naibaoofficial. ...

  5. CF809E题解

    给定一个排列 \(a_i\) 和一棵树,求: \[\frac 1 {n(n-1)}\sum_{i=1}^n\sum_{j=1}^n \varphi(a_i \times a_j) \times dis ...

  6. python 装饰器的使用

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...

  7. [Java编程思想] 第二章 一切都是对象

    第二章 一切都是对象 2.1 用引用操纵对象   创建一个String引用: String s;   这里所创建的只是引用,并不是对象.   创建一个引用的同时便初始化: String s = &qu ...

  8. Python:用pyinstrument做性能分析

    导引 在计算密集型计算或一些Web应用中,我们常常需要对代码做性能分析.在Python中,最原始的方法即是使用time包中的time函数(该函数以秒为计时单位): from time import s ...

  9. 配置 PackMan 镜像

    一.参考链接 阿里云镜像站 二.PackMan 镜像介绍 Packman 是 OpenSUSE 最大的第三方软件源,主要为 OpenSUSE 提供额外的软件包,包括音视频解码器.多媒体应用.游戏等. ...

  10. python轻松入门——爬取豆瓣Top250时出现403报错

    关于爬虫程序的418+403报错. 1.按F12打开"开发者调试页面"如下图所示:按步骤,选中Network,找到使用的接口,获取到浏览器访问的信息. 我们需要把自己的python ...