처음에는 custom_rules.xml 파일에 소스분석 스크립트를 작성했었는데요, 별도의 스크립트(analysis.xml)로 분리시켰습니다. 앱 프로젝트 루트경로에 build.xml, local.properties, project.properties 파일 등과 함께 두시면 됩니다.
<project name="my-android-app-analysis" default="sonar">
<property file="local.properties" />
<property file="ant.properties" />
<loadproperties srcFile="project.properties" />
<fail message="sdk.dir is missing... " unless="sdk.dir" />
<import file="${sdk.dir}/tools/ant/build.xml" />
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="${ant.home}/lib/sonar-ant-task-2.0.jar" />
</taskdef>
<target name="sonar"
depends="-set-release-mode, -release-obfuscation-check, -compile"
description="Sonar를 이용한 소스분석">
<xpath input="${manifest.abs.file}"
expression="/manifest/@android:versionName"
output="app.version.name"
default="1.0" />
<property name="sonar.host.url" value="http://127.0.0.1:8888/sonar" />
<property name="sonar.jdbc.url"
value="jdbc:h2:tcp://127.0.0.1:9092/sonar" />
<property name="sonar.jdbc.username" value="sonar" />
<property name="sonar.jdbc.password" value="sonar" />
<property name="sonar.projectKey" value="${project.app.package}:my-android" />
<property name="sonar.projectName" value="my-android" />
<property name="sonar.projectVersion" value="${app.version.name}" />
<property name="sonar.java.source" value="${java.source}" />
<property name="sonar.java.target" value="${java.target}" />
<property name="sonar.sourceEncoding" value="UTF-8" />
<property name="sonar.language" value="java" />
<!-- property name="sonar.sources" value="${source.absolute.dir},${gen.absolute.dir}" / -->
<property name="sonar.sources" value="${source.absolute.dir}" />
<property name="sonar.binaries" value="${out.classes.absolute.dir}" />
<property name="sonar.libraries" value="${project.target.android.jar},${jar.libs.dir}/*.jar" />
<property name="sonar.scm.url" value="scm:svn:svn://vcs.xxx.com/trunk/my-android" />
<!-- 더많은 소나 파라미터 : http://docs.codehaus.org/display/SONAR/Analysis+Parameters -->
<sonar:sonar xmlns:sonar="antlib:org.sonar.ant" />
</target>
굵은 글씨로 나와있듯이 -set-release-mode, -release-obfuscation-check, -compile 이렇게 3개의 타겟이 미리 실행되도록 해야 문제없이 소스분석이 이루어집니다.
그러면 아래와 같이 sonar 대시보드 페이지에서 내 앱 소스의 품질지표를 확인할 수 있어서 참 좋습니다.