[Android] Maven으로 안드로이드 개발환경 구축하기

Published on: 2013. 11. 14. 16:23 by louis.dev
이번에 안드로이드 프로젝트를 진행하면서 자바 웹 개발시에도 많이 사용하는 Maven을 이용해 안드로이드도 개발을 진행하도록 하였습니다. 모든 자바 프로젝트가 그렇듯 세팅에 많은 시간을 들여야 하기 때문에 나중에 혹시 또 안드로이드 프로젝트를 진행할때 참고하려고 히스토리를 남겨 봅니다.

첫번째. Maven을 설치해 줍니다.

당연하겠지만 Maven을 사용하려면 Maven을 설치를 해야겠지요..^^;; Maven은 apache사이트에서 다운로드 받으실수 있습니다. 설치하는 방법은 아주 간단합니다. 다운로드받은 .zip파일을 원하는 곳에 압축을 풀어 놓습니다. 그리고 환경변수로 MAVEN_HOME을 지정해야 하는데 이 MAVEN_HOME은 다운로드 받은 메이븐 파일을 압축풀어 놓은 위치를 MAVEN_HOME으로 지정하면 됩니다. * 참고로 MAVEN-ANDROID-PLUGIN은 MAVEN 3.3이상 MAVEN 3.0.3버전 사용을 요구하고 있습니다. 그러므로 MAVEN을 설치하실때는 꼭 3.0.3이상의 버전을 설치하시기 바랍니다.  

두번째. Android-SDK, 이클립스를 다운받습니다.

예전같은 경우에는 이클립스 따로, Android-SDK 따로 다운받아서 이클립스 플러그인을 설치하는 번거로운 작업을 진행했어야 하는데요, 요즘에는 안드로이드 개발자 사이트에 가면 ADT Bundle을 다운로드 받을 수 있는데 여기에 Android-SDK뿐만 아니라  이클립스가 함께 포함되어있습니다. 이걸 다운로드 받으면 따로 안드로이드 이클립스 플러그인을 다운로드 받지 않아도 되기 때문에 좀더 빠르게 개발환경을 구축할수 있습니다. 여기서 가장 중요한 점은 위에서 환경변수로 MAVEN_HOME을 잡아줬던것처럼 안드로이드SDK 설치에서도 ANDROID_HOME을 환경변수로 지정해 주어야 합니다.  위의 내용처럼 ADT bundle을 다운로드 받으셨다면 SDK의 위치는 ${ADT Bundle설치 디렉토리}/sdk 입니다. 이 위치를 ANDROID_HOME으로 지정하면 됩니다.  

세번째. Maven-eclipse플러그인인 m2e 플러그인을 설치합니다.

설치방법은 다른 이클립스 플러그인을 설치하는 방법과 동일합니다. eclipse 메뉴의 Help -> Install New Software에서 http://download.eclipse.org/technology/m2e/releases 를 입력한 뒤 플러그인을 설치합니다.  

 다음으로 Android Connector for M2E 이클립스 플러그인을 위와같은 방식으로 설치합니다. 설치 위치는 http://rgladwell.github.com/m2e-android/updates/ 입니다.  

네번째. 안드로이드 프로젝트를 생성합니다.

Maven의 android archetype을 이용해서 안드로이드 프로젝트를 생성할 수 있으나 저는 반대로 안드로이드 프로젝트 생성후 Maven프로젝트로 변환하도록 하겠습니다.  
위와 같이 기본 안드로이드 프로젝트를 생성하듯이 생성합니다. 그리고 생성된 프로젝트의 마우스 오른쪽을 눌러 Maven project로 변환합니다.

   

위의 화면에서 GroupId와 Artifact Id를 지정합니다. 여기서 봐야 할부분은 Packaging부분인데요. 안드로이드 프로젝트가 패키징 되면 .apk파일이 생성이 되는데 위의 그림에서는 Packaging에서는 apk를 선택할 수 없습니다. 하지만 이부분은 pom.xml부분에서 수동으로 설정가능하니 그냥 기본설정인 .jar로 선택하시고 finish를 누르면 됩니다.

