Android lint配置及使用

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、将 lint 配置为不显示警告
    • 3.1 在 Android Studio 项目 中配置 lint
    • 3.2 配置 Java、Kotlin 和 XML 源文件的 lint 检查
    • 3.3 配置 Java 或 Kotlin 的 lint 检查
    • 3.4 配置 XML 的 lint 检查
    • 3.5 通过 Gradle 配置 lint 选项
  • 四、Android studio 运行lint检查
    • 4.1 去掉无用资源
    • 4.2 去掉 无用的import
    • 4.3 去掉无用声明
    • 4.4 去掉无用赋值
    • 4.5 去掉xml中未使用的命名空间声明或位置提示
    • 4.6 去掉无用依赖库
  • 五、从命令行运行 lint
  • 五、 推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习** lint 基础知识**,温故知新。

二、概览

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

lint 工具可以检查您的 Android 项目源文件是否有潜在的 bug,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。

lint 官网

三、将 lint 配置为不显示警告

默认情况下,当您运行 lint 扫描时,凡是 lint 可帮助检查的问题,lint 工具都会检查是否存在。
您也可以限定让 lint 只检查是否存在某些问题,并为这些问题指定严重级别。例如,您可以禁止 lint 检查是否存在与项目无关的特定问题,
还可以将 lint 配置为以较低的严重级别报告非关键问题。

您可以配置不同级别的 lint 检查:

全局(整个项目)
项目模块
生产模块
测试模块
打开的文件
类层次结构
版本控制系统 (VCS) 范围

3.1 在 Android Studio 项目 中配置 lint

可以在 lint.xml 文件中指定 lint 检查偏好设置,在项目的根目录下创建此文件,
通过在 标记中设置严重级别属性来更改某个问题的严重级别或禁止对该问题进行 lint 检查。

<?xml version="1.0" encoding="utf-8" ?>
<lint><!--配置所有Issue的默认优先级--><!--<issue id="all" severity="warning"/>--><!--配置指定Issue的优先级--><!--<issue id="ShowToast" severity="error"/>--><!--忽略指定路径的指定问题,支持正则表达式或path匹配--><!--<issue id="NewApi">--><!--<ignore regexp=".*MainActivity.java"/>--><!--<ignore path="**/com/paincker/lint/demo/MainActivity.java"/>--><!--<ignore path="res/layout/activation.xml"/>--><!--</issue>--><!--<issue id="all" severity="warning"/>--><!-- 忽略android建议的最小尺寸建议提示 --><issue id="SmallSp" severity="ignore"/><!-- 忽略 ButtonStyle--><issue id="ButtonStyle" severity="ignore"/><!-- 忽略拼写问题--><issue id="SpellCheckingInspection" severity="ignore"/><issue id="Spelling" severity="ignore"/><!-- 忽略对控件内容描述的检查 --><issue id="ContentDescription" severity="ignore"/><issue id="SameParameterValue" severity="ignore"/><issue id="UsingHttp" severity="ignore" ><ignore path="demo/gradle/wrapper/gradle-wrapper.properties" /></issue><!-- 忽略google提供的云端备份功能 --><issue id="AllowBackup" severity="ignore"/><issue id="RtlEnabled" severity="ignore" /><!-- 忽略Missing density variation folders in 'src/main/res': drawable-hdpi, drawable-mdpi, drawable-xxhdpi --><issue id="IconMissingDensityFolder" severity="ignore"/><issue id="GradleDependency" severity="ignore" />
</lint>

3.2 配置 Java、Kotlin 和 XML 源文件的 lint 检查

settings > Editor > Inspections
在这里插入图片描述

  • Accessibility 辅助选项,比如ImageView的contentDescription往往建议在属性中定义等。
  • Compliance 合规性,违反了Google Play的要求,比如使用了过期的库版本,性能、安全性、API等级等没有遵循新系统的要求等。
  • Correctness 不够完美的编码,比如硬编码、使用过时API等。
  • Internationalization 国际化,直接使用汉字,没有使用资源引用等
  • Interoperability 互操作性,比如和Kotln的交互等。
  • Performanc 对性能有影响的编码,比如:静态引用,循环引用等
  • Security 不安全的编码,比如在 WebView 中允许使用 JavaScriptInterface等
  • Usability 可用的,有更好的替换的 比如排版、图标格式建议.png格式等

3.3 配置 Java 或 Kotlin 的 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")

3.4 配置 XML 的 lint 检查

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

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

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

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:ignore="UnusedResources" ><TextViewandroid:text="@string/auto_update_prompt" />
</LinearLayout>

要禁止检查多个问题,请使用以英文逗号分隔的字符串列出要禁止检查的问题。例如:

