#sonar android上的实践html
因为sonarqube依赖MySql,因此须要安装MySql,安装教程java
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
#sonar.jdbc.username=
#sonar.jdbc.password=
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.sorceEncoding=UTF-8
//安装mysql是设置帐户和密码
sonar.login=admin
sonar.password=admin
复制代码
重启sonarqube服务,再次访问http://localhost:9000,会稍微有点慢,由于要初始化数据库信息,至此即可以在sonar上面安装插件了mysql
接下来能够安装中文插件,直接在配置->应用市场->搜索Chinese Pack而后安装重启就能够了android
先如今sonar-scanner,下载地址 下载以后编辑E:\sonar-scanner-3.2.0.1227-windows\conf\sonar-scanner.propertiesgit
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=root
sonar.jdbc.password=root
复制代码
而后在想要分析的android根目录下建立一个sonar-project.properties,内容以下github
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
#sonar.host.url=http://localhost:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
# must be unique in a given SonarQube instance
sonar.projectKey=StickyNavLayout-demo
# this is the name displayed in the SonarQube UI
sonar.projectName=StickyNavLayout-demo
sonar.projectVersion=7.5
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=E:\workplace\github\StickyNavLayout-demo\app\src
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
复制代码
而后在项目根目录下执行sonar-scanner 进行分析sql
作android开发的话,平时都在androidStudio上开发,若是按照方式一的话,每次新项目都要去建立文件,这样不是很方便,androidStudio gradle已经为咱们添加好sonar-scaner,能够经过下面方式进行配置数据库
apply from: "dependencies.gradle"
apply plugin: 'com.alibaba.arouter'
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
#1 配置maven创库
maven {
url "https://plugins.gradle.org/m2/"
}
google()
jcenter()
}
dependencies {
#2 配置 classpath
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2"
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
classpath "com.alibaba:arouter-register:1.0.0"
// classpath "com.mob.sdk:MobSDK:+"
classpath 'com.growingio.android:vds-gradle-plugin:2.4.3'
//用于方便调试性能问题的打印插件。给访法加上@DebugLog,就能输出该方法的调用参数,以及执行时间
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
#3配置plugin
apply plugin: "org.sonarqube"
#4配置task
sonarqube {
properties {
property "sonar.sourceEncoding", "UTF-8"
}
}
#4配置sonarqube参数
subprojects {
apply plugin: 'eclipse'
apply plugin: 'idea'
repositories {
mavenCentral()
jcenter()
}
sonarqube {
properties {
property "sonar.sources", "src"
property "sonar.java.binaries", "build/intermediates/javac"
property "sonar.host.url", "http://http://10.1.3.40:9000/"
property "sonar.login", "admin"
property "sonar.password", "admin"
property "sonar.jdbc.url", "jdbc:mysql://http://10.1.3.40:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance"
property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver"
property "sonar.jdbc.username", "root"
property "sonar.jdbc.password", "root"
}
}
}
allprojects {
repositories {
flatDir {
dirs project(':app').file('libs')
}
// maven {
//// 电脑本地Maven仓库地址
// url uri('D:/AndroidStudio/LocalMaven')
// }
maven { url "http://mvn.mob.com/android" }
google()
jcenter()
}
configurations.all {
resolutionStrategy {
force "com.android.support:support-v4:${supportLib}"
force "com.android.support:support-annotations:${supportLib}"
force "com.android.support:appcompat-v7:${supportLib}"
force "com.android.support:design:${supportLib}"
force "com.android.support:recyclerview-v7:${supportLib}"
force "com.android.support:cardview-v7:${supportLib}"
force "com.android.support:design:${supportLib}"
force "com.android.support:support-compat:${supportLib}"
force "com.android.support:support-core-ui:${supportLib}"
force "com.android.support:support-core-utils:${supportLib}"
force "com.android.support:support-fragment:${supportLib}"
force "com.android.support.constraint:constraint-layout:1.1.0"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
复制代码
gradle sonarqube
复制代码
首先jenkins上按照Sonar插件windows
sonar.projectKey=项目名xxx
sonar.projectName=项目名xxx
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.sources=app/src,album/src,base/src,cropview/src,im-business/src,lib_live_agora/src,lib_log/src,performancelib/src,push/src,refreshlibrary/src,xrecyclerview/src
sonar.java.binaries = app/build/intermediates/classes
sonar.host.url=http://127.0.0.1:9000/
sonar.login= admin
sonar.password=admin
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
sonar.jdbc.username=root
sonar.jdbc.password=root
复制代码
Task to run :scan JDK:JDK_8 Analysis properties: sonar.projectKey=test sonar.projectName=test sonar.projectVersion=1.0 sonar.sourceEncoding=UTF-8 sonar.sources=app sonar.java.binaries = app/build/intermediates/classes sonar.host.url=http://127.0.0.1:9000/ sonar.login= admin sonar.password=admin sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.jdbc.driverClassName=com.mysql.jdbc.Driver sonar.jdbc.username=root sonar.jdbc.password=root Additional arguments:-Xbash
咱们知道,android 自带一个叫lint的检查工具,能够检查android相关无用资源,OverDraw等问题,github上也有一个现成的开源插件库可是最新sonar7.5这个库已经不支持了,sonar7.5变动了不少,因此本身研究开发了一个地址
目前java检查规则是基于pmd这个插件进行二次开发,pmd的原理网上也有不少资料介绍,整体是使用java cc 生成解析器来解析源代码并生成AST(抽象语法树)
目前sonar 已经支持很是多第三方代码检查插件,例如sonar java,pmd,findbugs等,若是业务须要能够自定义本身插件
1.androidLint 之前sonar6.5以前是有第三方androidlint,可是7.5之后,第三方库不更新了,只有本身开发了一个 github.com/dengqu/sona…
android lint: 1.NewApi 代码中使用的某些API高于Manifest中的Min SDK 2.Deprecated 使用已经废弃的API 3.PxUsage 避免使用px,使用dp 4.DrawAllocation 避免在绘制或者解析布局(draw/layout)时分配对象。E.g.,Ondraw()中实例化Paint对象。 5.Node can be replaced by a TextView with compound drawables 可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。 6.Overdraw: Painting regions more than once 若是为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,而后才用指定的背景,这就是所谓的“Overdraw”。 能够设置theme的background为null来避免。 7.Hardcoded text 8.HashMap can be replaced with SparseArray 9.Layout hierarchy is too deep 10.Layout has too many views Memory allocations within drawing code