• 【工具】lint检测工具



    作用:发现代码质量问题

    android{
        lintOptions{
            // 相关配置
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们知道 gradle 的配置都会映射到一个java类,全局搜索LintOptions,我们发现com.android.build.gradle.internal.dsl包下有一个LintOptions.java文件,这个就是我们映射的Java类

    1. 检测方式

    1. 通过命令行检测:

      # 可以追加变体,比如 app:lintRelease 和 app:lintDebug
      gradlew app:lint
      
      • 1
      • 2
    2. 手动检测(推荐)

      在菜单栏中依次选择Code > Inspect Code,查看检测范围和配置文件,点击ok运行检查

      img

      查看检测结果

      img

    2. 配置文件

    如果希望可以忽略一些检测项或调整其严重等级,可以通过修改配置文件lint.xml方式,lint的工作方式如下图

    img

    可以手动创建lint.xml文件到Android项目的根目录下,配置文件定义的id优先默认配置

    
    <lint>
        
        <issue id="IconMissingDensityFolder" severity="ignore" />
    
        
        <issue id="ObsoleteLayoutParam">
            <ignore path="res/layout/activation.xml" />
            <ignore path="res/layout-xlarge/activation.xml" />
        issue>
    
        
        <issue id="UselessLeaf">
            <ignore path="res/layout/main.xml" />
        issue>
    
        
        <issue id="HardcodedText" severity="error" />
    lint>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    另外也可以通过Configure跳转到Androidstudio自带的默认配置文件

    img

    3. 属性

    1. abortOnError:发现错误,停止构建

      lintOptions{
          abortOnError false // 关闭该判断(默认开启),不建议这么做
      }
      
      • 1
      • 2
      • 3
    2. absolutePaths:报告文档是否输出全路径,默认相对路径

      lintOptions{
          absolutePaths false 
      }
      
      • 1
      • 2
      • 3

      生效对象包括build 中输出的蓝色定位URL

    3. check:设置只检查的类型

      可以进入sdk\tools\bin\下执行lint --list查看所有支持的检测项,也可以通过lint --show 命令长某一检测项的详细介绍

      lintOptions{
         check 'UnsuedResource'// 只检查未使用资源 
      }
      
      • 1
      • 2
      • 3

    其它属性可以参考官网按需查看

    4. 常见问题场景

    首先我们需要知道,规则是死的,代码是活的,并非所有的Lint警告都需要通过修改代码来解决,有些警告可以被当成善意的提醒,我们可以通过一些标注来忽略它

    如果是Java代码,我么可以通过@SuppressLint("警告名称")忽略

    @SuppressLint(HandlerLeak)
    @SuppressLint(“all”)  //如果不清楚警告名称,可以直接忽略all
    
    • 1
    • 2

    如果是xml文件,可以通过tools:ignore="警告名称"忽略

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:ignore="TextFields,HardcodedText,UselessParent">
     
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:ignore="all">
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. [Accessibility] Missing contentDescription attribute on image
      【原因】ImageView 中出现的提示,关注视力障碍人士
      【方案】添加contentDescription属性
    2. This Handler class should be static or leaks might occur (anonymous android.os.Handler)
      【原因】非静态内部类可能造成泄漏,外部类持有该引用无法释放
      【方案】将非静态内部类修改为静态内部类,并使用弱引用持有Activity
    3. Use new SparseIntArray(…) instead for better performance
      【原因】SparceArray效率要高于HashMap,提高内存效率
      【方案】使用该类取代传统的HashMap,还有SparseBooleanArray等形式
    4. Field can be converted to a local variable
      【原因】字段转成成局部变量,因为局部变量是栈中
      【方案】成员变量转成局部变量
    5. the resource ‘R.color.aqua’ appears to be unused
      【原因】检测到无效资源,没有调用
      【方案】建议删除
    6. This Cursor should be freed up after use with #close()
      【原因】Cursor使用完未释放
      【方案】释放掉
    7. This can be replaced with a tag
      【原因】如果FrameLayout是根布局,并且不提供北京或填充,它可以替换成 merge
      【方案】使用 merge 替换这样的 FrameLayout
    8. Consider using apply() instead; commit writes its data to persistent storage immediately, whereas apply will handle it in the background
      【原因】SharedPreferences的 commit写入数据时候是立刻写入,而apply是异步写入,前者在写入量较大情况下可能会存在主线程耗时的情况
      【方案】建议使用apply替换commit
  • 相关阅读:
    【k8s】Kubernetes 1.29.4离线安装部署(总)
    hive常用日期函数
    K8s 之 ReadinessProbe(就绪探针)使用的迷惑
    机器学习11—原型聚类之学习向量量化(LVQ)
    JavaScript 在未来可能出现哪些新的应用场景?
    opencv 进入源码的小技巧
    VPN都容易受到泄露流量的TunnelCrack攻击
    Debezium分享系列之:Debezium2.6稳定版本SQLSerer数据库Debezium connector核心知识点
    优雅的写好Vue项目代码 — 路由拆分、Vuex模块拆分、element按需加载
    jwbasta-vue 平台上线
  • 原文地址:https://blog.csdn.net/qq_37776700/article/details/127724704