Skip to content

znbflyingant/AndroidLintDemo

Repository files navigation

lint

自定义lint规则

使用方式

可以项目依赖lintaar,也可以把lintaar打包成maven使用。然后在app的build.gradle下进行如下配置

 android节点下
  
   lintOptions {
        //这边可以对lint进行一些设置
        abortOnError false
    }
    
外层
android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        output.assemble.dependsOn lintTask
    }
}

另外可以在custome-lint-config.json中对一些变量进行设置。提高灵活性。命令行执行命名./gradlew lint 运行

lintOptions可配置项

lintOptions {
        // true--关闭lint报告的分析进度
        quiet true
        // true--错误发生后停止gradle构建
        abortOnError false
        // true--只报告error
        ignoreWarnings true
        // true--忽略有错误的文件的全/绝对路径(默认是true)
        //absolutePaths true
        // true--检查所有问题点,包含其他默认关闭项
        checkAllWarnings true
        // true--所有warning当做error
        warningsAsErrors true
        // 关闭指定问题检查
        disable 'TypographyFractions', 'TypographyQuotes'
        // 打开指定问题检查
        enable 'RtlHardcoded', 'RtlCompat', 'RtlEnabled'
        // 仅检查指定问题
        check 'NewApi', 'InlinedApi'
        // true--error输出文件不包含源码行号
        noLines true
        // true--显示错误的所有发生位置,不截取
        showAll true
        // 回退lint设置(默认规则)
        lintConfig file("default-lint.xml")
        // true--生成txt格式报告(默认false)
        textReport true
        // 重定向输出;可以是文件或'stdout'
        textOutput 'stdout'
        // true--生成XML格式报告
        xmlReport false
        // 指定xml报告文档(默认lint-results.xml)
        xmlOutput file("lint-report.xml")
        // true--生成HTML报告(带问题解释,源码位置,等)
        htmlReport true
        // html报告可选路径(构建器默认是lint-results.html )
        htmlOutput file("lint-report.html")
        //  true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建
        checkReleaseBuilds true
        // 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃
        fatal 'NewApi', 'InlineApi'
        // 指定问题的规则生成错误
        error 'Wakelock', 'TextViewEdits'
        // 指定问题的规则生成警告
        warning 'ResourceAsColor'
        // 忽略指定问题的规则(同关闭检查)
        ignore 'TypographyQuotes'
  }

lint.xml可配置项

<!--忽略这个id-->
<issue id="IconMissingDensityFolder" severity="ignore" />
<!--特殊路径不检查-->
<issue id="UselessLeaf">
    <ignore path="res/layout/main.xml" />
</issue>
<!--改变严重性-->
<issue id="HardcodedText" severity="error" />
<issue id="LogUtilsNotUsed" severity="error" />
<issue id="AttrNotPrefixed" severity="warning"/>
<issue id="NewThread" severity="warning"/>
<issue id="ShowToast" severity="error"/>
<issue id="ImageFileSizeOut" severity="error"/>

custome-lint-config可配置项

{
  "log-usage-message": "请勿使用android.util.Log,建议使用Logger工具类", //log打印工具可替换,根据项目来定
  "value-prefix": "app_", //string前缀,每个module可单独配置
  "image-file-maxsize": "100" //图片文件限制的大小
}

目前支持

AttrPrefixDetector

string的所有name命名加前缀,主要是为了防止组件化之后的资源冲突

BaseActivityDetector

所有activity必须继承BaseActivity,方便统一管理和防止统计遗漏

BroadcastDetector

广播成对出现,注册之后要在onDestroy中注销

ImageFileDetector

检查项目中图片的大小,防止过大图片的出现

LogDetector

统一使用Log打印工具,代码中不出现Log.e之类的代码

NewThreadDetector

不允许直接new Thread

ViewIdNameDetector

view的id命名规范,参照阿里的命名规范

MSTSerializableDetector

实体类是否序列化的检查,防止混淆后出错

知识点

参考

慕课网Android自定义Lint实践
自定义Lint调试与开发
美团外卖Android Lint代码检查实践
Android自定义Lint实践
使用 Lint 改进您的代码
Detector api
简书Android Lint
Psi查询文档
Android自定义Lint实践
官方Detector
Uast树版lint

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published