envsetup.sh 사용하기

소개

envsetup.sh는 Android build system에서 제공하는 shell script 함수 모음이다.

사용 준비

Shell 상에서 다음과 같이 실행해주면 envsetup.sh 내에 정의된 여러 함수들이 현재 실행 중인 shell 환경으로 로드된다.

$ . $ANDROID_HOME/build/envsetup.sh

참고: envsetup.sh를 자주 사용하는 경우 위 내용을 .profile이나 .bashrc와 같은 설정 파일에 추가해주는 것도 좋을 것이다.

참고2: $ANDROID_HOME 환경 변수는 반드시 미리 정의되어 있어야 하고, 그 내용은 Android full source root path이다.

기본적인 사용 방법

많은 함수들이 제공되지만 주로 사용되는 몇 가지만 정리하면 다음과 같다.

주의: 거의 모든 함수는, 제대로 실행되기 위해서 shell 상의 현재 경로가 Android full source tree 아래의 어느 곳이어야 한다.

help 함수

Shell 상에서 help 라고 실행하게 되면 다음과 같이 간략한 도움말을 출력해준다.

$ help

Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:

- croot: Changes directory to the top of the tree.

- m: Makes from the top of the tree.

- mm: Builds all of the modules in the current directory.

- mmm: Builds all of the modules in the supplied directories.

- cgrep: Greps on all local C/C++ files.

- jgrep: Greps on all local Java files.

- resgrep: Greps on all local res/*.xml files.

- godir: Go to the directory containing a file.

Look at the source to view more functions. The complete list is:

add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant croot findmakefile

gdbclient get_abs_build_var get_build_var getbugreports getprebuilt gettop godir help isviewserverstarted jgrep lunch m mm mmm

pid print_lunch_menu printconfig resgrep runhat runtest runtest_py set_sequence_number set_stuff_for_environment setpaths settitle

smoketest startviewserver stopviewserver tapas tracedmdump

croot 함수

Android full source root directory로 이동한다. 아래의 예를 참고하자.

$ pwd

/home/fire/bin/mydroid/packages/apps/Email

$ croot

$ pwd

/home/fire/bin/mydroid

m, mm, mmm 함수들

Source에 대한 build를 도와주는 함수들이다.

  • m - 현재 경로를 기준으로 소스 트리의 최상위 경로로 이동한 후 make를 실행해준다.

    • 아래의 예에서 보면 Email application directory에서 Android full source root directory로 이동하여 make를 실행한 것을 알 수 있다.

    • 참고: make 작업이 완료되면 다시 이전의 경로로 돌아오게 된다.

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps/Email

        • $ m

        • make: Entering directory `/home/fire/bin/mydroid'

        • build/core/product_config.mk:261: WARNING: adding test OTA key

        • ============================================

        • TARGET_PRODUCT=generic

        • TARGET_BUILD_VARIANT=eng

        • TARGET_SIMULATOR=false

        • TARGET_BUILD_TYPE=release

        • TARGET_ARCH=arm

        • HOST_ARCH=x86

        • HOST_OS=linux

        • HOST_BUILD_TYPE=release

        • BUILD_ID=

        • ============================================

        • ... 생략 ...

        • make: Leaving directory `/home/fire/bin/mydroid'

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps/Email

  • mm - 현재 경로를 기준으로 가장 가까운 단위 모듈을 찾아서 그 모듈만 build 해준다.

    • 아래 예에서는 Email application을 build한다.

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps/Email

        • $ mm

        • make: Entering directory `/home/fire/bin/mydroid'

        • build/core/product_config.mk:261: WARNING: adding test OTA key

        • ============================================

        • TARGET_PRODUCT=generic

        • TARGET_BUILD_VARIANT=eng

        • TARGET_SIMULATOR=false

        • TARGET_BUILD_TYPE=release

        • TARGET_ARCH=arm

        • HOST_ARCH=x86

        • HOST_OS=linux

        • HOST_BUILD_TYPE=release

        • BUILD_ID=

        • ============================================

        • ... 생략 ...

        • make: Leaving directory `/home/fire/bin/mydroid'

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps/Email

  • mmm - 파라미터로 주어진 경로들에 대해 단위 모듈 build를 해준다. 마지막에 snod를 추가할 경우 System image 파일까지 새로 생성해준다.

    • 아래 예에서는 Email과 Mms application을 build한 후 System image까지 새로 생성한다.

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps

        • $ mmm Email Mms snod

        • make: Entering directory `/home/fire/bin/mydroid'

        • build/core/product_config.mk:261: WARNING: adding test OTA key

        • ============================================

        • TARGET_PRODUCT=generic

        • TARGET_BUILD_VARIANT=eng

        • TARGET_SIMULATOR=false

        • TARGET_BUILD_TYPE=release

        • TARGET_ARCH=arm

        • HOST_ARCH=x86

        • HOST_OS=linux

        • HOST_BUILD_TYPE=release

        • BUILD_ID=

        • ============================================

        • ... 생략 ...

        • make snod: ignoring dependencies

        • Target system fs image: out/target/product/generic/system.img

        • make: Leaving directory `/home/fire/bin/mydroid'

        • $ pwd

        • /home/fire/bin/mydroid/packages/apps

cgrep, jgrep, resgrep 함수들

각각 C/C++ source, Java source, Resource로부터 특정 문자열 패턴을 찾아준다. 아래의 예는 Java source들 중에서 "class Accounts"라는 문자열 패턴을 포함하는 부분을 찾은 결과이다.

$ pwd

/home/fire/bin/mydroid/packages/apps/Email

$ jgrep "class Accounts"

./src/com/android/email/activity/AccountShortcutPicker.java:96: class AccountsAdapter extends ArrayAdapter<Account> {

./src/com/android/email/activity/Accounts.java:54:public class Accounts extends ListActivity implements OnItemClickListener, OnClickListener {

./src/com/android/email/activity/Accounts.java:265: class AccountsAdapter extends ArrayAdapter<Account> {

godir 함수

파라미터로 넘겨준 이름을 포함하는 경로로 이동할 수 있게 도와준다.

경로가 여러 개일 경우 목록을 보여주고 번호로 선택할 수 있는 인터페이스를 제공한다.

$ pwd

/home/fire/bin/mydroid

$ godir Email/res

[1] ./packages/apps/Email/res/drawable

[2] ./packages/apps/Email/res/layout

[3] ./packages/apps/Email/res/layout-land

[4] ./packages/apps/Email/res/menu

[5] ./packages/apps/Email/res/values

[6] ./packages/apps/Email/res/values-cs

[7] ./packages/apps/Email/res/values-de

[8] ./packages/apps/Email/res/values-es

[9] ./packages/apps/Email/res/values-fr

[10] ./packages/apps/Email/res/values-it

[11] ./packages/apps/Email/res/values-ja

[12] ./packages/apps/Email/res/values-ko

[13] ./packages/apps/Email/res/values-nb

[14] ./packages/apps/Email/res/values-nl

[15] ./packages/apps/Email/res/values-pl

[16] ./packages/apps/Email/res/values-ru

[17] ./packages/apps/Email/res/values-zh-rCN

[18] ./packages/apps/Email/res/values-zh-rTW

[19] ./packages/apps/Email/res/xml

Select one: 1

$ pwd

/home/fire/bin/mydroid/packages/apps/Email/res/drawable