赞
踩
首先,确保你的机器上已经安装了Java 11(Oracle JRE 11或OpenJDK 11),并且配置了相应的环境变量,这是运行SonarQube的先决条件。
SonarQube的版本为9.1。
图1配置jdk
其次,在Android Studio中安装SonarLint插件。这可以通过访问Android Studio的插件市场,搜索并下载SonarLint插件来完成。安装完成后,按照指导重启Android Studio。
图2 安装SonarLint插件
在官网下载SonarQube
图3下载SonarQube
安装 SonarQube,将SonarQube的压缩包解压至 Windows 某个路径
图4解压SonarQube
找到Path…\sonarqube-9.1.0.47736\bin\windows-x86-64\ StartSonar.bat 双击启动
图5 启动SonarQube
SonarQube服务器启动成功。
图6 SonarQube启动成功
在网页中打开http://localhost:9000,初始账号密码都是admin。
图7登录服务器
在Android Studio配置SonarQube,在Android Studio的菜单栏中点击 File > Settings,在搜索框中搜索SonarLint
图8-1 找到settings
图8-2 搜索SonarLint
在小米便签项目中配置SonarQube,自定义Connection Name,并在SonarQube URL:中粘入http://localhost:9000/
图9 配置SonarQube URL
选择Login/Password,填入登录的SonarQube 账号密码
图10-1 配置SonarQube账号密码
图10-2 配置SonarQube账号密码
在项目中配置SonarQube
在build:gradle(Project)中添加插件:
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3"
图11-1 添加SonarQube插件
在build:gradle(Project)中添加如下代码:
- maven {
- url "https://plugins.gradle.org/m2/"
- }
图11-2在项目中配置SonarQube
在build:gradle(Project)中添加如下代码:
apply plugin: "org.sonarqube"
图11-3在项目中配置SonarQube
在gradle.properties中添加服务器配置
- systemProp.sonar.host.url=http://localhost:9000
-
- systemProp.sonar.login=admin
-
- systemProp.sonar.password=admin
打开网页http://localhost:9000,新建一个手工项目
图13-1 新建新建一个手工项目
自定义新建项目名称,需要记住
图13-2 自定义新建项目名称
创建本地分析项目
图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 } }
图14 在app项目中的build.gradle中添加配置
在Android Studio的File>>settings中,找到SonarLint在Connection中找到刚才设置的Connection Name 名称
图15 在Android Studio中配置SonarLint
打开Android Studio 的Terminar(终端)。
在Project 项目文件名字位置右键,打开Terminal
图16-1 打开Terminal
在Terminal中执行
./gradlew sonarqube
或者
gradlew sonarqube
开始运行
图16-2 输入命令
图16-3执行命令
命令执行成功
图16-4 执行成功
图17-1 查看分析报告
查看报告
图17-2 查看分析报告
图17-3 查看分析报告
对小米代码分析情况概述
在项目视图中选中待分析的包,在右键选项中使用SonarLint进行分析。对小米便签全部源码(37个文件)自动完成质量审查,得到如下代码质量分析报告:
图4-1-1 使用SonarQube进行分析
图4-1-2 SonarLint分析结果
在小米便签软件的源代码中,共审查出37个文件中的372个问题,经过人工审查,其中大量的问题在于规范和代码的简洁性要求,例如有45个Critical Issues为GTaskClient类中的常量命名问题,所以总体来说,小米便签软件的质量较为不错。
代码中的缺陷分为如下几个等级:
Blocker(阻断级): 这是最严重的缺陷级别,表示代码中存在严重的问题,可能会导致系统崩溃、数据丢失或者安全漏洞等严重后果。这些问题需要立即解决,以确保系统的可靠性和安全性。
Critical(严重级): 这类缺陷表示代码中存在严重的问题,可能会导致系统功能严重受损或性能显著降低。尽管它们不会导致系统崩溃,但仍然需要尽快修复,以免对系统的整体可用性和用户体验造成不利影响。
Major(重要级): 这类缺陷表示代码中存在较严重的问题,可能会对系统功能或性能产生一定影响,但影响程度没有严重缺陷那么严重。尽管修复这些问题不是非常紧急,但也应该在适当的时候解决,以确保系统的质量和稳定性。
Minor(次要级): 这类缺陷表示代码中存在一些小问题或者改进建议,对系统功能或性能影响较小。修复这些问题通常是可选的,可以在其他重要任务完成之后再考虑。
Info(信息级): 这类缺陷并不影响代码的功能或性能,而是提供一些额外的信息或者改进建议,以帮助开发人员编写更好的代码。
现对代码存在的质量问题进行汇总统计,对严重程度为Blocker、Critical和Major的问题进行逐一的分析:
1)严重程度:Blocker
图4-2-1 严重程度Blocker
这个警告表明在使用 FileOutputStream 打开文件时,没有使用 try-with-resources 或在 finally 语句块中手动关闭流。这可能导致资源泄漏,因为文件流没有被正确地关闭。
在 Java 中,可以使用 try-with-resources 语句来自动关闭实现了 AutoCloseable 接口的资源,包括文件流。这样可以确保资源在使用完毕后被正确关闭,无需手动编写 finally 语句块。
2)严重程度:Critical
图4-2-2 严重程度Critical
要使用静态访问 "MIMETYPE",你可以直接使用类名 "ContactsContract.DataColumns",而不需要创建该类的实例。这样做可以更清晰地表达意图,因为 "MIMETYPE" 是该类的静态成员。
图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.
图4-2-4 严重程度Major
添加一个私有构造函数来隐藏隐式公共构造函数。
Change the visibility of this constructor to "protected".
图4-2-5 严重程度Major
将这个构造函数的可见性改为"protected"。
4)严重程度:Minor
Replace the type specification in this constructor call with the diamond operator ("<>").
图4-2-6 严重程度Minor
将此构造函数调用中的类型说明替换为菱形操作符("<>")
Rename this fieId "NOTES SNIPPET SEARCH QUERY" to match the regular expression '^[a-z][a-zA-Z0-9]*$'
图4-2-7 严重程度Minor
将此字段重命名为“NOTES SNIPPET SEARCH QUERY”以匹配正则表达式“^[a-z][a-zA-Z0-9]*$”。
5)严重程度:Info
Complete the task associated to this ToDO comment.
图4-2-8 严重程度Info
完成与此ToDO注释关联的任务。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。