tools:ignore="NewApi,StringFormatInvalid"

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


tools:ignore="all"

3.5 通过 Gradle 配置 lint 选项

通过 Android Plugin for Gradle,您可以使用模块级 build.gradle 文件中的 lint{} 代码块配置某些 lint 选项,例如要运行或忽略哪些检查。以下代码段展示了您可以配置的部分属性:

android {...lint {// 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.checkOnly '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// If true, lint also checks all dependencies as part of its analysis. Recommended for// projects consisting of an app with library dependencies.checkDependencies true}
}
...

四、Android studio 运行lint检查

通过依次选择 code > Inspect Code,手动运行配置的 lint 及其他 IDE 检查。检查结果将显示在 Inspection Results 窗口中
结果。
在这里插入图片描述

点击 OK 以运行检查。下图 显示了通过运行 Inspect Code 所生成的 lint 及其他 IDE 检查结果
在这里插入图片描述

下面我们列出一些常用的单独的选项

4.1 去掉无用资源

通过依次选择 code > Analyze Code > Run Inspection By Name
在这里插入图片描述

然后在对话框中输入 unused resources
在这里插入图片描述
点击ok

4.2 去掉 无用的import

通过依次选择 code > Analyze Code > Run Inspection By Name

在这里插入图片描述

然后在对话框中输入 unused import
在这里插入图片描述
点击ok

4.3 去掉无用声明

方式同上,
然后在对话框中输入 unused declaration

4.4 去掉无用赋值

方式同上,
然后在对话框中输入 unused assignment

4.5 去掉xml中未使用的命名空间声明或位置提示

方式同上,
然后在对话框中输入 unused schema declaration

4.6 去掉无用依赖库

方式同上,
然后在对话框中输入 unused library

constant conditional expression

更多选项请在 配置 Java、Kotlin 和 XML 源文件的 lint 检查 中查看。

五、从命令行运行 lint

如果您当前未使用 Android Studio 或 Gradle,您可以在通过 SDK 管理器安装 Android SDK 命令行工具后使用独立 lint 工具。
安装该组件后,您可以在 android_sdk/cmdline-tools/version/bin/lint 中找到 lint 工具。

如需对项目目录中的文件列表运行 lint,请使用以下命令:

lint [flags] <project directory>

例如,您可以发出以下命令来扫描 myproject 目录及其子目录下的文件。问题 ID MissingPrefix 提示 lint 仅扫描是否存在缺少 Android 命名空间前缀的 XML 属性。

lint --check MissingPrefix myproject

要查看该工具支持的标志和命令行参数的完整列表,请使用以下命令:

lint --help

下例显示了对一个名为 Earthquake 的项目运行 lint 命令时的控制台输出。

$ lint EarthquakeScanning 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

以上输出未列出任何错误,但列出了四条警告:其中三条警告(ManifestOrder、UsesMinSdkAttributes 和 UnusedResources)
出现在项目的 AndroidManifest.xml 文件中,一条警告 (IconMissingDensityFolder) 出现在 Preferences.xml 布局文件中。

五、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/125303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测

多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测 目录 多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现基于GWO-GRU灰狼算法优化门控循环单元的多变量时…

船舶稳定性和静水力计算——绘图体平面图,静水力,GZ计算(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java入门第三季

一、异常与异常处理 1. 异常简介 在Java中&#xff0c;**异常是程序在执行过程中出现的问题或意外情况&#xff0c;导致程序无法按照预期的流程进行。**异常处理是Java中用于处理程序中出现的异常的一种机制。 Java中的异常可以分为两大类&#xff1a;受检查的异常&#xff…

2023国赛数学建模B题思路分析 - 多波束测线问题

# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到…

Linux服务使用宝塔面板搭建网站,并发布公网访问 - 内网穿透

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

【ALM工具软件】上海道宁与Perforce为您带来用于整个生命周期的应用程序生命周期管理软件

Helix ALM是 用于整个生命周期的 应用程序生命周期管理的ALM软件 具有专用于 需求管理&#xff08;Helix RM&#xff09;、测试用例管理&#xff08;Helix TCM&#xff09; 问题管理&#xff08;Helix IM&#xff09;的功能模块 Helix ALM提供了 无与伦比的可追溯性 您将…

【解决】mysqladmin flush-hosts

问题 mysql出现 mysqladmin flush-hosts&#xff0c;是因为其他客户机连接错误次数过多时&#xff0c;mysql会禁止客户机连接。 解决方法 1、进入服务器数据库&#xff0c;打开数据库命令行界面输入 flush hosts; 此时便可连接 2、可以.修改mysql配置文件&#xff0c;在[…

LeetCode(力扣)46. 全排列Python

LeetCode46. 全排列 题目链接代码 题目链接 https://leetcode.cn/problems/permutations/ 代码 class Solution:def backtracking(self, nums, result, path, used):if len(path) len(nums):result.append(path[:])for i in range(len(nums)):if used[i]:continuepath.app…

2023年MySQL-8.0.34保姆级安装教程

重点放前面&#xff1a;演示环境为windows环境。 MySQL社区版本安装教程如下&#xff1a; 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤&#xff1a;①安装包的下载&#xff1b;②安装配置设置&#xff1b;③配置环境变量 一、MySQL安装包下载 下载官…

docker 生成镜像的几个问题

docker 生成镜像的几个问题 根据jdk8.tar.gz 打包Jdk8 镜像失败运行镜像报错差不多是网络ip错误,在网上说重启docker即可解决运行mysql5.7.25 镜像失败向daemon.json文件添加内容导致docker重启失败docker run 命令常用参数根据jdk8.tar.gz 打包Jdk8 镜像失败 首选做准备工作…

核货宝:收银系统后台一般是怎样的,有哪些功能

收银系统后台是一个重要的管理工具&#xff0c;它为企业提供了对收银机的全面控制和配置。收银系统后台是一个用于管理和配置收银机的软件界面。它通常由以下几个主要部分组成&#xff1a; 1. 登录和权限管理 收银系统后台需要一个安全的登录系统&#xff0c;以确保只有授权人…

使用命令行创建仓库

如果你还没有任何代码&#xff0c;可以通过命令行工具创建一个全新的Git仓库并初始化到本项目仓库中。 git clone https://e.coding.net/***/neurosens.git cd neurosens echo "# neurosens" >> README.md git add README.md git commit -m "first commi…

Pygame中Trivia游戏解析6-1

1 Trivia游戏简介 Trivia的含义是“智力测验比赛中的各种知识”。Trivia游戏类似智力竞赛&#xff0c;由电脑出题&#xff0c;玩家进行作答&#xff0c;之后电脑对玩家的答案进行判断&#xff0c;给出结果并进行评分。该游戏的界面如图1所示。 图1 Trivia游戏界面 2 游戏流程 …

基于SpringBoot的社团管理系统

基于SpringBootVue的社团管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 角色&#xff1a;普通用户、管理员 管理员&#xff1a;…

咪蒙团队转型做短剧行业,年收入近2个亿

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 很多人不知道咪蒙是谁&#xff0c;他曾经是公众号时代的no.1&#xff0c;她发一篇带广告的推文大几十万, 那个时候不知道带动多少人去做公众号,2019年发表不恰当文章而被封禁。 但最近我看到一则新…

【数据结构】二叉树的顺序结构实现及时间复杂度计算(二)

目录 一&#xff0c;二叉树的顺序结构实现 1&#xff0c;二叉树的顺序结构 2&#xff0c;堆的概念及结构 3&#xff0c;堆的接口实现 1&#xff0c;堆的创建 2&#xff0c;接口函数 3&#xff0c;初始化 4&#xff0c;销毁 5&#xff0c;是否增容 6&#xff0c;交换数据…

【线性表】

好久没更新啦&#xff0c;来喽来喽~~~ 喏&#xff0c;看这个图&#xff0c;什么意思呢&#xff1f;先容大家思考思考...... 目录&#xff1a; 1.线性表的定义 2.线性表的抽象数据类型 3.线性表的顺序存储结构 &#xff08;1&#xff09;顺序存储定义 &#xff08;2&#x…

LeetCode 面试题 02.07. 链表相交

文章目录 一、题目二、C# 题解 一、题目 给你两个单链表的头节点 headA 和 headB&#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null。 图示两个链表在节点 c1 开始相交&#xff1a;   题目数据 保证 整个链式结构中不存在环。…

Vue + Element UI 前端篇(九):接口格式定义

接口请求格式定义 前台显示需要后台数据&#xff0c;我们这里先把前后端交互接口定义好&#xff0c;没有后台的时候&#xff0c;也方便用mock模拟。 接口定义遵循几个规范&#xff1a; 1. 接口按功能模块划分。 系统登录&#xff1a;登录相关接口 用户管理&#xff1a;用户…

Windows无法删除分区怎么办?

我们知道Windows系统内置的磁盘管理工具是一个很实用的程序&#xff0c;可以帮助我们完成很多磁盘分区相关的基础操作&#xff0c;比如当我们想要删除硬盘上的某一个分区时&#xff0c;先想到的可能会是磁盘管理工具。但是当我们准备在磁盘管理工具中删除某个分区时&#xff0c…