본문 바로가기

AOSP

이클립스에서 안드로이드 시스템 앱 빌드하기


 


보통은 안드로이드 SDK를 이용하여 개발자만의 애플리케이션을 만드는 것이 대다수이지만,

간혹 안드로이드 시스템 내에 있는 시스템 애플리케이션을 수정하거나 새로 빌드해야 하는 경우도 있습니다.


시스템 애플리케이션은 안드로이드 풀소스를 다운로드하면 모든 소스를 참조하고 그 상태 그대로 빌드할 수 있지만,

아무래도 이를 분석하거나 수정해서 새로 빌드하려면 이클립스와 같은 IDE를 사용하는 것이 편합니다.


시스템 애플리케이션을 이클립스를 사용하여 빌드하기 위한 절차는 크게 다음과 같습니다.


1. 안드로이드 풀소스(AOSP) 다운로드 & 빌드

2. 풀소스로부터 시스템 애플리케이션이 사용하는 내부 라이브러리 추출하기

3. 이클립스의 User library에 등록하기

4. 프로젝트의 Build Path에 4번에서 추가한 User library 등록하기

5. 프로젝트 생성 후 라이브러리 추가하기


안드로이드 풀소스 다운로드


시스템 애플리케이션에서는 안드로이드 SDK에 포함되어 있지 않은

Hidden API들을 사용하는 것들이 있으므로,

이들을 제대로 빌드하려면 풀소스를 받은 후 Hidden API가 포함된 라이브러리를 생성해야 합니다.

즉, 최소 한 번은 빌드가 필요한거죠.


소스 다운로드 및 빌드 방법은 다음의 공식 페이지를 참조하시면 됩니다.


http://source.android.com/source/downloading.html


리눅스가 아닌 맥 OS 환경에서 빌드하시는 분께서는

이전에 작성한 제 포스트를 참조하시면 됩니다.


2012/08/07 - Mac OS X 10.7 (Lion) 에서 안드로이드 빌드환경 설정하기


풀소스로부터 시스템 애플리케이션이 사용하는 내부 라이브러리 추출하기


풀소스를 다운로드한 후 빌드가 완료되었다면,

다음 경로에서 시스템 애플리케이션 빌드에 필요한 자바 라이브러리들을 얻을 수 있습니다.


out/target/common/obj/JAVA_LIBRARIES


폴더 이름을 통해 어떤 라이브러리인지 알 수 있고,

각 폴더 내부의 classes.jar가 해당 라이브러리 파일입니다.

다음은 core 라이브러리의 폴더 구조를 본 모습입니다.


이렇게 해서 필요한 내부 라이브러리를 얻었으니,

이를 이클립스에서 사용하는 방법에 대해 알아보도록 하겠습니다.



이클립스의 User library에 등록하기


먼저, 필요한 라이브러리의 classes.jar를 추출하여 적당한 폴더에 넣어줍니다.

저는 다음과 같은 라이브러리들을 추출하여 별도의 디렉터리에 넣어두었습니다.



다음, 이클립스의 Preferences > Java Build Path > User Libraries를 선택합니다.

저는 이미 User Library를 등록한 상태라 각 라이브러리들이 목록에 보입니다.




새로 라이브러리를 추가하려면 New... 버튼을 누른 후, 적당한 이름을 지정합니다.

다음, 추가된 라이브러리를 선택하여 Add JARs... 버튼을 누른 후,

위에서 추출한 자바 라이브러리 파일을 선택해주면 됩니다.




프로젝트 생성 후 라이브러리 추가하기


이제 프로젝트를 생성하여 테스트해 볼 차례입니다.

저는 Launcher2 (기본 런처)을 테스트해 보았습니다.


프로젝트를 생성한 후에,

풀소스에 포함되어 있는 런처의 소스를 복사해왔습니다.

각종 시스템 앱의 소스는 다음 경로에 포함되어있습니다.


packages/apps


다음, 프로젝트 속성 > Java Build Path > Libraries 탭에 간 후,

Add Library...버튼을 누른 후 User library를 선택하여

추가할 라이브러리를 선택합니다.



다음, Order and Export 탭으로 가서

위에서 추가한 라이브러리들을 가장 상위로 올려줍니다.

이렇게 하면 라이브러리를 참고할 때 SDK보다 우리가 추가한

라이브러리를 먼저 참고하게 됩니다.



이 과정까지 마치면 시스템 앱을 빌드할 모든 준비가 끝나게 됩니다.

상황에 따라 프로젝트를 Clean 하기 전까지 오류가 떠 있는 경우도 있으니,

이 과정을 마친 후 반드시 Clean을 수행하실 것을 권장합니다.


다음은 최종적으로 작업이 완료된 상태의

Project explorer 상 모습입니다.



이 상태로 빌드를 하면 정상적으로 빌드는 되지만,

테스트를 하기 위해서는 에뮬레이터/타겟 단말기의 시스템 애플리케이션을 삭제한 후

업로드해야 합니다.


때문에, 별도의 애플리케이션으로 구동하고 싶은 경우

패키지 이름을 변경해야 합니다.

이를 위해 매니페스트부터 시작하여 꽤 여러 가지를 바꿔야 하는데,

우선은 이 과정은 여기에서 다루지는 않겠습니다.


혹시나 필요하신 분들을 위해서 위에서 사용한 내부 라이브러리들을 첨부합니다.

2012년 10월 1일 기준 AOSP를 사용하여 빌드한 것이며,

안드로이드 4.1 기반입니다.



common.jar


core.jar


support-v13.jar


framework.jar