다섯째. pom.xml에 android-maven-plugin을 추가 및 기타 설정을 합니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>net.krespo.android</groupId>
	<artifactId>KrespoAndroid</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>apk</packaging>
	<dependencies>
		<dependency>
			<groupId>com.google.android</groupId>
			<artifactId>android</artifactId>
			<version>1.5_r4</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<groupId>com.jayway.maven.plugins.android.generation2</groupId>
				<artifactId>android-maven-plugin</artifactId>
				<version>3.6.0</version>
				<configuration>
					<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
					<assetsDirectory>${project.basedir}/assets</assetsDirectory>
					<resourceDirectory>${project.basedir}/res</resourceDirectory>
					<nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
					<sdk>
						<path>${env.ANDROID_HOME}</path>
						<platform>16</platform>
					</sdk>
					<undeployBeforeDeploy>true</undeployBeforeDeploy>
				</configuration>
				<extensions>true</extensions>
			</plugin>

			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.0</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
이렇게 되면 기본적인 Maven-Android프로젝트는 세팅이 끝납니다. 그런데 프로젝트를 살펴보면 Android Dependencies 부분에 android-support-v4.jar가 추가 된 것을 볼수 있는데 프로젝트의 libs디렉토리에 해당 jar파일이 추가 되어 빌드패스에 추가된 것을 볼수 있습니다. 앞으로 모든 프로젝트의 라이브러리는 Maven에서 관리될 것이기 때문에 libs디렉토리의 android-support-v4.jar를 제거하고 pom.xml에 dependency를 추가합니다. 

<dependency>
	<groupId>com.google.android</groupId>
	<artifactId>support-v4</artifactId>
	<version>r7</version>
</dependency>
추가 : 댓글에 지적해주신 부분과 같이 메이픈 공식 repository에 있는 support-v4 라이브러리 버전이 너무 낮아 다른 라이브러리들과 호환문제가 발생할 수 있습니다. 그럴때는 프로젝트 libs디렉토리의 support-v4라이브러리를 삭제 하지 말고 다음과 같이 pom.xml에 선언해 주면 로컬의 라이브러리를 가져와 사용할 수 있습니다.  
<dependency>
	<groupId>com.google.android</groupId>
	<artifactId>support-v4</artifactId>
	<version>r21</version>
	<scope>system</scope>
	<systemPath>${basedir}/libs/android-support-v4.jar</systemPath>
</dependency>
위와같이 프로젝트 세팅을 완료하였습니다. 프로젝트를 빌드하는 방식은 기존의 Maven프로젝트를 빌드하듯이 package 골을 이용하여 빌드합니다. 만약 연결된 스마트 폰으로 빌드된 apk를 올려서 테스트를 하려고 한다면 다음과 같은 골을 실행시키면 됩니다.
mvn package android:deploy android:run
package - apk 파일로 생성 android:deploy - 연결된 스마트 폰으로 apk파일 배포 android:run - 스마트폰에 deploy되면 자동으로 배포된 apk를 실행   이상으로 android프로젝트에서 Maven을 사용하는 방법을 포스팅 했습니다. 개인적으로 아직 안드로이드와 Maven조합은 안정성이 있어 보이지는 않습니다. 부득이한 경우(전사 표준이라던가 하는)가 아니라면 아직 안드로이드 프로젝트에 메이븐을 적용하는 것은 시기상조인것 같네요.^^ Troubleshooting 환경변수에 ANDROID_HOME을 설정했음에도 빌드시 아래와 같은 에러가 발생한다면

org.apache.maven.plugin.MojoExecutionException: No Android SDK path could be found. You may configure it in the plugin configuration section in the pom file using <sdk><path>...</path></sdk> or <properties><android.sdk.path>...</android.sdk.path></properties> or on command-line using -Dandroid.sdk.path=... or by setting environment variable ANDROID_HOME 

 pom.xml에 직접 ANDROID_HOME을 지정해 주면 됩니다.

<properties>
  	<android.sdk.path>/your/sdk/path</android.sdk.path>
</properties>