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