[Android] 외부(오픈소스) 라이브러리 사용하기

Published on: 2013. 11. 14. 16:26 by louis.dev
안드로이드 프로젝트 같은경우에는 github구글 코드 같은 사이트에서 안드로이드용 오픈소스 라이브러리를 많이 볼수 있습니다. 이러한 오픈소스 라이브러리를 안드로이드 프로젝트에서 사용하는 방법을 적어보자 합니다. Step 1. 외부라이브러리를 다운로드 받아 이클립스로 import 합니다. android 3.0에서 부터  Actionbar라는 뷰가 생겼는데요, 하위버전의 안드로이드에서는 Actionbar를 사용할수가 없어 ActionbarSherlock이라는 외부라이브러리를 이용해서 Actionbar를 구현해야 합니다. 해당사이트로 이동하여 라이브러리를 다운 받은 후 압축을 풉니다. 다음으로 이클립스로 돌아와 해당 라이브러리 프로젝트를 import 시켜줍니다.  
일반 적인 경우에는 아래의 스크린샷 처럼 Android -> Existing Android Code Into Workspace 메뉴를 선택하여  import를 시키면 됩니다.  

 그러나 Actionbar Sherlock 라이브러리를 보면 pom.xml이 있는것을 확인할수 있습니다. 즉 해당 라이브러리는 Maven 기반의 프로젝트임을 확인할 수 있습니다. 이렇게 외부 라이브러리가 Maven기반이라면 아래의 사진처럼 Maven -> Existing Maven Project 를 선택하여 Maven 프로젝트를 import 시킵니다. 안드로이드 프로젝트에서 Maven을 사용하려면 이클립스 플러그인이 설치되어야 합니다. 안드로이드-메이븐 개발환경 구축은 "Maven으로 안드로이드 개발환경 구축하기"를 참고하시면 됩니다.

   

 위의 화면에서 Next를 누르면 다음과 같은 화면이 나오는데요.  

실질적으로 필요한 프로젝트는 library이지만 샘플코드도 확인해야 하기 때문에 저는 모든 프로젝트를 import 하겠습니다. Step 2. 외부라이브러리를 현재 개발하려는 프로젝트에 추가 합니다. 추가는 간단합니다. 현재 프로젝트에서 마우스 오른쪽을 클릭하여 properties메뉴로 들어갑니다.

   

 좌측메뉴 중 Android를 선택하면 다음과 같은 화면이 나타나는데요.

   

우측 하단의 Library영역에서 Add를 눌러 라이브러리 프로젝트인 Actionbar Sherlock을 선택합니다.

   

 위의 스크린샷처럼 Library영역에 actionbarsherlock 프로젝트가 라이브러리로 추가된걸 볼 수 있습니다.   이렇게 외부라이브러리를 추가하는 방법을 확인해 보았습니다. 만약 현재 개발중인 프로젝트가 Maven을 사용하고 있다면 위의 작업을 한 뒤 pom.xml의 dependency부분에 apklib 디펜던시를 추가해 주어야 합니다.
<dependencies>
	<dependency>
		<groupId>com.actionbarsherlock</groupId>
		<artifactId>library</artifactId>
		<version>4.2.0</version>
		<type>apklib</type>
	</dependency>
</dependencies>
 

Maven환경에서 개발 시 유의할점

위의 포스팅을 쭉 읽어 오면서 이상한 점이 하나 보일것입니다. Maven환경에서 개발을 많이 해보신 경우라면 좀더 빨리 눈치 채실것 같은데요. 그 이상한 점은 바로 apklib파일을 pom.xml에 dependency로 추가를 했는데도 불구하고 project의 properties 메뉴에서 외부라이브러리를 중복적으로 추가하고 있다는 점입니다. 일반적으로 의존관계의 jar로 패키징된 라이브러리들은 pom.xml에 dependency를 추가만 해주는것만으로도 자연스럽게 디펜던시에 추가가 되어 따로 설정 할일이 없었는데 apklib파일 같은 경우는 왜이렇게 중복적으로 라이브러리를 지정해야 할까요? 그 이유는 Maven프로젝트를 android프로젝트로 인식하는 Android Connector for m2e  플러그인이 apklib를 아직 미지원 하기 때문입니다. 그렇기 때문에 pom.xml에 dependency를 추가했어도 android connector plugin이 apklib를 인식하지 못하기 때문에 외부라이브러리를 찾지 못한다고 이클립스에서 에러를 내뿜게 됩니다. 그렇다고 실제 dependency에 추가가 되지 않은 것은 아니며 단지 이클립스에서 인식을 못하는 것입니다. 그래서 이렇게 에러가 발생하더라도 해당 프로젝트를 maven으로 패키징 하게 되면 문제가 없이 패키징이 되는것을 확인할 수 있습니다. 하지만 개발을 하기 위해서는 이클립스에서 외부라이브러리를 인식시켜 이클립스가 제공해주는 다양한 기능(code assist같은) 을 사용해야 하기 때문에 Properties에서 외부라이브러리를 추가해 주어야 합니다.