Android Lint

文章目录

  • Android Lint
    • 概述
    • 工作流程
    • Lint 问题
      • 问题种类
      • 警告严重性
      • 检查规则
    • 用命令运行 Lint
    • AndroidStudio 使用 Lint
    • 忽略 Lint 警告
    • gradle 配置 Lint
    • 查找无用资源文件

Android Lint

概述

Lint 是 Android 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。

Lint 发现的每个问题都有描述信息和等级(和测试发现 bug 很相似),我们可以很方便地定位问题,同时按照严重程度进行解决。

官网

工作流程

Lint 会根据预先配置的检测标准检查我们 Android 项目的源文件,发现潜在的 bug 或者可以优化的地方。

在这里插入图片描述

Lint 问题

问题种类

  • Correctness:编码质量问题,可能包括硬编码的字符串、使用过时的API、无效的注释、废弃的代码路径等。
  • Security: 安全性问题,例如使用不安全的网络连接、在代码中泄露敏感信息、AndroidManifest 中的权限问题等。
  • Performance:性能相关的问题,例如无效的布局层次结构、不必要的资源加载、内存泄漏、过度使用静态变量、循环引用等。
  • Usability:易用性问题,比如缺少某些倍数的图像资源、布局方向依赖性、触摸目标大小不合理等。
  • Accessibility:辅助功能问题,比如 ImageView 缺少 contentDescription、不正确的视图聚焦顺序、文本大小或颜色对比度不足等。
  • Internationalization:国际化问题,如直接在代码中使用非英文字符而不是使用资源文件中的字符串、硬编码的日期和时间格式等。
  • Spelling:拼写错误问题,在代码或资源文件中的拼写问题。

警告严重性

  • Fatal:最严重错误,可能导致编译失败或应用崩溃,这些问题必须立即解决,否则项目无法构建。
  • Error:错误,可能导致应用行为不正确或不稳定。强烈建议修复这些错误,以保证应用的可靠性和稳定性。
  • Warning:警告,虽然可能不会阻止应用运行,但它们可能会影响应用的性能、安全性或用户体验。开发者应该评估这些警告,并考虑是否需要修复。
  • Info:信息提示,通常用于指出一些可能的改进点,或者是一些可能需要开发者注意但不一定需要立即修复的事项。
  • Typo,拼写错误。
  • Unused Entry:未使用的属性。

检查规则

Android Lint 支持大量的检查规则,每个规则都有一个唯一的ID。由于规则数量众多且不断更新,这里无法提供一个详尽无遗的列表,但我可以列举一些常见的Lint检查ID及其简要说明,帮助你理解它们的用途:

TypographyFractions: 检查分数显示方式是否正确。
TypographyQuotes: 检查引号使用是否一致。
UnusedResources: 检查是否存在未使用的资源。
deprecated-api: 检查是否使用了已弃用的 API。
EqualsHashCode: 检查类是否正确地实现了 equals() 和 hashCode() 方法。
MagicNumber: 检查是否有魔数(硬编码的数字)。
ArraySizeZero: 检查数组大小是否为零。
EmptyCatchBlock: 检查空的 catch 块。
ProguardRules: 检查 ProGuard 配置文件中的规则。
LayoutInflation: 检查布局文件中的视图引用是否正确。
UnusedResources - 检查项目中未使用的资源文件,包括图片、布局、字符串等。
ExtraTranslation - 检查是否有未在代码中使用的翻译字符串资源。
IconMissingDensityFolder - 警告图标缺失特定密度的文件夹,比如hdpi、xhdpi等。
MissingDefaultResource - 当资源引用了默认值但未提供时触发。
UnusedAttribute - 在XML布局文件中检测未使用的属性。
InefficientWeight - 布局中使用LinearLayout权重可能导致性能问题的警告。
HardcodedText - 查找代码中直接硬编码的文本,建议使用字符串资源。
Deprecated - 使用了已废弃的API或方法。
NewerVersionAvailable - 当使用了较旧的支持库版本时提醒有新版本可用。
SwitchIntDef - 当Switch语句没有覆盖所有@IntDef的情况发出警告。
GradleDependency - 检查依赖是否使用了正确的版本或指出潜在的依赖冲突。
SecurityDetector - 包含多种安全相关的检查,如不安全的网络请求、文件权限等。
ExportedReceiver - 未明确指定exported属性的BroadcastReceiver可能被外部应用调用。
AllowBackup - 应用是否允许备份,可能会导致敏感数据泄露。
PermissionLeak - 检测Activity、Service等组件注册后未注销可能导致的权限泄露。

