Android envsetup.sh剖析
每次进入到android source 目录后的第一件事恐怕就是先执行. build/envsetup.sh,完成一些命令的初始化,今天主要分析envsetup.sh。
view plaincopy to clipboardprint?
已经有人分析过了,直接搬过来:
http://www.lupaworld.com/home.php?mod=space&uid=131820&do=blog&id=149462
下面是详细解释,好多都没有用到过,看来我的确是个菜鸟
build/envsetup.sh提供了几个有用的shell命令,使用
$. build/envsetup.sh
可以引入到shell环境中。下面整理并简述。特别,envsetup.sh还同时会引入vendor/和device /目录下的
vendorsetup.sh脚本。
显示帮助,列出提供的命令
列出make 脚本中某变量的值,前缀上当前路径。ref dumpvar.mk
使用方法:
get_abs_build_var VAR_NAME
VAR_NAME是需要显示的 make 脚本中的变量。
例如:
get_abs_build_var TARGET_PRODUCT
返回 <Your Android Root>\<VAR_NAME Value>
列出make 脚本中某变量的值。ref dumpvar.mk
Usage:
get_build_var VAR_NAME
VAR_NAME是需要显示的 make 脚本中的变量。
Return:
<VAR_NAME Value>
Example:
get_abs_build_var TARGET_PRODUCT
检查指定的 TARGET_PRODUCT是否允许, 默认的有sim 和generic。 如果不允许, 则输出错误信息, 允许则无回显。
Usage:
check_product <YourTargetProduct>
Example:
check_product generic
检查variant是否支持,支持则返回0,不支持则返回1。允许的variant列表定义在envsetup.sh 中的
VARIANT_CHOICES 中,默认是user,userdebug,eng。定制android时,可以在VARIANT_CHOICES 中添
加vairant。
Usage:
check_variant <YourVariant>
Example:
check_variant eng
奇次执行时,将ANDROID_BUILD_PATHS 路径加到PATH中。偶次执行时,将ANDROID_BUILD_PATHS 路
径从PATH中去除。ANDROID_BUILD_PATHS 包括android 编译中要使用到的路径,例如
ANDROID_EABI_TOOLCHAIN,ANDROID_TOOLCHAIN,ANDROID_QTOOLS,
ANDROID_JAVA_TOOLCHAIN,ANDROID_PRODUCT_OUT 等等。
Usage:
setpaths printconfig
输出类似如下形势的配置信息。
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
依次调用settitle, set_java_home,setpaths,set_sequence_number。设置android编译需要的环境变量。
输出环境变量BUILD_ENV_SEQUENCE_NUMBER。
设置shell 的prompt 提示,PROMPT_COMMAND中加入 TARGET_PRODUCT,TARGET_BUILD_VARIANT,和
TARGET_BUILD_APPS 等信息提示。
配置环境变量 TARGET_SIMULATOR。linux 下会提示用户选择device 或 simulator。然后调用
set_stuff_for_environment 设置。
配置环境变量 TARGET_BUILD_TYPE_SIMULATOR。会提示用户选择release 或debug。然后调用
set_stuff_for_environment 设置。 chooseproduct
配置环境变量 TARGET_PRODUCT。会提示用户选择 release 或debug。然后调用 set_stuff_for_environment 设
置。
配置环境变量 TARGET_BUILD_VARIANT。会提示用户选择release 或debug。
依次调用choosesim,choosetype,chooseproduct,choosevariant,set_stuff_for_environment 配置,然后
调用printconfig 输出。
向环境变量 LUNCH_MENU_CHOICES 标识的列表中添加项。 envsetup.sh中默认添加了full-eng, full_x86-eng,和simulator。
列出 LUNCH_MENU_CHOICES 中的所有选项。
点菜,用户选择/指定product,variant后,lunch命令设置环境变量TARGET_PRODUCT,
TARGET_BUILD_VARIANT,TARGET_SIMULATOR,TARGET_BUILD_TYPE,随后调用
set_stuff_for_environment 设置,并printconfig 显示。
Usage:
lunch [<YourProduct>-<YourBuildVariant>]
不给参数时,将提示用户选择。
Example:
lunch
lunch generic-eng
用户给定variant 和一个或多个app name,就是LOCAL_PACKAGE_NAME的名字。tapas 设定
export TARGET_PRODUCT=generic
export TARGET_BUILD_VARIANT=$variant
export TARGET_SIMULATOR=false
export TARGET_BUILD_TYPE=release
export TARGET_BUILD_APPS=$apps
Usage:
tapas <YourVariant>? <YourAppName>*
?代表可选,*代表 0个,1个或多个。YourVariant 和 YourAppName 的次序可颠倒。
Example:
tapas user Calculator Calender
返回当前android 代码树的顶层路径。前提是当前路径位于android代码树中。
等价于在当前 android代码树的顶层路径下执行make 命令。
查找当前或最接近自己的祖辈路径上的Android.mk,返回Android.mk 的路径,假设当前路径处于android代码
树中。
如果当前路径是代码树顶层,则mm相当于 make。如果是深层,测 mm相当于
ONE_SHOT_MAKEFILE=$M make -C $T files $@
$M是findmakefile 发现的Android.mk,$T 是代码树顶层路径,files是 main.mk 中定义的phony goal,就是
完成$M 对应目录范围内,所有android需编译的 modules以及辅助说明txt文件。
给定package 的路径,则mm 会make 相应的package。
例如,
mmm package/apps/Calculator croot
改变当前路径到代码树顶层。
改变当前路径到最近的还有Android.mk 文件的祖父辈路径。
使用adb shell ps命令列出手机上指定名字的进程的pid。
Usage:
pid <YourName>
使用kill -3system_server将系统进程中的线程信息写入/data/anr/traces.txt。
建立gdb 调试环境,包括两步,手机上运行gdbserver,本机上运行arm-eabi-gdb。
Usage:
gdbclient <EXE> <PORT> <AppName>
EXE: AppName 的执行名。
PORT:gdbserver 的端口,例如, 192.168.2.102:5039
AppName:手机中ps列出的app 名字,据此查pid。
查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.mk,.xml,.sh 文件,即源码文件中包含特定单词的行,
并颜色显示输出。
Usage:
sgrep <YourWord>
Example:
sgrep Calendar
同sgrep,但只查.java文件。
同sgrep,但只查 c相关的文件,即.c,.cc,.cpp,.h文件。
同sgrep,但只查res相关的.xml文件。
同sgrep,但只查 make 相关的脚本文件,包括Makefile 文件,Makefile 目录下的所有文件,.make 文件,.mak
文件和.mk 文件。
查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.xml 文件,即源码文件中包含特定单词的行,并颜色显示输
出。
输出prebuilt 的路径。
生成dexlist 文件qtrace.dexlit,dmtrace 数据文件dmtrace,和调用dmtracedump 工具生成的dmtrace 解析文
件dmtrace.html,将生成文件放到指定路径。
Usage:
tracedmdump <YourDirName>
如果YourDirName 中不含’\’,则将放置的路径是$ANDROID_PRODUCT_OUT/traces/YourDirName。
貌似使用kill -10的方法得到heap dump并取到本地。 使用hat以http方式展现出来。 hat可能是个lightweight http
server,不曾用过。
将手机/sdcard/bugreports 目录下的文件下载到本地并压缩打包。
用指定端口启动viewserver。
Usage:
startviewserver <Port>
不指定端口,则默认4939。
关闭viewserver。
检查viewserver是否可用。
编译smoketest 并安装手机运行。
运行development/testrunner/runtest.py $@
给出一个词,godir 会输出一个路径列表供用户选择要进入的路径。路径列表包含的路径满足,路径名中包含这个词,或这路径下的文件有文件名含这个词。out/路径下不考虑。
Usage:
godir <YourKey>
Usage:
godir Calculator
设置JAVA_HOME 环境变量为/usr/lib/jvm/java-6-sun。