背景: 项目越来越大,由于暂时没有试行的代码标准,设计规范和单元测试等,这时候我们就需要一个自动化的分析工具,虽然AndroidStuido有相关的插件,但是只能在本地起作用而且不能同步到服务器生成图标和文档。基于此情况我们选择了sonar作为我们的代码分析工具 Sonar是什么 Sonar是一个可以将软件质量和度量数据整合到一起并且生成图标和文档的工具。它帮我们提供代码质量的快照以及落后的趋势和未来的质量指标,能够帮助我们做出正确的决策。Sonar真正突出的是它不仅提供代码的指标和统计信息,而且将这些技术数据转化为真是的商业价值。Sonar不仅针对核心开发人员和程序员,而且还针对项目经理以及更高的管理层面,因为Sonar提供了管理视角以及报告功能。 原因:为什么选Sonar,它能帮我们做什么
- 是否遵守了特定的编码规范
- 是否遵循了一直的最佳时间,便面了已知的不良实践
- 是否有潜在的BUG和性能问题、安全隐患、重复代码
- 代码逻辑是否很复杂
- 公开的API是否有完善的文档和注释
- 是否有单元测试
- 代码是否遵守了最佳的设计和架构 Android项目接入Sonar 一、环境准备 1.1 android相关(PS:只说需要什么,具体步骤自行谷歌)
- Gradle环境配置,建议配置相对较新而且稳定的,以免出一些未知bug费时费力
- java环境,老生常谈
- Android Studio软件,强烈推荐安装最新release版本 1.2 jenkins环境 jenkins搭建相对比较成熟,网上资料也很多,最好的实践是用ubuntu虚拟机自己搭一遍,当然也可以用Mac,搭建不难,比较繁琐,耐下心来就可以搞定,如果大家想特别了解细节可以留言 1.3 Sonar环境
- 这个相比之下需要会的比较多,mysql是必须的(建议大家可以自学一下SpringBoot+mysql+mybatis,自己搭建个后台,很有意思的),ubuntu和mac安装mysql都比较容易,有相应的命令直接可以安装
- 创建sonar需要的数据库,给与相应权限
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
从SonarQube官网从下载SonarQube并且安装,将mysql数据库进行配置,启动sonar,默认域名http://127.0.0.1:9000/sonar,账号密码默认都是admain 二、 sonar上创建应用 通过账号密码登录sonar环境,在项目->加号->创建进行应用的创建,创建完成会生成projectkey和token,还有接入的话域名也是要配置的。 三、 android项目配置
- 根目录build.gradle配置依赖
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8'
}
依赖gradle插件apply plugin: "org.sonarqube"
- sonar具体配置
sonarqube {
properties {
//property "sonar.projectName", "xxx"
property "sonar.projectKey", "xxx"
property "sonar.host.url", "http://xxx/"
//property "sonar.language", "java"
//property "sonar.sources", "src/main/"
property "sonar.login", "xxx"
//property "sonar.password", "password"
}
}
具体配置详情请查看官网,官网很详细,而且在issue上还有问题的解决方法。
- 运行:./gradlew sonarqube,build完成后可以在sonar上查看详细数据
四、jenkins上配置sonar
jenkins上配置有两种方式选取(大致原理是两种,可能还可以细化)
4.1通过jenkins的插件,这里同事已经整理的很好了,不做复述,点击查看详细地址
4.2通过shell或者python脚本进行android项目中sonar的task的调用 PS:这里有个小坑,jenkins和sonar都是外网或者同一局域网才可以,否则会推失败,坑已踩,大家可以少浪费点时间