본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Android Compatibility Package

by 돼지왕 왕돼지 2012. 7. 27.
반응형

출처 : [휴휴휴님 블로그]

Android Compatibility Package

이 포스트는 구글 안드로이드 개발자 사이트의 내용을 참고로 작성되었습니다.


호환성 패키지 -  - Compatibility Package 란?

 허니콤 출시 이 후, 안드로이드 개발자 블로그나 관련 문서들을 살펴보면 'Compatibility Package' 라고 불리는 이른바 '호환성 패키지' 에 관한 내용을 가끔식 접하 실 수 있습니다. '호환성 패키지' 라니... 의미가 어째 좀 모호 합니다. 그리고 분명 안드로이드 팀에서 정식 배포한 SDK 임에도 불구하고 묘하게 관련된 자료나 문서를 찾기도 쉽지 않습니다. 과연 이 호환성 패키지란 뭘 뜻하는 것일까요? 관련하여 간단히 정리해 봅니다.


 호환성 패키지는 '안드로이드 3.0 플랫폼 버전 이후 추가된 API 및 유용한 유틸리티 API' 들을 묶어서 만들어진 정적 라이브러리 입니다. 다시 말해, 많은 분들이 사용하시고 있는 twitter4j 라던가, cocos2d 와 같은 외부 라이브러리들과 별반 다를게 없습니다. 현재, 동일한 인터페이스를 갖춘, v4 와 v13 두 가지 버전이 제공되는데, v4 는 안드로이드 API Level 4, 그러니까 도넛 버전을 기반으로 작성된 라이브러리이며, v13 은 안드로이드 API Level 13 - 허니콤 버전을 기반으로 작성된 라이브러리입니다. 따라서, 작성하고 계신 어플리케이션 타겟 버전이 도넛,이클레어,프로요,진저브레드 대상인 경우에는 v4 버전의 호환성 패키지 라이브러리를 사용하실 수 있으며, 이 후 버전의 디바이스를 대상으로 하는 경우에는 v13 버전의 라이브러리를 사용하실 수 있습니다.


호환성 패키지의 기능

 다시 말해, 호환성 패키지는 안드로이드 개발 팀이 허니콤 플랫폼을 개발하는 과정에서, 정말로 유용하다고 판단한 많은 기능 중, 기존의 안드로이드 플랫폼 기반에서도 적용 가능한 내용을 가득 담아 공식적으로 릴리즈한 공개 라이브러리입니다. (심지어 소스까지 공개된...) 그렇다면, 호한성 패키지에는 어떤 유용한 기능이 담겨있을까요?  간단히 소개해 봅니다.

  • Fragment : 허니콤 이 후 UI 를 구성하는데 있어서 가장 크게 추가된 부분이 바로 Fragment 라고 할 수 있습니다. 간단히, Fragment 는 하나의 '동작 모듈' 이라고 할 수 있습니다. 지금까지는 대게 하나의 엑티비티가 하나의 동작 모듈로 간주되었습니다. 허니콤 이 후에 멀티 패널 UI 가 요구됨에 따라 엑티비티가 여러 기능을 수행할 필요가 생겼으며, 이에따라, 엑티비티 내에 하나 이상 포함될 수 있으면서, 동시에 독립적으로 동작할 수 있는, 엑티비티 와 뷰 그 중간 쯤에 위치 Fragment 클래스가 추가되었습니다.
  • Loader: 메인스레드가 아닌 별개 스레드를 통해, 비동기적으로 데이터를 로딩 하고자 할 때, 손쉽게 활용할 수 있는 Abstract 클래스입니다. 간단히 말해, AsyncTask 의 데이타 로딩 버전이라고 할 수 있겠네요. 안드로이드에서 항상 강조하는 것이 바로 메인 스레드에서 시간이 오래 걸릴만한 작업을 수행하지 말라는 격언입니다. 네트워크를 통해 데이터를 읽어올 때 뿐만 아니라, 내부 DB 에서 데이터를 읽어올 때도 File I/O 에 의해 생각보다 오랜 시간이 걸릴 수 있습니다. 이런 경우, 별도 스레드를 구성하려고 고민하는대신간편하게 CursorLoader 클래스를 활용하실 수 있습니다.
  • ViewPager: 최신 안드로이드 마켓 어플리케이션 같이 수평 화면 전환이 필요한 경우, 이를 손쉽게 구현할 수 있게 도와주는 위젯입니다. 보다 상세한 내용은 Horizontal View Swiping with ViewPager 문서를 확인하시면 좋겠네요. 
  • LruCache: Least Recently Used Cache 입니다. 간편히 사용할 수 있는 Hash 입니다. 최초 생성 시, Hash 의 최대 크기를 지정할 수 있으며, 만일 지정된 크기 보다 더 많은 아이템을 추가하려고 할 때는, 말그대로 가장 이전에 사용되었던 아이템(Least Recently Used)이 Hash 에서 제거됩니다. 이미지 비트맵등을 저장하는 캐쉬를 만들 때 요긴하게 사용할 수 있습니다.
     

