基于小米便签开源代码在Android中配置SonarQube并进行分析

2024-06-04 3993阅读
  • 自行安装AndroidStudio,我的AndroidStudio版本 Android Studio Hedgehog | 2023.1.1
  • 基于AndroidStudio配置SonarQube(工具配置步骤,SonarQube)
  • SonarQube版本sonarqube-9.1.0.47736
  • jdk11 + AndroidStudio + SonarQube9.1 + MiNotes
  • 百度网盘: https://pan.baidu.com/s/1Pc2UIhM7snZT8ziyzduxiw?pwd=1111基于小米便签开源代码在Android中配置SonarQube并进行分析 第1张https://pan.baidu.com/s/1Pc2UIhM7snZT8ziyzduxiw?pwd=1111

    首先,确保你的机器上已经安装了Java 11(Oracle JRE 11或OpenJDK 11),并且配置了相应的环境变量,这是运行SonarQube的先决条件。

    SonarQube的版本为9.1。

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第2张

    图1配置jdk

    其次,在Android Studio中安装SonarLint插件。这可以通过访问Android Studio的插件市场,搜索并下载SonarLint插件来完成。安装完成后,按照指导重启Android Studio。

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第3张

    图2 安装SonarLint插件

    在官网下载SonarQube

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第4张

    图3下载SonarQube

    安装 SonarQube,将SonarQube的压缩包解压至 Windows 某个路径

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第5张

    图4解压SonarQube

    找到Path…\sonarqube-9.1.0.47736\bin\windows-x86-64\ StartSonar.bat 双击启动

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第6张

    图5 启动SonarQube

    SonarQube服务器启动成功。

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第7张

    图6 SonarQube启动成功

    在网页中打开http://localhost:9000,初始账号密码都是admin。

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第8张

    图7登录服务器

    在Android Studio配置SonarQube,在Android Studio的菜单栏中点击 File > Settings,在搜索框中搜索SonarLint

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第9张

    图8-1 找到settings

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第10张

    图8-2 搜索SonarLint

    在小米便签项目中配置SonarQube,自定义Connection Name,并在SonarQube URL:中粘入http://localhost:9000/

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第11张

    图9 配置SonarQube URL

    选择Login/Password,填入登录的SonarQube 账号密码

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第12张

    图10-1 配置SonarQube账号密码

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第13张

    图10-2 配置SonarQube账号密码

    在项目中配置SonarQube

    在build:gradle(Project)中添加插件:

    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3"

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第14张

    图11-1 添加SonarQube插件

    在build:gradle(Project)中添加如下代码:

    maven {
        url "https://plugins.gradle.org/m2/"
    }

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第15张

    图11-2在项目中配置SonarQube

    在build:gradle(Project)中添加如下代码:

    apply plugin: "org.sonarqube"

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第16张

    图11-3在项目中配置SonarQube

    在gradle.properties中添加服务器配置

    systemProp.sonar.host.url=http://localhost:9000
    systemProp.sonar.login=admin
    systemProp.sonar.password=admin

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第17张

    打开网页http://localhost:9000,新建一个手工项目

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第18张

    图13-1 新建新建一个手工项目

    自定义新建项目名称,需要记住

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第19张

    图13-2 自定义新建项目名称

    创建本地分析项目

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第20张

    图13-3 创建本地分析项目

    在app项目中的build.gradle中添加配置,注意sonar.projectKey,对应的是自定义的名字

    sonarqube {
            properties {
                property "sonar.host.url", "http://localhost:9000"  //sonar管理系统地址
                property "sonar.login", "admin" // sonar管理系统账号
                property "sonar.password", "admin" // sonar管理系统密码
                property "sonar.sourceEncoding", "UTF-8"
                property "sonar.projectKey", "MItest" //sonar平台中相对应项目的key
                property "sonar.projectName", "MItest" //sonar平台中相对应项目的名字
                property "sonar.sources", "src/main/java" //源码,sonar检测的源文件目录
                property "sonar.projectVersion", project.version //版本,随意
                property "sonar.projectName", project.name
            }
        }

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第21张

    图14 在app项目中的build.gradle中添加配置

    在Android Studio的File>>settings中,找到SonarLint在Connection中找到刚才设置的Connection Name 名称

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第22张

    图15 在Android Studio中配置SonarLint

    打开Android Studio 的Terminar(终端)。

    在Project 项目文件名字位置右键,打开Terminal

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第23张

    图16-1 打开Terminal

    在Terminal中执行

    ./gradlew sonarqube

    或者

    gradlew sonarqube

    开始运行

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第24张

    图16-2 输入命令

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第25张

    图16-3执行命令

    命令执行成功

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第26张

    图16-4 执行成功

    1. 在http://localhost:9000/中打开项目,可以看到已经生成项目分析报告了

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第27张

    图17-1 查看分析报告

    查看报告

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第28张

    图17-2 查看分析报告

    基于小米便签开源代码在Android中配置SonarQube并进行分析 第29张

    图17-3 查看分析报告

    • 使用SonarQube进行分析

      对小米代码分析情况概述

      在项目视图中选中待分析的包,在右键选项中使用SonarLint进行分析。对小米便签全部源码(37个文件)自动完成质量审查,得到如下代码质量分析报告:

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第30张

      图4-1-1 使用SonarQube进行分析

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第31张

      图4-1-2 SonarLint分析结果

      在小米便签软件的源代码中,共审查出37个文件中的372个问题,经过人工审查,其中大量的问题在于规范和代码的简洁性要求,例如有45个Critical Issues为GTaskClient类中的常量命名问题,所以总体来说,小米便签软件的质量较为不错。

      代码中的缺陷分为如下几个等级:

      Blocker(阻断级): 这是最严重的缺陷级别,表示代码中存在严重的问题,可能会导致系统崩溃、数据丢失或者安全漏洞等严重后果。这些问题需要立即解决,以确保系统的可靠性和安全性。

      Critical(严重级): 这类缺陷表示代码中存在严重的问题,可能会导致系统功能严重受损或性能显著降低。尽管它们不会导致系统崩溃,但仍然需要尽快修复,以免对系统的整体可用性和用户体验造成不利影响。

      Major(重要级): 这类缺陷表示代码中存在较严重的问题,可能会对系统功能或性能产生一定影响,但影响程度没有严重缺陷那么严重。尽管修复这些问题不是非常紧急,但也应该在适当的时候解决,以确保系统的质量和稳定性。

      Minor(次要级): 这类缺陷表示代码中存在一些小问题或者改进建议,对系统功能或性能影响较小。修复这些问题通常是可选的,可以在其他重要任务完成之后再考虑。

      Info(信息级): 这类缺陷并不影响代码的功能或性能,而是提供一些额外的信息或者改进建议,以帮助开发人员编写更好的代码。

      现对代码存在的质量问题进行汇总统计,对严重程度为Blocker、Critical和Major的问题进行逐一的分析:

      1)严重程度:Blocker

      1. Use try-with-resources or close this "FileQutputStream" in a "finally" clause.

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第32张

      图4-2-1 严重程度Blocker

      这个警告表明在使用 FileOutputStream 打开文件时,没有使用 try-with-resources 或在 finally 语句块中手动关闭流。这可能导致资源泄漏,因为文件流没有被正确地关闭。

      在 Java 中,可以使用 try-with-resources 语句来自动关闭实现了 AutoCloseable 接口的资源,包括文件流。这样可以确保资源在使用完毕后被正确关闭,无需手动编写 finally 语句块。

      2)严重程度:Critical

      1. Use static access with "android.provider.ContactsContract$DataColumns" for "MIMETYPE"

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第33张

      图4-2-2 严重程度Critical

      要使用静态访问 "MIMETYPE",你可以直接使用类名 "ContactsContract.DataColumns",而不需要创建该类的实例。这样做可以更清晰地表达意图,因为 "MIMETYPE" 是该类的静态成员。

      1. Use static access with "android.provider.ContactsContract$DataColumns" for "RAW CONTACT ID".

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第34张

      图4-2-3 严重程度Critical

      要使用静态访问 "RAW CONTACT ID",你可以直接使用类名 "ContactsContract.DataColumns",并结合内部类 "RawContacts",而不需要创建该类的实例。这样做可以更清晰地表达意图,因为 "RAW CONTACT ID" 是该类的静态成员。

      3)严重程度:Major

      Add a private constructor to hide the implicit public one.

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第35张

      图4-2-4 严重程度Major

      添加一个私有构造函数来隐藏隐式公共构造函数。

      Change the visibility of this constructor to "protected".

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第36张

      图4-2-5 严重程度Major

      将这个构造函数的可见性改为"protected"。

      4)严重程度:Minor

      Replace the type specification in this constructor call with the diamond operator ("").

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第37张

      图4-2-6 严重程度Minor

      将此构造函数调用中的类型说明替换为菱形操作符("")

      Rename this fieId "NOTES SNIPPET SEARCH QUERY" to match the regular expression '^[a-z][a-zA-Z0-9]*$'

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第38张

      图4-2-7 严重程度Minor

      将此字段重命名为“NOTES SNIPPET SEARCH QUERY”以匹配正则表达式“^[a-z][a-zA-Z0-9]*$”。

      5)严重程度:Info

      Complete the task associated to this ToDO comment.

      基于小米便签开源代码在Android中配置SonarQube并进行分析 第39张

      图4-2-8 严重程度Info

      完成与此ToDO注释关联的任务。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]