可以点击:工具栏 -> Analyze -> Inspect Code -> Inspections 中查看所有规则。

用命令运行 Lint

  • 在 Windows 上:

    gradlew lint
    
  • 在 Linux 或 macOS 上:

    ./gradlew lint
    
指定模块
gradlew :app:lint

最终会在 build/reports 目录下生成 lint-results.html 等报告。

AndroidStudio 使用 Lint

一、点击:工具栏 -> Analyze -> Inspect Code… :

在这里插入图片描述

二、弹出对话框,选择扫描的作用域:

在这里插入图片描述

三、点击 Custom scope 自定义范围,弹出对话框:

  • Local:在当前项目中使用。
  • Shared:其他项目也可以使用。

在这里插入图片描述

四、 选择Shared,并取名为“MyShared”,显示如下:

在这里插入图片描述

右边4个按钮含义:

  • Include:包含当前文件夹内的文件,但不包含子文件夹。
  • Include Recursively:递归添加,包含当前文件夹和子文件夹内所有文件。
  • Exclude:移除当前文件夹,当不包含子文件夹。
  • Exclude Recursively:移除当前文件夹和子文件夹。

五、 点击“app”,并点击右边“Include Recursively”:

在这里插入图片描述

app目录颜色变绿,并提示有36个文件夹190个文件要扫码。

六、点击确定,开始扫码:

扫码结果如下:

在这里插入图片描述

切换视图:

在这里插入图片描述

详细问题:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

忽略 Lint 警告

代码忽略警告:

@SuppressWarnings@SuppressLint 都是用来抑制代码中特定警告的注解,@SuppressWarnings 主要针对Java编译器警告,而 @SuppressLint 特定于Android Lint工具的警告。

public class MyHandler extends Handler {// 忽略内存泄露风险@SuppressLint("StaticFieldLeak")private static Activity activity;public MyHandler(Activity activity) {this.activity = activity;}
}
// 忽略新API警告
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);
}
// 直接忽略
@SuppressLint("all")

XML忽略警告:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:ignore="all"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@color/white">

gradle 配置 Lint

  1. abortOnError:
    • 类型: Boolean
    • 默认值: false
    • 说明: 当设置为true时,如果Lint发现任何错误,Gradle构建将会终止。如果为false,即使发现错误构建也会继续。
  2. ignoreWarnings:
    • 类型: Boolean
    • 默认值: false
    • 说明: 如果设为true,Lint将忽略所有的警告级别问题,只报告错误级别的问题。这对于只想关注严重问题的场景很有用。
  3. quiet:
    • 类型: Boolean
    • 默认值: false
    • 说明: 当设为true时,Lint不会输出分析进度信息到控制台,使得输出更加简洁,仅显示最终的报告或错误信息。
  4. checkReleaseBuilds:
    • 类型: Boolean
    • 默认值: true
    • 说明: 控制是否在release构建时运行Lint检查。设为false可以跳过发布构建的Lint检查,加快构建速度。
  5. warningsAsErrors:
    • 类型: Boolean
    • 默认值: false
    • 说明: 如果设置为true,则所有警告都将被视为错误处理,这会影响abortOnError的行为。
  6. checkAllWarnings:
    • 类型: Boolean
    • 默认值: true
    • 说明: 当设为false时,可以关闭某些非默认启用的警告检查,但通常建议保持为true以获取完整的检查覆盖。
  7. disable:
    • 类型: List<String>
    • 说明: 指定要禁用的特定Lint检查的ID列表。这允许你排除不关心或经常产生误报的检查。
  8. enable:
    • 类型: List
    • 说明: 指定要特别启用的Lint检查的ID列表,即使这些检查在默认配置中是禁用的。
  9. baselineFile:
    • 类型: File
    • 说明: 指定一个XML文件作为基线,只报告比基线中新增的问题。这有助于持续改进代码质量,而不需要立即解决历史问题。
  10. textReport:
    • 类型: Boolean
    • 默认值: false
    • 说明: 设置为true会在构建目录下生成文本形式的Lint报告。
  11. htmlReport:
    • 类型: Boolean
    • 默认值: false
    • 说明: 开启后会在构建目录生成HTML格式的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.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 set to true, lint only reports errors.ignoreWarnings true// If set to true, lint also checks all dependencies as part of its analysis.// Recommended for projects consisting of an app with library dependencies.checkDependencies true}
}

