每次进入到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

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

1. 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. i-jetty环境搭配与编译
  2. Android(安卓)适配器Adapter的学习
  3. Android(安卓)多媒体
  4. android studio的Gradle一直在sync的办法,不停的下载各种文件
  5. android 模拟器中启用相机API支持
  6. Android(安卓)字体修改
  7. Android(安卓)Studio SVN 使用方法
  8. Pycharm安装PyQt5的详细教程
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android横竖屏切换总结
  2. [android] Serializable 和 Parcelable
  3. How to create and use SDCard image for
  4. Android的SocketTCP客户端发送信息
  5. 1.1 Android(安卓)入门
  6. Android弹幕实现:基于B站弹幕开源系统(5)-抽
  7. Qt on Android:将Qt调试信息输出到logcat
  8. Android(安卓)文件操作详解及简单实例
  9. Android(安卓)开源的真相: 无法fork
  10. Android(安卓)8.0适配之应用图标适配