u02の雑ブログです

ネイティブアプリの開発とか、プログラミング、Java、C++、Android、iOS、Objective-C、Kotlin、Swift、ゲーム、アニメなどです。

SonqrQubeで Android appの ソースコードを分析して修正してみよう。

SonqrQubeで Android appの ソースコードを分析&修正

Androidのプロジェクトで Sonar Qubeを利用した話をします。


まず、前回のポスト!でインストールしてた前提でやりますが
インストールしてない人はこちらから設定をお願いします。
http://u02.hatenablog.com/entry/2016/03/03/195653

 

1. Login

まず http://localhost:9000/ に入って、右上のログインボタンを押し、ログインします。

f:id:wkddn1235:20160305233609p:plain

defaultのアカウントは (admin/admin)で管理者としてログインができます。

f:id:wkddn1235:20160305233808p:plain

2. SonarQubeへ Android Pluginを設置
Androidのlintを分析するためにはまず、pluginをインストールする必要があります。

上の administrationのボタンを押し、
その下のタップで [System] -> [Update Center] をクリックしましょう。

f:id:wkddn1235:20160305233834p:plain

ここで Availableをクリックし、Androidを探して installします。
(ちなみに、日本語パックもありますね)

ボタンを押すとこうなるので sonarをリスタートしてあげましょう

`sonar restart`

 

3. SCM Sensor設定
SCMの設定を行いましょう

[Administration]->[SCM]

f:id:wkddn1235:20160305233900p:plain

ここをTrueにします。

こうする理由は、SonarQubeは Language別に分析してくれますが、
*.java 以外の xmlとか assetの分析の結果も見たいためですね。

 

4. Quality Profileを作る

Quality Profilesにはいると先インストールしたため、 Android Lintが追加されていることを確認できます。

f:id:wkddn1235:20160305234052p:plain

ここでやることは、

Sonar Wayの defaultが javaになっているため、
Android Lintのプロジェクトをcopyし、javaの検証も一緒に行うための設定をします。

まず [Android Lint]をクリックして、copyします(右上)

名前は [Android Lint+Sonar way]にしました。

f:id:wkddn1235:20160305234152p:plain 

で、作ったプロジェクトをクリックすると下に [Change Parent] というボタンがあります。

f:id:wkddn1235:20160305234237p:plain

ここを押しましょう

f:id:wkddn1235:20160305234556p:plain

親を sonar wayにします。

 

f:id:wkddn1235:20160305234614p:plain

これで、lintとsonar wayを合わせたprofileを作りました。

とりあえず、これを defaultにします。

f:id:wkddn1235:20160305234650p:plain

これで準備はokですね。

 

 

 5. GRADLEの設定

gradleprofileに次みたいに設定を保存しときます。

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

 

あとは、Gradlefileの設定を行ってみます。

 

buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath "org.sonarqube.gradle:gradle-sonarqube-plugin:1.1"
}
}

 

apply plugin: 'org.sonarqube'

runSonarQube {
properties {
property "sonar.sourceEncoding", "UTF-8"
property "sonar.projectKey", "davidlab:sonartest"
property "sonar.projectName", "SonarTest"
property "sonar.projectVersion", "0.1"

properties["sonar.sources"] += "src/main"
property "sonar.java.binaries", "build/intermediates/classes/debug"
property "sonar.android.lint.report", "build/outputs/lint-results.xml"
}
}

 

こういう感じで設定して、一応lintを使いましょう。

 

gradle lintでできると思います。

android studioは簡単にここでクリックすることでできます

f:id:wkddn1235:20160306001646p:plain

あとは otherの sonarqubeを事項します。

f:id:wkddn1235:20160306001716p:plain

 

 

これで情報がsonarqubeに載っていることが確認できます。

 

f:id:wkddn1235:20160306001833p:plain

 

6.issueの修正 

確認もできたし終わりっ!と。。。

しようと思ったが、実際にissueの修正をする方法を書いてみます。

 

ここでプロジェクトをクリックすると、issueが見えます。

 

f:id:wkddn1235:20160306001915p:plain

 

5個がありますね

f:id:wkddn1235:20160306002021p:plain

こんな風に情報がでます。

右の方の [>] を押してみると詳しいソースコードが見えます。

f:id:wkddn1235:20160306002133p:plain

まずは 使ってない importがあるよーがでますね

f:id:wkddn1235:20160306002215p:plain

あとは こんな風にでるのです。

なんにゃのーと思うのであれば [...]をクリックしてみると詳しい情報が見えます。

 

javaのconventionで staticが先に来るのがいいよーって言ってますね

f:id:wkddn1235:20160306002342p:plain

 

あとは static finalだから 大文字にするのがいいのでは?とい指摘がありますね

同じく[...]を押して確認してみます。

f:id:wkddn1235:20160306002629p:plain

 

こんな風にsoulutionが見えます。

まじいいですねー

 

あとは リスナーをlambda式でしてほしいというんですが、修正したくないので

resolve as won't fixをします。javaのチェックなのでこんな問題もありますね。

f:id:wkddn1235:20160306002734p:plain

 

最後に

f:id:wkddn1235:20160306002845p:plain

onClickが宣言されているが何もしてない!事を指摘しています。

そして、もう一度 lintをして、sonarに送ります。

 

f:id:wkddn1235:20160306003100p:plain

 

issueを見るとこんな感じで修正されたことが確認できますね!

 

では、長くなりましたが、ここまでです。

またの時に!