본문 바로가기

AOSP

Android Studio, ADT 플러그인 빌드하기

이번 글에서는 안드로이드 풀소스로부터 이클립스 플러그인인 ADT(Android Development Tools)와 Android Studio를 빌드하는 방법에 대해 알아보도록 하겠습니다.


빌드 준비하기


ADT와 플러그인을 빌드하려면 다음 조건이 갖춰져 있어야 합니다.


1. 안드로이드 SDK가 빌드되어 있어야 함

2. Eclipse for RCP and RAP developers와  CDT(C/C++ Developement Tools)


먼저, 안드로이드  SDK를 빌드해 봅시다. SDK를 빌드하기 전에, 안드로이드 풀소스가 저장되어 있는 최상위 경로에서 다음 명령을 입력하여 안드로이드 SDK빌드에 필요한 소스들을 모두 받도록 한 후, repo sync 명령으로 해당 소스를 다운로드합니다.


kunny@andronux:~/android$ repo init -g all;repo sync


다음, 안드로이드 SDK를 빌드하기 위해 lunch 명령어를 사용하여 빌드 설정을 변경합니다.lunch 명령을 사용하기 전에 build/envsetup.sh 를 불러들여 lunch 명령을 사용할 수 있도록 설정합니다.


kunny@andronux:~/android$ source build/envsetup.sh

kunny@andronux:~/android$ lunch sdk-eng


다음과 같이 변경된 빌드환경이 표시됩니다. TARGET_PRODUCT가 sdk로 설정되어 있는 것을 확인할 수 있습니다.


============================================

PLATFORM_VERSION_CODENAME=REL

PLATFORM_VERSION=4.3.2.1.000.000

TARGET_PRODUCT=sdk

TARGET_BUILD_VARIANT=eng

TARGET_BUILD_TYPE=release

TARGET_BUILD_APPS=

TARGET_ARCH=arm

TARGET_ARCH_VARIANT=armv7-a

TARGET_CPU_VARIANT=generic

HOST_ARCH=x86

HOST_OS=linux

HOST_OS_EXTRA=Linux-3.8.0-29-generic-x86_64-with-Ubuntu-13.04-raring

HOST_BUILD_TYPE=release

BUILD_ID=OPENMASTER

OUT_DIR=out

============================================


kunny@andronux:~/android$ 


이제 make 명령어로 SDK를 빌드합니다. 

컴퓨터 사양에 따라 빌드에 사용할 스레드 수를 조절(-j8, -j16 등) 하여 빌드 시간을 단축할 수 있습니다.


kunny@andronux:~/android$ make -j8


SDK 빌드가 완료되었다면 이제 플러그인을 빌드하도록 하겠습니다.



플러그인 및 Android Studio 빌드하기


안드로이드 이클립스 플러그인을 빌드하려면 RCP/RAP 개발용 이클립스와, CDT 플러그인이 필요합니다. 

이클립스 및 CDT 플러그인은 가급적 sdk/eclipse/scripts/setup_eclipse.sh 파일 내에 있는 이클립스 및 CDT경로에서 다운로드 하는 것을 추천합니다. (다른 버전으로 받을 경우 빌드가 되지 않는 경우가 있네요)


이 글 작성시 사용했던 setup_eclpse.sh 파일 일부를 보여줍니다.


BASE_DIR="$1"


[[ -n "$1" ]] || die "Usage: $0 <dest-dir>"


# URL for Eclipse Linux RCP.

DOWNLOAD_URL="http://archive.eclipse.org/technology/epp/downloads/release/helios/SR2/eclipse-rcp-helios-SR2-linux-gtk-x86_64.tar.gz"


# URL for CDT

CDT_DOWNLOAD_URL="http://download.eclipse.org/tools/cdt/releases/helios/dist/cdt-master-7.0.2.zip"


BIN="$BASE_DIR/eclipse/eclipse"           # path to installed binary

TARGZ="$BASE_DIR/${DOWNLOAD_URL##*/}"     # base dir + filename of the download URL

