Sonar를 통해 안드로이드 앱 소스코드의 품질을 분석하고자 하는 분을 위해 현재 제가 사용중인 Ant 빌드스크립트를 공유합니다.
처음에는 custom_rules.xml 파일에 소스분석 스크립트를 작성했었는데요, 별도의 스크립트(analysis.xml)로 분리시켰습니다. 앱 프로젝트 루트경로에 build.xml, local.properties, project.properties 파일 등과 함께 두시면 됩니다.
[analysis.xml]
<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개의 타겟이 미리 실행되도록 해야 문제없이 소스분석이 이루어집니다.
이렇게 만드시고 실제 수행은 Jenkins 같은 CI서버에서 수행하시면 지속적으로 소스코드 품질을 체크하실 수 있습니다. 저는 Jenkins 서버에 앱 소스분석용 Job을 만들고 아래와 같이 analysis.xml 빌드스크립트의 sonar 타겟을 실행하게 했습니다.(보통 며칠~몇주에 한번씩 수행하도록 설정)
그러면 아래와 같이 sonar 대시보드 페이지에서 내 앱 소스의 품질지표를 확인할 수 있어서 참 좋습니다.
(부끄럽게도 junit 등의 단위테스트 케이스는 없어서 테스트 커버리지는 0 퍼센트네요 -.-)
'Android' 카테고리의 다른 글
Token 기반 자동 로그인 구현 예제 (0) | 2013.05.28 |
---|---|
[안드로이드] 기본 user agent 헤더 스트링 구하기 (0) | 2013.05.23 |
[안드로이드] AOP를 이용한 에러처리 사례 (1) | 2013.05.15 |
[안드로이드] Thread.UncaughtExceptionHandler 사용팁 (1) | 2013.05.14 |
greenrobot EventBus를 써보니... (0) | 2013.04.26 |