Android自定义Lint检查-CustomLint
仓库地址
背景
1、大多代码规范都浮于表面,全靠开发自觉和Code Review来保障导致很多遗留的老大难问题。
2、基础模块很多规范只能通过注释或者文档来约束。
相关文档
安卓自定义lint实现
LintOption 文档
AS Lint支持
设计目标
开发自定义Lint规则,通过Android Studio提供的Inspections实时检测代码,对不规范的代码进行实时提示。
- 能够实时进行代码规范提示
- 实现仅对单个模块生效
- 可以控制提示等级
- 不增加包体积
- 不占用过多的系统内存
概览
Lint相关API
1、Issue:表示一个Lint规则。
2、Detector:用于检测并报告代码中的Issue,每个Issue都要指定Detector。
3、Scope:声明Detector要扫描的代码范围,例如JAVA_FILE_SCOPE、CLASS_FILE_SCOPE、RESOURCE_FILE_SCOPE、GRADLE_SCOPE等,一个Issue可包含一到多个Scope。
4、Scanner:用于扫描并发现代码中的Issue,每个Detector可以实现一到多个Scanner。
5、IssueRegistry:Lint规则加载的入口,提供要检查的Issue列表。
自定义规则举例:实现了Serializable接口的类,引用类型成员变量也必须要实现Serializable接口
class SerializableClassDetector : BaseDetector(), Detector.UastScanner {companion object {private const val REPORT_MESSAGE = "该对象必须要实现Serializable接口,因为外部类实现了Serializable接口"val ISSUE = Issue.create("SerializableClassCheck",REPORT_MESSAGE,REPORT_MESSAGE,Category.CORRECTNESS,10,Severity.ERROR,Implementation(SerializableClassDetector::class.java, Scope.JAVA_FILE_SCOPE))}override fun applicableSuperClasses(): List<String>? {return listOf(CLASS_SERIALIZABLE)}override fun visitClass(context: JavaContext, declaration: UClass) {for (field in declaration.fields) {//字段是引用类型,并且可以拿到该classval psiClass = (field.type as? PsiClassType)?.resolve() ?: continueif (!LintMatcher.matchClass(lintConfig.serializableConfig, psiClass)) returnif (!context.evaluator.implementsInterface(psiClass, CLASS_SERIALIZABLE, true)) {context.report(ISSUE,context.getLocation(field.typeReference!!),lintConfig.serializableConfig)}}}
}
// Lint规则注册入口
class CustomIssueRegistry : IssueRegistry() {override val issues: List<Issue>get() = listOf(SerializableClassDetector.ISSUE)
}
Uast相关的继承关系:
设置提示等级
1、可以直接在Preferences-Inspections中设置问题的严重程度
Error 红色波浪线
Warning 淡黄色背景色
WeakWarning 黄色波浪线
Server Problem
2、通过lintOption进行提示等级设置
LintOption 文档
效果
目前实现的自定义lint检查实时提醒效果如下
在Android Studio 3.x版本中,打开Android工程源码后,IDE会加载工程中的自定义Lint规则,在设置菜单的Inspections列表里可以查看,和原生Lint效果相同(Android Studio会在打开源文件时触发对该文件的代码检查)。
使用方法一
自定义lint检查代码都在lint模块(Java Module)中;lintlibrary是一个空的Android Module,负责将livelint打出的jar包打入一个aar包中。
app模块通过compileOnly依赖livelibrary模块,相关的自定义检测就会只对该模块生效了,并且不会打入release包中。
使用方法二
编译完成后,将"/lint/build/libs"的"lint.jar"文件复制到(mac下)".android/lint"目录下(没有lint目录,新建一个)即可。
如果没有出现实时的静态检测提示,rebuild项目,仍然失败重新Android Studio
如果多次尝试仍然没有实时提示,只能使用./gradlew lint
命令进行手动检查。
app/build/reports/lint-results.html生成的该文件中可以查看检查的详细结果。
Android自定义Lint检查-CustomLint相关推荐
- Android Studio 3.0+ 版本的自定义lint检查
Android Studio 3.0+ 版本的自定义lint检查 定义LintModule 开发lint规则 lint库依赖 新建log检查规则 LogDetactor IssueRegistry 注 ...
- 【我的Android进阶之旅】Android自定义Lint实践
背景 2017年8月份的时候,我在公司开始推广Lint.FindBugs等静态代码检测工具.然后发现系统自带的Lint检测的Issue不满足我们团队内部的特定需求,因此去自定义了部分Lint规则.这个 ...
- Android自定义Lint实践
Android Lint是Google提供给Android开发者的静态代码检查工具.使用Lint对Android工程代码进行扫描和检查,可以发现代码潜在的问题,提醒程序员及早修正. 为保证代码质量,美 ...
- 自定义Lint检查规则
文章目录 一.Lint基本使用介绍 1. 界面操作 2 命令行运行 二.自定义Lint规则 第一步:创建一个Lint规则库 1.1 定义Issue 1.2 定义Detector 1.3 定义并配置Re ...
- 【Android】lint检查
1 Android lint 检查 Android lint是一个静态代码分析工具. 它会对我们的代码进行扫描和检查,提前发现问题,通过lint tool工具输出一个文件,告诉我们哪行代码有问题. 具 ...
- Android 自定义 Lint 实现静态代码扫描工具
文章目录 关于静态代码扫描工具 Lint的简单使用 一.Lint 与 IDE 的结合使用 二.Lint 与 gradle 命令的结合使用 具体位置如下图: 生成的HTML在浏览器打开如图: 自定义 L ...
- Android Lint 检查规则的定制(基本篇)
本人博客原文 英文原文: http://tools.android.com/tips/lint/suppressing-lint-warnings http://tools.android.com/r ...
- android gradle lint,Android Lint
Android Lint 是有 Android SDK 提供的一种静态代码检测工具,用于检测 Android 的代码质量 Android Lint 的源码集成在 Android SDK Tools 1 ...
- Android Studio Lint 工具看完这一篇还不够
前言 以前对下面的问题,我的态度是,不报错就是没问题,报错就用快捷键,根据Android Studio提示修复问题,从来不去问个为什么?现在代码洁癖症越来越严重的我,忍不住想看清什么东西在搞鬼. 认真 ...
最新文章
- 程序员跳槽全攻略——读书笔记
- 完整的一次 HTTP 请求响应过程(一)
- Android Material Design之在RecyclerView中嵌套CardView实现
- Mysql主主同步详细操作过程
- php怎麼开bcmath_php-如何启用BCMath CentOS 6
- 如何给小朋友解释单摆运动_模仿小天才钟美美:小朋友都是天生的演员?
- UGUI 屏幕适配 导致 BoxCollider无效 解决记录
- 营业执照psd模板2020_荣誉证书聘书奖状模板,CFR矢量素材PSD源文件,700张精美套用...
- 互联网运营数据分析(1):流量分析
- 微信小程序之去除抖音、快手等视频平台水印!
- C#操作Word书签
- QQ微信可以上网,但是google浏览器上不了网怎么办?
- 基因表达谱热图的绘制
- 计算机要学什么知识,学电脑要先学什么 学电脑要学习什么知识
- QQ看点模块100条测试用例
- Vue3 全家桶 + Element Plus + Vite + TypeScript + Eslint 项目配置最佳实践
- 支付宝SDK官方下载地址
- python3 安装urllib3
- 一键式打造 DAO,M-DAO 或成 Web3 新宠儿
- java综合技术分享
热门文章
- 如何使用在线客服转接功能
- 机器学习思维导图(更新中)
- 新版PF使用说明文档
- bypass分流抢票(火车、高铁)
- win10pe 找不到硬盘 戴尔_要是遇到这样 开机找不到硬盘开不了机怎么办_解决方法教程一览-...
- IDEA如何自动/手动导入包
- 《VALORANT》: 双塔迷城的诞生
- 关于C#如何引用Microsoft.Office.Interop.Excel
- 能装linux的嵌入式,试试一张软盘可装下Linux(嵌入式Linux)
- 雨课堂网页端作业找不到的解决方法