CDTZIP="$BASE_DIR/${CDT_DOWNLOAD_URL##*/}"


  Mac을 사용하시는 경우 위의 이클립스 다운로드 경로에서 linux-gtk 부분을 macosx-cocoa로 바꿔 다운로드하시면 됩니다.

이클립스와 CDT를 다운로드 한 후, 이클립스에 CDT를 설치하기 위해 이클립스를 실행합니다. 


Help > Install new software 를 눌러 플러그인 설치 창을 연 후, Add Repository 버튼을 눌러 CDT를 설치합니다. 앞에서 CDT를 미리 다운로드했으므로 Archive...를 눌러 다운로드한 CDT 압축 파일을 선택하면 됩니다.




다음과 같이 플러그인 설치 화면이 나오면, CDT Main Features만 선택하여 설치합니다.



CDT 설치를 마쳤다면,마지막으로 이클립스 경로를 환경변수에 추가합니다. 다음과 같이 export 명령어를 사용하여 ECLIPSE_HOME에 이클립스를 설치한 경로를 지정합니다. ~/eclipse_rcp 에 이클립스가 설치되어 있다면 다음과 같이 입력하면 됩니다.


$ export ECLIPSE_HOME=~/eclipse_rcp


마지막으로 sdk/eclipse/scripts/build_server.sh 를 실행하면 플러그인  및 Android Studio 빌드가 시작됩니다. 인자로 빌드된 파일이 저장될 경로를 받습니다. 만약 ~/adt 디렉터리에 결과물을 저장하도록 하려면 다음과 같이 명령어를 입력하면 됩니다. 이 때, 결과물이 저장될 디렉터리는 미리 생성되어 있어야 합니다.


kunny@andronux:~/android$ sdk/eclipse/scripts/build_server.sh ~/adt


만약, 빌드 도중 다음과 같이 에러가 발생한다면 이클립스 및 CDT 버전이 맞지 않는 것이 주요 원인일 수 있으므로, 버전을 맞춘 후에 다시 시도해보세요.


java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.eclipse.ant.core.AntRunner.run(AntRunner.java:513)

at org.eclipse.ant.core.AntRunner.start(AntRunner.java:600)

at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)

at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)

at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)

at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)

at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)

at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)

at org.eclipse.equinox.launcher.Main.run(Main.java:1450)

at org.eclipse.equinox.launcher.Main.main(Main.java:1426)

Caused by: /Users/kunny/eclipse_rcp/plugins/org.eclipse.pde.build_3.8.100.v20130514-1028/scripts/build.xml:35: The following error occurred while executing this line:

/Users/kunny/eclipse_rcp/plugins/org.eclipse.pde.build_3.8.100.v20130514-1028/scripts/build.xml:91: The following error occurred while executing this line:

/Volumes/Android/sdk/eclipse/buildConfig/customTargets.xml:14: The following error occurred while executing this line:

/Volumes/Android/sdk/eclipse/buildConfig/allElements.xml:27: The following error occurred while executing this line:

/Users/kunny/eclipse_rcp/plugins/org.eclipse.pde.build_3.8.100.v20130514-1028/scripts/genericTargets.xml:111: A cycle was detected when generating the classpath com.android.ide.eclipse.adt_22.3.0.v201310180327-preview, org.eclipse.jdt_3.9.0.v20130911-1000, org.eclipse.ui.intro_3.4.200.v20130326-1254, org.eclipse.help.base_4.0.0.v20130911-1000, org.eclipse.equinox.http.jetty_3.0.100.v20130327-1442, org.eclipse.jetty.http_8.1.10.v20130312, org.eclipse.jetty.io_8.1.10.v20130312, org.eclipse.jetty.util_8.1.10.v20130312, org.slf4j.api_1.7.2.v20121108-1250, ch.qos.logback.classic_1.0.7.v20121108-1250, org.slf4j.api_1.7.2.v20121108-1250.



빌드가 완료되면 다음과 같이 지정한 폴더에 ADT 플러그인과 Android Studio가 생성되어 있는 것을 확인할 수 있습니다.