Android build(6) -- shell脚本的学习

来源:互联网 发布:windows 画图命令 编辑:程序博客网 时间:2024/06/07 03:49

虽然接触她很久了,但只能说认识,。说道很熟,熟到称兄道弟,这是我的目标。想要混熟总得经历些事情,那么现在开始吧。最近在学习android,还是从android开始吧!

android源码中的build/envsetup.sh

顾名思义,这个脚本的主要作用是初始化编译环境,如环境变量。提供一些需要用到的函数,可作为指令调用。

我们看一下build/envsetup.sh 都干了什么事情。

1. 下面是剥离脚本中的函数部分:(写该脚本的老大,不明白为什么把执行的脚本和函数混在一块些?)

转自:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
01.build/envsetup.sh 脚本主体部分 
02. 
03.看源代码之前需要了解代码分布和结构,分析Makefile应该是最好的方法。在Blog记录之以备以后查看,也供有兴趣朋友参考。 
04. 
05.在编译donut之前,需要运行 
06. 
07.cd ~/mydroid 
08.. build/envsetup.sh 
09.lunch aosp_dream_us-eng 
10.make 
11. 
12.build/envsetup.sh 是编译android的入口。该shell脚本定义了一些函数,并设定了编译的环境变量。 
13. 
14.lunch aosp_dream_us-eng 配置用户需要编译的目标产品(target product)和变体(variant)。 
15. 
16.aosp_dream_us-eng 字符串包含了target product  和variant,它们用减号-隔开,aosp_dream_us是target product,eng是variant。 
17. 
18.variant 有三种选择user userdebug eng,可以从字面上看出其意义,但具体的差别还不是特别清楚,待后面分析之。 
19. 
20.lunch 的入口是让用户指定或者选择需要编译的target product 和 variant,出口是设定编译相关的环境变量。 
21. 
22.build/envsetup.sh 定义了很多函数,并且执行的脚本很分散,因此下面将所有的函数都删除掉了,剩余下脚本的主体,便于代码分析和走读。 
23. 
24.该主体主要做的事情是: 
25. 
26.1. 首先脚本设定了两个缺省的target product,一个是generic-eng,一个是simulator 
27. 
28.2. 运行所有vendor下的 vendorsetup.sh文件,在google官方的 donut源代码中,为vendor/aosp/vendorsetup.sh,内容如下: 
29. 
30.add_lunch_combo aosp_emulator_us-eng 
31.add_lunch_combo aosp_emulator_eu-eng 
32.add_lunch_combo aosp_dream_us-userdebug 
33.add_lunch_combo aosp_dream_eu-userdebug 
34.add_lunch_combo aosp_dream_us-eng 
35.add_lunch_combo aosp_dream_eu-eng 
36.add_lunch_combo aosp_sapphire_us-userdebug 
37.add_lunch_combo aosp_sapphire_eu-userdebug 
38.add_lunch_combo aosp_sapphire_us-eng 
39.add_lunch_combo aosp_sapphire_eu-eng 
40. 
41.可以看出,又添加了一些 和 aosp 相关的 target product 和 variant。 
42. 
43.下面是脚本主体,用蓝色添加了一下注释,便于阅读: 
44. 
45.# 定义了 variant的字符范围 
46.VARIANT_CHOICES=(user userdebug eng) 
47. 
48.# 如果是Linux环境,定义了几个和simulator相关的函数 
49.case`uname -s` in 
50.    Linux) 
51.        function choosesim() 
52.        { 
53.            echo"Build for the simulator or the device?" 
54.            echo"     1. Device" 
55.            echo"     2. Simulator" 
56.            echo 
57. 
58.            export TARGET_SIMULATOR= 
59.            local ANSWER 
60.            while [ -z $TARGET_SIMULATOR ] 
61.            do 
62.                echo -n"Which would you like? [1] " 
63.               if [ -z "$1" ] ; then 
64.                    read ANSWER 
65.               else 
66.                    echo $1 
67.                    ANSWER=$1 
68.                fi 
69.               case $ANSWER in 
70.               ""
71.                    export TARGET_SIMULATOR=false 
72.                    ;; 
73.                1) 
74.                    export TARGET_SIMULATOR=false 
75.                    ;; 
76.                Device) 
77.                    export TARGET_SIMULATOR=false 
78.                    ;; 
79.                2) 
80.                    export TARGET_SIMULATOR=true 
81.                    ;; 
82.                Simulator) 
83.                    export TARGET_SIMULATOR=true 
84.                    ;; 
85.                *) 
86.                    echo 
87.                    echo"I didn't understand your response.  Please try again." 
88.                    echo 
89.                    ;; 
90.                esac 
91.               if [ -n "$1" ] ; then 
92.                   break 
93.                fi 
94.            done 
95. 
96.            set_stuff_for_environment 
97.        } 
98.        ;; 
99.    *) 
100.        function choosesim() 
101.        { 
102.            echo"Only device builds are supported for" `uname -s` 
103.            echo"     Forcing TARGET_SIMULATOR=false" 
104.            echo 
105.           if [ -z "$1"
106.            then 
107.                echo -n"Press enter: " 
108.                read 
109.            fi 
110. 
111.            export TARGET_SIMULATOR=false 
112.            set_stuff_for_environment 
113.        } 
114.        ;; 
115.esac 
116. 
117. 
118.# 首先将 LUNCH_MENU_CHOICES 变量消除 
119.# Clear this variable.  It will be built up again when the vendorsetup.sh 
120.# files are included at the end ofthis file. 
121.unset LUNCH_MENU_CHOICES           
122. 
123. 
124.# 当前 LUNCH_MENU_CHOICES = generic-eng 
125.# add the default one here 
126.add_lunch_combo generic-eng          
127. 
128. 
129.# 当前 LUNCH_MENU_CHOICES = generic-eng simulator 
130.# ifwe're on linux, add the simulator.  There is a special case 
131.# in lunch to deal with the simulator 
132.if[ "$(uname)" = "Linux" ] ; then     
133.    add_lunch_combo simulator        
134.fi 
135. 
136. 
137.# 这里是MAC OS的环境,不考虑 
138.case`uname -s` in   
139.    Darwin) 
140.        function mgrep() 
141.        { 
142.            find -E . -type f -iregex'.*/(Makefile|Makefile\..*|.*\.make|.*\.mak|.*\.mk)'-print0 | xargs -0 grep --color -n "$@" 
143.        } 
144. 
145.        function treegrep() 
146.        { 
147.            find -E . -type f -iregex'.*\.(c|h|cpp|S|java|xml)' -print0 | xargs -0 grep --color -n -i "$@" 
148.        } 
149. 
150.        ;; 
151.    *) 
152.        function mgrep() 
153.        { 
154.            find . -regextype posix-egrep -iregex'(.*\/Makefile|.*\/Makefile\..*|.*\.make|.*\.mak|.*\.mk)'-type f -print0 | xargs -0 grep --color -n "$@" 
155.        } 
156. 
157.        function treegrep() 
158.        { 
159.            find . -regextype posix-egrep -iregex'.*\.(c|h|cpp|S|java|xml)' -type f -print0 | xargs -0 grep --color -n -i "$@" 
160.        } 
161. 
162.        ;; 
163.esac 
164. 
165. 
166.# 设定当前shell环境的数组下标从0开始还是1开始,并记录在 _arrayoffset 
167.# determine whether arrays are zero-based (bash) or one-based (zsh) 
168._xarray=(a b c) 
169.if[ -z "${_xarray[${#_xarray[@]}]}"
170.then 
171.    _arrayoffset=1 
172.else 
173.    _arrayoffset=0 
174.fi 
175.unset _xarray 
176. 
177. 
178.# 运行所有vendor下的 vendorsetup.sh文件 
179.#存在vendor/aosp/vendorsetup.sh 
180.当前 LUNCH_MENU_CHOICES = generic-eng simulator aosp_emulator_us-eng aosp_emulator_eu-eng aosp_dream_us-userdebug aosp_dream_eu-userdebug aosp_dream_us-eng aosp_dream_eu-eng aosp_sapphire_us-userdebug aosp_sapphire_eu-userdebug aosp_sapphire_us-eng aosp_sapphire_eu-eng 
181. 
182.# Execute the contents of any vendorsetup.sh files we can find. 
183.forf in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`  
184.do 
185.    echo "including $f" 
186.    . $f 
187.done 
188.unset f 
189.  
 
 
 
[ruby] view plaincopyprint?
01.build/envsetup.sh 脚本分析(lunch函数) 
02. 
03.lunch函数提供了一个菜单,让开发人员选择需要编译的目标产品(target product)和变体(variant),并做一些检查,设置环境变量,并打印出主要的环境变量。 
04. 
05.直接运行lunch(必须先运行 build/envsetup.sh,让lunch函数驻留到环境变量中) 
06. 
07.ning@ning-desktop:~/donut-compare/mydroid$ lunch 
08. 
09.You're building on Linux 
10. 
11.generic-eng simulator aosp_emulator_us-eng aosp_emulator_eu-eng aosp_dream_us-userdebug aosp_dream_eu-userdebug aosp_dream_us-eng aosp_dream_eu-eng aosp_sapphire_us-userdebug aosp_sapphire_eu-userdebug aosp_sapphire_us-eng aosp_sapphire_eu-eng 
12.Lunch menu... pick a combo: 
13.     1. generic-eng 
14.     2. simulator 
15.     3. aosp_emulator_us-eng 
16.     4. aosp_emulator_eu-eng 
17.     5. aosp_dream_us-userdebug 
18.     6. aosp_dream_eu-userdebug 
19.     7. aosp_dream_us-eng 
20.     8. aosp_dream_eu-eng 
21.     9. aosp_sapphire_us-userdebug 
22.     10. aosp_sapphire_eu-userdebug 
23.     11. aosp_sapphire_us-eng 
24.     12. aosp_sapphire_eu-eng 
25. 
26.Which would you like? [generic-eng] 7 
27. 
28.============================================ 
29.PLATFORM_VERSION_CODENAME=REL 
30.PLATFORM_VERSION=1.6 
31.TARGET_PRODUCT=aosp_dream_us 
32.TARGET_BUILD_VARIANT=eng 
33.TARGET_SIMULATOR=false 
34.TARGET_BUILD_TYPE=release 
35.TARGET_ARCH=arm 
36.HOST_ARCH=x86 
37.HOST_OS=linux 
38.HOST_BUILD_TYPE=release 
39.BUILD_ID=Donut 
40.============================================ 
41. 
42.用户也可以直接输入参数,不使用菜单 
43. 
44.ning@ning-desktop:~/donut-compare/mydroid$ lunch aosp_dream_us-eng 
45. 
46.============================================ 
47.PLATFORM_VERSION_CODENAME=REL 
48.PLATFORM_VERSION=1.6 
49.TARGET_PRODUCT=aosp_dream_us 
50.TARGET_BUILD_VARIANT=eng 
51.TARGET_SIMULATOR=false 
52.TARGET_BUILD_TYPE=release 
53.TARGET_ARCH=arm 
54.HOST_ARCH=x86 
55.HOST_OS=linux 
56.HOST_BUILD_TYPE=release 
57.BUILD_ID=Donut 
58.============================================ 
59. 
60.下面是lunch函数源代码,用蓝色添加了一下注释,便于阅读: 
61. 
62.function lunch() 
63.{ 
64.    local answer 
65. 
66.    if[ "$1" ] ; then 
67.       # lunch后面直接带参数 
68.        answer=$1 
69.    else 
70.       # lunch后面不带参数,则打印处所有的target product和variant菜单提供用户选择 
71.        print_lunch_menu    
72.        echo -n"Which would you like? [generic-eng] " 
73.        read answer 
74.    fi 
75. 
76.    local selection= 
77. 
78.    if[ -z "$answer"
79.    then 
80.           # 如果用户在菜单中没有选择,直接回车,则为系统缺省的generic-eng 
81.        selection=generic-eng 
82.    elif [ "$answer" = "simulator"
83.    then 
84.        # 如果是模拟器 
85.        selection=simulator 
86.    elif (echo -n $answer | grep -q -e"^[0-9][0-9]*$"
87.    then 
88.        # 如果answer是选择菜单的数字,则获取该数字对应的字符串 
89.        if [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ] 
90.        then 
91.            selection=${LUNCH_MENU_CHOICES[$(($answer-$_arrayoffset))]} 
92.        fi 
93.        # 如果 answer字符串匹配 *-*模式(*的开头不能为-) 
94.    elif (echo -n $answer | grep -q -e"^[^\-][^\-]*-[^\-][^\-]*$"
95.    then 
96.        selection=$answer 
97.    fi 
98. 
99.    if[ -z "$selection"
100.    then 
101.        echo 
102.        echo"Invalid lunch combo: $answer" 
103.        return
104.    fi 
105. 
106.    # specialcase the simulator 
107.    if [ "$selection"= "simulator"
108.    then 
109.        # 模拟器模式 
110.        export TARGET_PRODUCT=sim 
111.        export TARGET_BUILD_VARIANT=eng 
112.        export TARGET_SIMULATOR=true 
113.        export TARGET_BUILD_TYPE=debug 
114.    else 
115. 
116.        # 将 product-variant模式种的product分离出来 
117.        local product=$(echo -n $selection | sed -e"s/-.*$//"
118. 
119.        # 检查之,调用关系 check_product()->get_build_var()->build/core/config.mk比较罗嗦,不展开了 
120.        check_product $product 
121.        if [ $? -ne 0 ] 
122.        then 
123.            echo 
124.            echo"** Don't have a product spec for: '$product'" 
125.            echo"** Do you have the right repo manifest?" 
126.            product= 
127.        fi 
128. 
129.        # 将 product-variant模式种的variant分离出来 
130.        local variant=$(echo -n $selection | sed -e"s/^[^\-]*-//"
131. 
132.        # 检查之,看看是否在 (user userdebug eng) 范围内 
133.        check_variant $variant 
134.        if [ $? -ne 0 ] 
135.        then 
136.            echo 
137.            echo"** Invalid variant: '$variant'" 
138.            echo"** Must be one of ${VARIANT_CHOICES[@]}" 
139.            variant= 
140.        fi 
141. 
142.        if [ -z "$product"-o -z "$variant"
143.        then 
144.            echo 
145.           return
146.        fi 
147. 
148.        export TARGET_PRODUCT=$product 
149.        export TARGET_BUILD_VARIANT=$variant 
150.        export TARGET_SIMULATOR=false 
151.        export TARGET_BUILD_TYPE=release 
152.    fi # !simulator 
153. 
154.    echo 
155. 
156.    # 设置到环境变量,比较多,不再一一列出,最 简单的方法 set >env.txt 可获得 
157.    set_stuff_for_environment 
158.    # 打印一些主要的变量, 调用关系 printconfig()->get_build_var()->build/core/config.mk->build/core/envsetup.mk 比较罗嗦,不展开了 
159.    printconfig 
160.}

2. envsetup.sh 提供的命令

function help()
function get_abs_build_var()
function get_build_var()
function check_product()
function check_variant()
function setpaths()
function printconfig()
function set_stuff_for_environment()
function set_sequence_number()
function settitle()
function addcompletions()
function choosetype()
function chooseproduct()
function choosevariant()
function choosecombo()
function add_lunch_combo()
function print_lunch_menu()
function lunch()
function _lunch()
function tapas()
function m()
function findmakefile()
function mm()
function mmm()
function croot()
function cproj()
function pid()
function systemstack()
function gdbclient()
       
function jgrep()
function cgrep()
function resgrep()
       
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function key_home()
function key_back()
function key_menu()
function smoketest()
function runtest()
function godir () {
function set_java_home()

3. 命令详解

help
显示帮助,列出提供的命令
get_abs_build_var
列出make脚本中某变量值作为绝对路径。
使用方法:
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脚本中某变量的值。
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

原创粉丝点击