我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解Android Lint的原理及其使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解Android Lint的原理及其使用

Android Lint 原理及使用详解


Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误。

Lint 是 Android 提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具。lint 工具可以检查你的 Android 项目源文件是否有潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。

Lint 既可以用作命令行工具,也可以与 Eclipse 和 IntelliJ 集成在一起。它被设计成独立于 IDE 的工具,我们可以在 Android Studio 中非常方便的使用它。

Lint 的工作过程

lint 工具的代码扫描工作流:

  • 应用源文件:源文件包含组成 Android 项目的文件,包括 Java、Kotlin 和 XML 文件、图标以及 ProGuard 配置文件。
  • lint.xml 文件:一个配置文件,可用于指定要排除的任何 lint 检查以及自定义问题严重级别。lint 工具:一个静态代码扫描工具,你可以从命令行或在 Android Studio 中对 Android 项目运行该工具。
  • lint 工具检查可能会影响 Android 应用的质量和性能的代码结构问题。强烈建议你先更正 lint 检测到的所有错误,然后再发布你的应用。
  • lint 检查结果:我们可以在控制台或 Android Studio 的 Inspection Results 窗口中查看 lint 检查结果。

Lint 的工作过程由 Lint Tool(检测工具),Source Files(项目源文件) 和 lint.xml(配置文件) 三个部分组成,Lint Tool 读取 Source Files,根据 lint.xml 配置的规则(issue)输出最终的结果。

Lint 的功能

Lint 可以检查并发现以下几类问题:

  • 缺少翻译(和未使用的翻译)
  • 布局性能问题(所有以前实用 layoutopt 工具用来查找的问题,等等)
  • 数组大小不一致
  • 可访问性和国际化问题(硬编码字符串,缺少 contentDescription 等)
  • 图标问题(例如缺少密度,重复的图标,错误的尺寸等)
  • 可用性问题(如未在文本字段中指定输入类型)
  • Manifest 错误

问题等级

Lint 发现的每个问题都有描述信息和等级,我们可以很方便地定位问题,同时按照严重程度进行解决。当然,我们也可以手动配置每个问题的严重级别。Lint 本身包含大量已经封装好的接口,能提供丰富的代码信息,开发者可以基于这些信息进行自定义规则的编写。

Lint 会按照问题的严重程度分为几个等级:

  • Fatal
  • Error
  • Warning
  • Information
  • Ignore

问题严重程序由高到低依次降低。

从命令行运行 lint

如果你使用的是 Android Studio 或 Gradle,你可以在项目的根目录下输入以下某个命令,使用 Gradle 封装容器对项目调用 lint 任务:

在 Windows 上:


gradlew lint

在 Linux 或 Mac 上:


./gradlew lint

lint 工具完成其检查后,会提供 XML 和 HTML 版 lint 报告的路径。然后,我们可以转到 HTML 报告并在浏览器中将其打开

Android Studio 中使用 Lint

Lint 已经被集成到 Android Studio,所以可以直接使用,使用非常方便。lint 的代码扫描工具,可帮助你发现并更正代码结构质量的问题,而无需您实际执行应用,也不必编写测试用例。系统会报告该工具检测到的每个问题并提供问题的描述消息和严重级别,以便你可以快速确定需要优先进行的关键改进。此外,你还可以降低问题的严重级别以忽略与项目无关的问题,或者提高严重级别以突出特定问题。

从菜单栏,选择Analyze > Inspect Code

选择检查范围

选择后,点击"OK",稍等一会就会生成扫描结果:

左侧是问题分类,选中一个问题条目,则右侧会展示具体的问题代码,这样就可以很方便的进行问题排查、定位和更改了。

Android 的规则类别:

  • Accessibility 辅助选项,例如 ImageView 缺少 contentDescription 描述,String 编码字符串等问题。
  • Compliance 合规性,违反了Google Play的要求,比如使用了过期的库版本,性能、安全性、API等级等没有遵循新系统的要求等。
  • Correctness 不够完美的编码,比如硬编码、使用过时API等。
  • Internationalization 国际化,如直接使用汉字,没有使用资源引用等。
  • Interoperability 互操作性,比如和Kotln的交互等。
  • Performance 性能,例如:静态引用,循环引用等。
  • Security 安全性,例如没有使用 HTTPS 连接 Gradle,AndroidManifest 中的权限问题等。
  • Usability 易用性,有更好的替换的,例如缺少某些倍数的切图,排版、图标格式建议.png格式等等。

lint 配置

配置 lint 文件

我们可以在 lint.xml 文件中进行 lint 配置。我们可以手动创建该文件,并放置在 Android 项目的根目录下。

lint.xml 文件由封闭的 父标记组成,此标记包含一个或多个 子元素。lint 会为每个 定义唯一的 id 属性值。


<?xml version="1.0" encoding="UTF-8"?>
<lint>
        <!-- list of issues to configure -->
</lint>

我们可以通过在 标记中设置严重性级别属性来更改某个问题的严重性级别或对该问题停用 lint 检查。

下面来看一个示例:


<?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>

禁用某个文件或方法进行 lint 检查

如果我们在 Android 项目中想对某个类或方法禁用 lint 检查,可以请向该代码添加 @SuppressLint 注解。

以下示例展示了如何对 onCreate 方法中的 NewApi 问题停用 lint 检查。lint 工具会继续检查该类的其他方法中的 NewApi 问题。


@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

以下示例展示了如何对 FeedProvider 类中的 ParserError 问题停用 lint 检查:


@SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {

要禁止 lint 检查文件中的所有问题,请使用 all 关键字,如下所示:


@SuppressLint("all")

xml 文件的 lint 检测配置

我们可以使用 tools:ignore 属性对 XML 文件的特定部分停用 lint 检查。在 lint.xml 文件中添加以下命名空间值,以便 lint 工具能够识别该属性:


namespace xmlns:tools="http://schemas.android.com/tools"

以下示例展示了如何对 XML 布局文件的 元素中的 UnusedResources 问题停用 lint 检查。如果某个父元素声明了 ignore 属性,则该元素的子元素会继承此属性。在本示例中,也会对 子元素停用 lint 检查。


<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"

要禁止 lint 检查 XML 元素中的所有问题,请使用 all 关键字,如下所示:


tools:ignore="all"

通过 Gradle 配置 lint 选项

通过 Android Plugin for Gradle,我们可以使用模块级 build.gradle 文件中的 lintOptions {} 代码块配置某些 lint 选项,例如要运行或忽略哪些检查。

例如:


android {
  ...
  lintOptions {
    // Turns off checks for the issue IDs you specify.
    disable 'TypographyFractions','TypographyQuotes'
    // Turns on checks for the issue IDs you specify. These checks are in
    // addition to the default lint checks.
    enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
    // To enable checks for only a subset of issue IDs and ignore all others,
    // list the issue IDs with the 'check' property instead. This property overrides
    // any issue IDs you enable or disable using the properties above.
    check 'NewApi', 'InlinedApi'
    // If set to true, turns off analysis progress reporting by lint.
    quiet true
    // if set to true (default), stops the build if errors are found.
    abortOnError false
    // if true, only report errors.
    ignoreWarnings true
  }
}
...

在 Android Studio 中修改 lint 配置文件

我们可以很方便的在 Android Studio 中修改 lint 检查时的配置。

Android Studio 附带了许多 lint 及其他检查配置文件,这些配置文件可通过 Android 更新进行更新。我们可以原封不动地使用这些配置文件,也可以修改它们的名称、说明、严重级别和范围。当然,还可以激活和禁用整组的配置文件或一组配置文件中的个别配置文件。

依次选择 Analyze > Inspect Code,在 Specify Scope 对话框的 Inspection Profile 下,点击 More。

此时将显示 Inspections 对话框,其中列出了支持的检查及其说明:

  1. 选择 Profile 下拉列表,以在 Default (Android Studio) 与 Project Default(活动项目)检查之间切换。
  2. 在左侧窗格的 Inspections 对话框中,选择一个顶级配置文件类别,或展开一个组并选择特定的配置文件。选择一个配置文件类别后,我们可以将该类别中的所有检查项目当作一个检查项目进行修改。
  3. 选择 Manage 下拉列表,以复制检查项目、对检查项目进行重命名、向检查项目添加说明以及导出/导入检查项目。
  4. 操作完成后,点击 OK。

以上就是详解Android Lint的原理及其使用的详细内容,更多关于Android Lint的原理的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解Android Lint的原理及其使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android TraceView和Lint使用详解及性能优化

Android lint工具是Android studio中集成的一个代码提示工具,它主要负责对你的代码进行优化提示,包括xml和java文件,很强大。编写完代码及时进行lint测试,会让我们的代码变得非常规范而且避免代码冗余。让我们及时发
2022-06-06

Android HandlerThread的使用及原理详解

一、HandlerThread的含义HandlerThread能够新建拥有Looper的线程。这个Looper能够用来新建其他的Handler。(线程中的Looper)需要注意的是,新建的时候需要被回调。 二、HandlerThread的用
2022-06-06

JavaScript中Promise的简单使用及其原理详解

Promise是ES6最重要的特性之一,今天小编就来带大家一起系统且细致的研究一下Promise的用法以及原理,感兴趣的小伙伴可以学习一下哦
2023-03-23

java中注解机制及其原理的详解

java中注解机制及其原理的详解什么是注解注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要
2023-05-31

SPFA算法的实现原理及其应用详解

SPFA算法,全称为Shortest Path Faster Algorithm,是求解单源最短路径问题的一种常用算法,本文就来聊聊它的实现原理与简单应用吧
2023-05-20

Spring@InitBinder注解使用及原理详解

这篇文章主要为大家介绍了Spring@InitBinder注解使用及原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-13

Android中Messenger原理及基本用法详解

这边博客主要记录一下Android中Messenger的基本原理和用法。 简单来讲,Messenger其实就是Binder通信的包装器,是一种基于消息传递的进程间通信工具。//Messenger实现了Parcelable接口,因此可以跨进程
2022-06-06

ThreadPoolExecutor线程池原理及其execute方法(详解)

jdk1.7.0_79 对于线程池大部分人可能会用,也知道为什么用。无非就是任务需要异步执行,再者就是线程需要统一管理起来。对于从线程池中获取线程,大部分人可能只知道,我现在需要一个线程来执行一个任务,那我就把任务丢到线程池里,线程池里有空
2023-05-31

RoaringBitmap原理及在Go中的使用详解

这篇文章主要为大家介绍了RoaringBitmap原理及在Go中的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-28

ADO.NET连接池的原理及其使用方法

本篇内容主要讲解“ADO.NET连接池的原理及其使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET连接池的原理及其使用方法”吧!不要关闭数据库中所有的连接,至少保证ADO.NE
2023-06-17

(手写)PCA原理及其Python实现图文详解

目录1、背景2、样本均值和样本方差矩阵3、PCA3.1 最大投影方差3.2 最小重构距离4、Python实现总结1、背景 为什么需要降维呢?因为数据个数 N 和每个数据的维度 p 不满足 N >> p,造成了模型结果的“过拟合”。有两种方法
2022-06-02

CRC校验原理及其C语言实现详解

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术。本文主要介绍了CRC校验原理及其C语言实现,感兴趣的可以了解一下
2023-03-10

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录