본문 바로가기

개발 개발/Android

envsetup.sh 사용법 / Android apk 부분 빌드

출처 : http://blog.naver.com/shlee7708/120131974681

소개

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

'개발 개발 > Android' 카테고리의 다른 글

adb를 wifi로 쓰기  (0) 2012.03.27
안드로이드의 부트 프로세스  (0) 2012.03.14
LOCAL_MODULE_TAGS  (0) 2012.02.09
CTS 정리  (0) 2011.12.20
임의로 Call stack(콜스택) 찍기  (0) 2011.12.16