Android build(6) -- shell腳本的學習

雖然接觸她很久了,但只能說認識,。說道很熟,熟到稱兄道弟,這是我的目標。想要混熟總得經歷些事情,那麼現在開始吧。最近在學習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 of this 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.# if we'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.for f 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.    # special case 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章