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 퍼센트네요 -.-)



Posted by 에코지오
,