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.rhkb.cn/news/365743.html

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

相关文章

linux中 nginx+tomcat 部署方式 tomcat挂掉设置自动启动

在Linux环境下&#xff0c;要实现当Tomcat挂掉后自动重启&#xff0c;可以通过编写Shell脚本结合cron定时任务或者使用系统守护进程&#xff08;如Systemd、Upstart或SysVinit&#xff09;来完成。 使用Shell脚本和cron定时任务 编写检查并重启Tomcat的Shell脚本&#xff1a;首…

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具&#xff0c;在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂&#xff0c;网站反爬虫技术的不断进步&#xff0c;网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战&#xff0c;HTTP 代理成…

Python容器 之 字符串--定义

目录 1.字符串如何定义&#xff1f; 2.定义字符串时遇到特殊内容怎么处理&#xff1f; 1)字符串本身包含引号&#xff0c;如&#xff1a;定义字符串 Im 小明、他叫“小明”。 &#xff08;1&#xff09;如果字符串本身包含单引号,定义的时候不能使用 单引号。 &#xff08…

【Linux】Linux下使用套接字进行网络编程

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 用于网络应用开…

SAP 替代关系完全替代简介

最近用户在对长周期物料进行备料的时候又提出替代料的问题,主料库存不足的时候需要考虑替代料的在途库存,经常会忘了SAP标准的替代料逻辑,这次一次性把这个逻辑写清楚。 关于替代料的逻辑在前面的博文中测试多个替代料的使用场景 1、后继物料 2、组合替代 本文主要测试一下…

Sentinel如何使用BlockExceptionHandler实现限流/降级错误页面显示

1、修改配置项&#xff0c;打开对Spring MVC端点的保护 spring.cloud.sentinel.filter.enabledtrue 2、编写 BlockExceptionHandler的实现类 MyUrlBlockHandler.java package com.codex.terry.sentinel.urlblockhandler;/*** 文件名称: MyUrlBlockHandler.java* 编写人: yh…

解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)

错误消息 ssh: connect to host IP port 22: Connection timed out 指出 SSH 客户端尝试连接到指定的 IP 地址和端口号&#xff08;默认 SSH 端口是 22&#xff09;&#xff0c;但是连接超时了。这意味着客户端没有在预定时间内收到来自服务器的响应。 可能的原因 SSH 服务未…

昇思25天学习打卡营第6天|linchenfengxue

​​​​​​SSD目标检测 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)以…

MATLAB-振动问题:单自由度阻尼振动系统受迫振动

一、基本理论 二、MATLAB实现 单自由度阻尼振动系统受迫振动&#xff0c;MATLAB代码如下&#xff1a; clear; clc; close allA 1; psi 0; F0 10; D 20; Rm 0.5; M 1; omega 2; delta Rm / (2*M); omega0 sqrt(D / M); Omega sqrt(omega0^2 - delta^2); Zm Rm i *…

Python学习路线图(2024最新版)

这是我最开始学Python时的一套学习路线&#xff0c;从入门到上手。&#xff08;不敢说精通&#xff0c;哈哈~&#xff09; 一、Python基础知识、变量、数据类型 二、Python条件结构、循环结构 三、Python函数 四、字符串 五、列表与元组 六、字典与集合 最后再送给大家一套免费…

Qt界面中的子窗口实现鼠标拖动边缘改变大小以及移动(完整demo代码)

目录 效果 拖拽 移动​编辑 实现 DragResizeWgt类.h文件 DragResizeWgt类.cpp文件 使用 testwidget窗口.ui文件 testwidget窗口.h文件 testwidget窗口.cpp文件 参考 效果 想要的效果就是类似于QT IDE中的效果&#xff0c;可以拖动边缘改变大小&#xff0c;用户自身可…

短视频抓取:成都柏煜文化传媒有限公司

短视频抓取&#xff1a;技术挑战、法律边界与未来趋势 随着移动互联网的迅猛发展&#xff0c;短视频平台如雨后春笋般涌现&#xff0c;成为现代人生活娱乐的重要组成部分。然而&#xff0c;在海量短视频内容中&#xff0c;如何高效、准确地抓取目标视频&#xff0c;成为了一个…

3D立体卡片动效(附源码)

3D立体卡片动效 欢迎关注&#xff1a;xssy5431 小拾岁月参考链接&#xff1a;https://mp.weixin.qq.com/s/9xEjPAA38pRiIampxjXNKQ 效果展示 思路分析 需求含有立体这种关键词&#xff0c;我们第一反应是采用动画中的平移、倾斜等实现。如果是立体&#xff0c;必然产生阴影&…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

24 年程序员各岗位薪资待遇汇总(最新)

大家好&#xff0c;我是程序员鱼皮。今天分享 24 年 6 月最新的程序员各岗位薪资待遇汇总。 数据是从哪儿来的呢&#xff1f;其实很简单&#xff0c;BOSS 直聘上有一个免费的薪酬查询工具&#xff0c;只要认证成为招聘者就能直接看&#xff0c;便于招聘者了解市场&#xff0c;…

线性代数基础概念:行列式

目录 线性代数基础概念&#xff1a;行列式 1. 行列式的定义 1.1 递归定义 1.2 代数余子式定义 1.3 几何定义 2. 行列式的性质 2.1 行列式等于其转置的行列式 2.2 交换两行或两列&#xff0c;行列式变号 2.3 将一行或一列乘以一个数 k&#xff0c;行列式乘以 k 2.4 将…

加密与安全_三种方式实现基于国密非对称加密算法的加解密和签名验签

文章目录 国际算法基础概念常见的加密算法及分类签名和验签基础概念常见的签名算法应用场景 国密算法对称加密&#xff08;DES/AES⇒SM4&#xff09;非对称加密&#xff08;RSA/ECC⇒SM2&#xff09;散列(摘要/哈希)算法&#xff08;MD5/SHA⇒SM3&#xff09; Code方式一 使用B…

App测试技术(纯理论)

之前我们也学习过一些普通用例的设计, 如功能, 性能, 安全性, 兼容性, 易用性, 界面的测试用例设计, 之前我们讲的基本都是对于Web应用而言的, 这里我们来讲一下移动端的App测试用例设计. 功能方面 安装&卸载测试 这是只属于App的一类测试, 再平常我们使用移动设备(手机…

鸿蒙 HarmonyOs 动画效果 快速入门

一、理论 1.1 animation属性 名称参数类型必填描述durationnumber否设置动画时长&#xff0c;默认值&#xff1a;1000&#xff0c;单位&#xff1a;毫秒temponumber否动画播放速度。数值越大&#xff0c;速度越快&#xff0c;默认为1curvestring | Curve否 设置动画曲线。 默…

喜提一等奖!白鲸开源在“创业北京”创业创新大赛海淀区选拔赛决赛表现亮眼

6月25日&#xff0c;第七届“创业北京”创业创新大赛海淀区选拔赛决赛在中关村东升国际科学园成功举办。本次活动由海淀区人力资源和社会保障局、中关村科学城管委会主办&#xff0c;以“创响新时代 共圆中国梦”为主题&#xff0c;活动现场主体赛先进制造赛道和主体赛现代服务…