Android envsetup.sh剖析

来源:互联网 发布:黄季焜 知乎 编辑:程序博客网 时间:2024/05/19 04:26

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

 

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

 
function help()                     # 显示帮助信息 
function get_abs_build_var()            # 获取绝对变量 
function get_build_var()               # 获取绝对变量 
function check_product()              # 检查product 
function check_variant()               # 检查变量 
function setpaths()                 # 设置文件路径 
function printconfig()                # 打印配置 
function set_stuff_for_environment()         # 设置环境变量 
function set_sequence_number()           # 设置序号 
function settitle()                   # 设置标题 
function choosetype()                # 设置type 
function chooseproduct()               # 设置product 
function choosevariant()                # 设置variant 
function tapas()                      # 功能同 choosecombo 
function choosecombo()              # 设置编译参数 
function add_lunch_combo()            # 添加lunch项目 
function print_lunch_menu()            # 打印lunch列表 
function lunch()                   # 配置lunch 
function m()                    # make from top 
function findmakefile()               # 查找makefile 
function mm()                   # make from current directory 
function mmm()                  # make the supplied directories 
function croot()                  # 回到根目录 
function cproj() 
function pid() 
function systemstack() 
function gdbclient() 
function jgrep()                  # 查找 java文件 
function cgrep()                   # 查找 c/cpp 文件 
function resgrep() 
function tracedmdump() 
function runhat() 
function getbugreports() 
function startviewserver() 
function stopviewserver() 
function isviewserverstarted() 
function smoketest() function runtest() 
function godir ()                    # 跳到指定目录 
# add the default one here 
add_lunch_combo generic-eng  
 
# Execute the contents of any vendorsetup.sh files we can find. 
for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null` 
do 
     echo "including $f" 
     . $f 
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
        www.2cto.com
列出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。


原创粉丝点击