개발 개발/Android
envsetup.sh 사용법 / Android apk 부분 빌드
뭉기
2012. 3. 12. 18:41
출처 : 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 라고 실행하게 되면 다음과 같이 간략한 도움말을 출력해준다.
$ helpInvoke ". 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 findmakefilegdbclient get_abs_build_var get_build_var getbugreports getprebuilt gettop godir help isviewserverstarted jgrep lunch m mm mmmpid print_lunch_menu printconfig resgrep runhat runtest runtest_py set_sequence_number set_stuff_for_environment setpaths settitlesmoketest startviewserver stopviewserver tapas tracedmdumpcroot 함수
Android full source root directory로 이동한다. 아래의 예를 참고하자.
$ pwd/home/fire/bin/mydroid/packages/apps/Email$ croot$ pwd/home/fire/bin/mydroidm, 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/xmlSelect one: 1$ pwd/home/fire/bin/mydroid/packages/apps/Email/res/drawable