호환성 패키지의 의의

 이처럼, 호환성 패키지는 유용한 기능을 제공합니다. 어라? 그런데 왜 이 라이브러리의 이름이 '호환성 패키지' 인걸까요? 그건 바로, 호환성 패키지의 의미가 단순히 유용한 기능을 제공해주는 라이브러리의 의미를 뛰어 넘어 기존 안드로이드 플랫폼과 새롭게 발표된 허니콤, 그리고 아이스크림 샌드위치 버전의 안드로이드 플랫폼 간의 '어플리케이션 호환성' 을 최대한 확보할 수 있도록 제공된 라이브러리 패키지이기 때문입니다.


 그렇기 때문에, 호한성 패키지에서 사용가능한 모든 API는 실재 안드로이드 허니콤 이 후 버전에서는 플랫폼 API 로 기본 제공하고 있는 API 입니다. (일부 유틸 제외....) 예를들어, v4 버전의 호환성 패키지 라이브러리를 이용하여, Fragment 를 활용한 어플리케이션을 구성했다면, 이 어플리케이션은 별다른 노력없이, 허니콤이나 이 후 출시될 아이스크림 샌드위치 버전으로 손쉽게 컨버전 될 수 있습니다.


 안드로이드 에코시스템의 가장 큰 약점 중의 하나는 플랫폼 버전업 속도는 빠른데 비하여, 이미 시장에 깔린 디바이스들의 OS 업그레이드 속도는 이에 크게 못 미친다는 점 입니다. 따라서, 이른바 단편화 문제가 발생하게 되며, 많은 어플리케이션 개발자들이, 새롭게 추가된 멋진 API 를 활용하지 못하고, 이클레어나 프로요와 같은 이전 버전의 API 기반으로 끙끙되면 어플리케이션을 작성해야 하는 경우가 많습니다. OS 업그레이드가 이루어지면 순식간에 모든 디바이스가 업그레이드되는 아이폰에 비하면 더욱 심각한 문제가 아닐 수 없습니다. '호환성 패키지' 는 이런 현실적인 어려움에 대한 안드로이드 개발팀의 한 가지 대안이라고 할 수 있습니다. 새롭게 추가된 API 중에서 개발자들에게 유용한 API 는 최대한 이전 플랫폼에서도 지원할 수 있도록 스태틱 라이브러리를 구현/제공 함으로서, 최대한 많은 개발자분들이 멋진 새로운 API 를 활용할 수 있음과 동시에 최대한 다양한 디바이스를 대상으로 어플리케이션을 개발할 수 있도록, 두 마리 토끼를 다 잡을 수 있도록 만들겠다는 의지의 표명이라고 생각합니다. 


호한성 패키지 설치 및 적용하기

 와... 서론이 길었나요? 그렇다면 도데체 호환성 패키지를 어떻게 사용할 수 있을까요? 아주 간단합니다. 

1. SDK and AVD Manager 를 시작합니다.

2. Available Packages -> Android Repository 항목을 확장하여, Android Compatibility Package, revision 3 항목을 선택하여 설치합니다. (2011년 9월 26일 기준)



3.  <sdk>/extras/android/compatibility/  폴더에 호환성 패키지가 다운로드 됩니다. (소스 포함)
4. 호환성 패키지를 추가하고자 하는 프로젝트 설정 창에서, Java Build Path -> Libraries 탭의, Add External JARs 메뉴를 선택합니다.
5. <sdk>/extras/android/compatibility/v4/android-support-v4.jar 파일을 선택하여 추가합니다.

 이제 호환성 패키지를 사용할 준비가 완료되었습니다. 살펴보시면 자바 빌드 패스 메뉴의 라이브러리 항목에 호환성 패키지 라이브러리인 android-support-v4.jar 파일이 추가된 것을 확인 하실 수 있습니다.



잠깐! API 문서는 없나요?

 아쉽게도, 현재 호환성 패키지에서 제공하는 API 관련된 참조 문서는 잘 정리되어 있지 않습니다. 안드로이드 개발자 사이트에서는 다음과 같은 방식으로 개발자 분들이 직접 Javadoc 문서를 작성할 것을 추천하고 있습니다.

cd <sdk>/extras/android/compatibility/v4/
mkdir docs
javadoc -sourcepath src/java/ -subpackages android.support.v4 -d docs

 그렇지 않다면, 호환성 패키지 코드 자체를 기반으로(New Android Project -> from existing source) 별도의 안드로이드 라이브러리 프로젝트를 생성하시는 방법을 활용할 수도 있습니다. 그 후, 호환성 패키지를 사용할 어플리케이션 프로젝트 상에서 해당 안드로이드 라이브러리 프로젝트를 참조하면 됩니다. 이렇게 되면, IDE 상에서 편리하게 API 문서를 확인할 수 있으며, 디버깅 시에도 관련 코드를 직접 참고할 수 있다는 장점이 있습니다. (단, 기존 소스 코드는 v4 / v13 버전 모두를 포함하고 있는데, v13 의 경우 안드로이드 3.0 플랫폼 API 를 사용하고 있음으로, 이를 제거하여 프로젝트를 생성하셔야 합니다.)


결론

 안드로이드 호환성 패키지는 유용한 기능을 많이 담고 있는 라이브러리인 동시에, 새롭게 선보인 허니콤과 앞으로 출시될 아이스크림 샌드위치 버전에서도 멋지게 동작하는 어플리케이션을 작성하기 위한 좋은 방법입니다. 날씨도 선선하니 공부하기 좋은 계절입니다. 미래를 위한 투자라는 생각으로, 이전에 작성해 두신 어플리케이션을 호환성 패키지를 이용하여 리팩토링 해보시면 어떨까요? 

반응형

댓글