查找无用资源文件

点击:工具栏 -> Analyze -> Run Inspection By Name :

在这里插入图片描述

扫描出很多无用文件:

在这里插入图片描述

可以点击右边按钮“Remove All Unused Resources”删除。

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

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

相关文章

最小生成树拓展应用

文章目录 最小生成树拓展应用理论基础 题单1. [新的开始](https://www.acwing.com/problem/content/1148/)2. [北极通讯网络](https://www.acwing.com/problem/content/1147/)3. [走廊泼水节](https://www.acwing.com/problem/content/348/)4. [秘密的牛奶运输](https://www.ac…

用英文介绍芝加哥(1):Making Modern Chicago Part 1 Building a Boomtown

Making Modern Chicago | Part 1: Building a Boomtown Link: https://www.youtube.com/watch?vpNdX0Dm-J8Y&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index4 Summary Summary of Chicago’s History and Development Urban Planning and Growth Chicago, often r…

无需向量量化的自回归图像生成

摘要 https://arxiv.org/pdf/2406.11838 传统观点认为&#xff0c;用于图像生成的自回归模型通常伴随着向量量化的标记。我们观察到&#xff0c;尽管离散值空间可以方便地表示分类分布&#xff0c;但它对于自回归建模来说并不是必需的。在这项工作中&#xff0c;我们提出使用扩…

战地战地风云最强的免费加速器 2024低延迟不卡顿加速器推荐

来喽来喽&#xff0c;steam夏季促销它又来喽&#xff0c;战地风云&#xff0c;第一人称射击游戏&#xff0c;而且这次迎来了史低&#xff0c;游戏背景设定为近未来&#xff08;公元2042年&#xff09;&#xff0c;会有动态的天气系统&#xff0c;以及改善后的破坏系统。该作为《…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(三)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2&#xff0c;将其和自己的2.5G交换机连接&#xff0c;使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿&#xff0c;几乎是几秒钟卡一下&#xff0c;使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…

React Native 开发常见问题及注意事项

本文只是使用时积累的一些经验 开发环境 1、Android Studio 依赖项下载慢 如果发现依赖下载非常慢&#xff0c;动不动十几KB的 参考&#xff1a;加速 Android Studio 依赖项下载 也可以切换数据源 修改 android/build.gradle中的jcenter()和google() repositories {// goo…

人脑计算机技术与Neuroplatform:未来计算的革命性进展

引言 想象一下&#xff0c;你在某个清晨醒来&#xff0c;准备开始一天的工作&#xff0c;而实际上你的大脑正作为一台生物计算机的核心&#xff0c;处理着大量复杂的信息。这并非科幻电影的情节&#xff0c;而是人脑计算机技术即将带来的现实。本文将深入探讨FinalSpark公司的…

选择适合你的8款原型设计工具

随着互联网的飞速发展&#xff0c;设计行业逐渐成为近年来的热门职业。设计师们需要的掌握的技能也越来越多&#xff0c;例如海报设计、名片设计、产品设计、网页设计等。产品原型设计就是产品设计中非常重要的一个阶段&#xff0c;主要目的是帮助用户更容易了解产品设计的思路…

深度学习 —— 1.单一神经元

深度学习初级课程 1.单一神经元2.深度神经网络3.随机梯度下降法4.过拟合和欠拟合5.剪枝、批量标准化6.二分类 前言 本套课程仍为 kaggle 课程《Intro to Deep Learning》&#xff0c;仍按之前《机器学习》系列课程模式进行。前一系列《Keras入门教程》内容&#xff0c;与本系列…

【机器学习】Whisper:开源语音转文本(speech-to-text)大模型实战

目录 一、引言 二、Whisper 模型原理 2.1 模型架构 2.2 语音处理 2.3 文本处理 三、Whisper 模型实战 3.1 环境安装 3.2 模型下载 3.3 模型推理 3.4 完整代码 3.5 模型部署 四、总结 一、引言 上一篇对​​​​​​​ChatTTS文本转语音模型原理和实战进行了讲解&a…

【语义分割系列】基于cityscape的DDRNet算法

基于cityscape的DDRNet算法 前言 DDRNet是专门为实时语义分割设计的高效主干。该模型由两个深度分支组成,在这两个分支之间执行多次双边融合,并且还设计了一个新的上下文信息抽取器,名为深度聚合金字塔池模块(DAPPM),用于扩大有效的接受域,并基于低分辨率特征映射融合…

计算机网络——数据链路层(数据链路层概述及基本问题)

链路、数据链路和帧的概念 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路&#xff0c;使之对网络层表现为一条无差错的链路。 链路(…

Steam夏促史低游戏推荐 Steam夏促哪有游戏值得入手

steam夏季促销来袭&#xff0c;有这很多的游戏都进行打折出售&#xff0c;而且还有这很多的游戏都迎来了史低&#xff0c;简直是白送&#xff0c;很多玩家都想趁着这个时间入手自己喜欢的游戏&#xff0c;为了方便大家了解&#xff0c;下面我给大家带来steam夏季促销史低的游戏…

CO-DETR利用coco数据集训练和推理过程

CO-DETR利用coco数据集训练和推理过程&#xff0c;参考链接 Co-DETR训练自己的数据集 文章目录 前言训练过程推理过程总结 前言 环境&#xff1a;PyTorch 1.11.0 Python 3.8(ubuntu20.04) Cuda 11.3 先是在github上下载CO-DETR模型 !git clone https://github.com/Sense-X/Co…

陌陌笔试--并发打印文件内最有钱的老板的消费金额(算法)

题目&#xff1a; 算法中需要打印消费前十老板的消费金额&#xff0c;解决保留两位小数&#xff0c;并发是 JAVA 中的常考题&#xff0c; 我这里简单模拟下了数据&#xff0c;关键数据是用户id和消费金额。 解题思路&#xff1a; 1. 最简单的思路是单线程&#xff0c;偷懒…

狂神说Java之 rabbitmq高级分布式事务

分布式事务的完整架构图 案例场景分析 案例一&#xff1a;用RestTemplate演示&#xff08;不可靠生产&#xff0c;会出现问题&#xff09; 创建一个订单模块 创建一个OrderDataBaseService服务 创建一个order的service服务&#xff0c;调用saveOrder()方法 创建一个运单模块…

软件设计流程和开发流程及规范(Word)

2 过程总体描述 2.1 过程概述 2.2 过程流程图 3 过程元素描述 3.1 产品方案 3.2 产品设计 3.3 产品实现 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#x…

找不到vcomp140.dll怎么办,总结多种解决方法

​在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp140.dll丢失”。那么&#xff0c;vcomp140.dll是什么&#xff1f;它为什么会丢失&#xff1f;丢失后对电脑有什么影响&#xff1f;又该如何解决呢&#xff1f;本文将详细介绍vc…

根据肥胖类型选择减调方向收获窈窕身材

我们生活中胖子很多&#xff0c;从胖到瘦的人也不少&#xff0c;但瘦了后对自己身材满意的人却是不多的&#xff0c;很多人瘦了也只是减掉了身上的赘肉而已&#xff0c;大体的身形却是没有变化的&#xff0c;因此&#xff0c;并不感到满意。因为他们本身的形体是固定的&#xf…