每次进入到android source 目录后的第一件事恐怕就是先执行. build/envsetup.sh,完成一些命令的初始化,今天主要分析envsetup.sh。

1. 命令-也就是envsetup.sh中的函数

view plain copy to clipboard print ?
  1. functionhelp()#显示帮助信息
  2. functionget_abs_build_var()#获取绝对变量
  3. functionget_build_var()#获取绝对变量
  4. functioncheck_product()#检查product
  5. functioncheck_variant()#检查变量
  6. functionsetpaths()#设置文件路径
  7. functionprintconfig()#打印配置
  8. functionset_stuff_for_environment()#设置环境变量
  9. functionset_sequence_number()#设置序号
  10. functionsettitle()#设置标题
  11. functionchoosetype()#设置type
  12. functionchooseproduct()#设置product
  13. functionchoosevariant()#设置variant
  14. functiontapas()#功能同choosecombo
  15. functionchoosecombo()#设置编译参数
  16. functionadd_lunch_combo()#添加lunch项目
  17. functionprint_lunch_menu()#打印lunch列表
  18. functionlunch()#配置lunch
  19. functionm()#makefromtop
  20. functionfindmakefile()#查找makefile
  21. functionmm()#makefromcurrentdirectory
  22. functionmmm()#makethesupplieddirectories
  23. functioncroot()#回到根目录
  24. functioncproj()
  25. functionpid()
  26. functionsystemstack()
  27. functiongdbclient()
  28. functionjgrep()#查找java文件
  29. functioncgrep()#查找c/cpp文件
  30. functionresgrep()
  31. functiontracedmdump()
  32. functionrunhat()
  33. functiongetbugreports()
  34. functionstartviewserver()
  35. functionstopviewserver()
  36. functionisviewserverstarted()
  37. functionsmoketest()functionruntest()
  38. functiongodir()#跳到指定目录
  39. #addthedefaultonehere
  40. add_lunch_combogeneric-eng
  41. #Executethecontentsofanyvendorsetup.shfileswecanfind.
  42. forfin`/bin/lsvendor/*/vendorsetup.shvendor/*/build/vendorsetup.sh2>/dev/null`
  43. do
  44. echo"including$f"
  45. .$f
  46. done

2. lunch命令

已经有人分析过了,直接搬过来:

http://www.lupaworld.com/home.php?mod=space&uid=131820&do=blog&id=149462

下面是详细解释,好多都没有用到过,看来我的确是个菜鸟

. build/envsetup.sh

build/envsetup.sh提供了几个有用的shell命令,使用

$. build/envsetup.sh

可以引入到shell环境中。下面整理并简述。特别,envsetup.sh还同时会引入vendor/和device /目录下的

vendorsetup.sh脚本。

help

显示帮助,列出提供的命令

get_abs_build_var

列出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>

get_build_var


列出make 脚本中某变量的值。ref dumpvar.mk

Usage:

get_build_var VAR_NAME

VAR_NAME是需要显示的 make 脚本中的变量。

Return:

<VAR_NAME Value>

Example:

get_abs_build_var TARGET_PRODUCT

check_product

检查指定的 TARGET_PRODUCT是否允许, 默认的有sim 和generic。 如果不允许, 则输出错误信息, 允许则无回显。

Usage:

check_product <YourTargetProduct>

Example:

check_product generic

check_variant

检查variant是否支持,支持则返回0,不支持则返回1。允许的variant列表定义在envsetup.sh 中的

VARIANT_CHOICES 中,默认是user,userdebug,eng。定制android时,可以在VARIANT_CHOICES 中添

加vairant。

Usage:

check_variant <YourVariant>

Example:

check_variant eng

setpaths

奇次执行时,将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

============================================

set_stuff_for_environment

依次调用settitle, set_java_home,setpaths,set_sequence_number。设置android编译需要的环境变量。

set_sequence_number

输出环境变量BUILD_ENV_SEQUENCE_NUMBER。

settitle

设置shell 的prompt 提示,PROMPT_COMMAND中加入 TARGET_PRODUCT,TARGET_BUILD_VARIANT,和

TARGET_BUILD_APPS 等信息提示。

choosesim

配置环境变量 TARGET_SIMULATOR。linux 下会提示用户选择device 或 simulator。然后调用

set_stuff_for_environment 设置。

choosetype

配置环境变量 TARGET_BUILD_TYPE_SIMULATOR。会提示用户选择release 或debug。然后调用

set_stuff_for_environment 设置。 chooseproduct

配置环境变量 TARGET_PRODUCT。会提示用户选择 release 或debug。然后调用 set_stuff_for_environment 设

置。

choosevariant

配置环境变量 TARGET_BUILD_VARIANT。会提示用户选择release 或debug。

choosecombo

依次调用choosesim,choosetype,chooseproduct,choosevariant,set_stuff_for_environment 配置,然后

调用printconfig 输出。

add_lunch_combo

向环境变量 LUNCH_MENU_CHOICES 标识的列表中添加项。 envsetup.sh中默认添加了full-eng, full_x86-eng,和simulator。

print_lunch_menu

列出 LUNCH_MENU_CHOICES 中的所有选项。

lunch

点菜,用户选择/指定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

tapas

用户给定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

gettop

返回当前android 代码树的顶层路径。前提是当前路径位于android代码树中。

m

等价于在当前 android代码树的顶层路径下执行make 命令。

findmakefile

查找当前或最接近自己的祖辈路径上的Android.mk,返回Android.mk 的路径,假设当前路径处于android代码

树中。

mm

如果当前路径是代码树顶层,则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文件。

mmm

给定package 的路径,则mm 会make 相应的package。

例如,

mmm package/apps/Calculator croot

改变当前路径到代码树顶层。

cproj

改变当前路径到最近的还有Android.mk 文件的祖父辈路径。

pid

使用adb shell ps命令列出手机上指定名字的进程的pid。

Usage:

pid <YourName>

systemstack

使用kill -3system_server将系统进程中的线程信息写入/data/anr/traces.txt。

gdbclient

建立gdb 调试环境,包括两步,手机上运行gdbserver,本机上运行arm-eabi-gdb。

Usage:

gdbclient <EXE> <PORT> <AppName>

EXE: AppName 的执行名。

PORT:gdbserver 的端口,例如, 192.168.2.102:5039

AppName:手机中ps列出的app 名字,据此查pid。

sgrep

查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.mk,.xml,.sh 文件,即源码文件中包含特定单词的行,

并颜色显示输出。

Usage:

sgrep <YourWord>

Example:

sgrep Calendar

jgrep

同sgrep,但只查.java文件。

cgrep

同sgrep,但只查 c相关的文件,即.c,.cc,.cpp,.h文件。

resgrep

同sgrep,但只查res相关的.xml文件。

mgrep

同sgrep,但只查 make 相关的脚本文件,包括Makefile 文件,Makefile 目录下的所有文件,.make 文件,.mak

文件和.mk 文件。

treegrep

查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.xml 文件,即源码文件中包含特定单词的行,并颜色显示输

出。

getprebuilt

输出prebuilt 的路径。

tracedmdump

生成dexlist 文件qtrace.dexlit,dmtrace 数据文件dmtrace,和调用dmtracedump 工具生成的dmtrace 解析文

件dmtrace.html,将生成文件放到指定路径。

Usage:

tracedmdump <YourDirName>

如果YourDirName 中不含’\’,则将放置的路径是$ANDROID_PRODUCT_OUT/traces/YourDirName。

runhat

貌似使用kill -10的方法得到heap dump并取到本地。 使用hat以http方式展现出来。 hat可能是个lightweight http

server,不曾用过。

getbugreports

将手机/sdcard/bugreports 目录下的文件下载到本地并压缩打包。

startviewserver

用指定端口启动viewserver。

Usage:

startviewserver <Port>

不指定端口,则默认4939。

stopviewserver

关闭viewserver。

isviewserverstarted

检查viewserver是否可用。

smoketest

编译smoketest 并安装手机运行。

runtest

运行development/testrunner/runtest.py $@

godir

给出一个词,godir 会输出一个路径列表供用户选择要进入的路径。路径列表包含的路径满足,路径名中包含这个词,或这路径下的文件有文件名含这个词。out/路径下不考虑。

Usage:

godir <YourKey>

Usage:

godir Calculator

set_java_home

设置JAVA_HOME 环境变量为/usr/lib/jvm/java-6-sun。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android EOFException异常解决办法 (SharedPreferences保存对象)
  6. android中关于tools:context="activity name"解惑
  7. 快速的Android漏洞的审计工具
  8. android sdk 超时 解决办法
  9. andriod 中下载图片到sdcard中例子

随机推荐

  1. Android(安卓)单选之史上最简单的ListVie
  2. android实现自定义相机以及图片的水印
  3. android设置edittext光标的颜色
  4. Android通过OpenSL ES播放音频套路详解
  5. EditText中android:inputType="number"遇
  6. android 控制屏幕亮度
  7. 【Android】实现动态显示隐藏密码输入框
  8. android AIDL实践之清理应用缓存
  9. 0.[WP Developer体验Andriod开发]之从零
  10. 【实习周记】Android getevent.c源码分析