Android調試命令總結
Java命令列工具am工具(啟動和調試組件)
am工具的含義為Activity Manager。
usage: am [subcommand] [options]
start an Activity: am start [-D] [-W]
-D: enable debugging
-W: wait for launch to complete
start a Service: am startservice
send a broadcast Intent: am broadcast
start an Instrumentation: am instrument [flags] -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT) -e : set argument to -p : write profiling data to -w: wait for instrumentation to finish before returning start profiling: am profile start stop profiling: am profile stop start monitoring: am monitor [--gdb ] --gdb: start gdbserv on the given port at crash/ANR
主要參數Intent:
顯式啟動Activity:
am start -n {包名}/{包名}.{活動名}
隱式啟動Activity:
am start -a {指定的action} -d {URI}
隱式啟動服務:
am startService -a {指定的action}
隱式發送廣播:
am broadcast -a {指定的action}
啟動Calculator應用:
am start -n com.android.calculator2/com.android.calculator2.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
am start -n com.android.calculator2/.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
啟動應用並帶有URL參數:
am start -a android.intent.action.VIEW -d http://www.baidu.com
Starting: Intent { act=android.intent.action.VIEW dat=http://www.baidu.com }
am start -a android.intent.action.CALL -d tel:12345
Starting: Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx }
幾種VIEW類型(查看)的啟動:
am start -a android.intent.action.VIEW -d file:///sdcard/image.jpg -t image/*
am start -a android.intent.action.VIEW -d file:///sdcard/audio.mp3 -t audio/*
am start -a android.intent.action.VIEW -d file:///sdcard/video.3gp -t video/*
幾種GET_CONTENT類型(擷取)的啟動:
am start -a android.intent.action.GET_CONTENT -t image/*
am start -a android.intent.action.GET_CONTENT -t video/*
am start -a android.intent.action.GET_CONTENT -t audio/*
注意:
[–activity-brought-to-front]等的參數和 android.content.Intent類的FLAG_XXX內容相對應。
-f參數可以直接加代表10進位或者16進位的FLAG數字。
pm工具(應用程式套件組合)
PM工具的含義為Package Manager。
pm
usage: pm [list|path|install|uninstall]
pm list packages [-f]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm path PACKAGE
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
pm setInstallLocation [0/auto] [1/internal] [2/external]
列出安裝包的資訊。
pm list packages -f
另一個檔案: /data/system/packages.xml
禁止包(或者組件),清除包的資料,可以排除個別包的影響。
pm disable {包名.組件名}
pm enable {包名.組件名}
pm clear {包名}
直接安裝包
pm install /sdcard/SkeletonApp.apk
pkg: /sdcard/SkeletonApp.apk Success D/installd( 36): DexInv:
— BEGIN ‘/data/app/com.example.android.skeletonapp-1.apk’ — D/dalvikvm( 763): DexOpt: load 37ms, verify+opt 52ms D/installd(
36): DexInv: — END ‘/data/app/com.example.android.skeletonapp-1.apk’
(success) —
指定路徑,進行安裝
pm set-install-location
pm get-install-location
input工具(類比按鍵工具)
input工具用於類比使用者的按鍵輸入和文本輸入。
input
usage: input [text|keyevent]
input text
input keyevent
input tap
input swipe
類比按鍵的輸入,按鍵碼參考 android.View.KeyEvent。
input keyevent 82 # 菜單事件(MENU)
input keyevent 4 # 回退事件 (BACK)
input text “i_love_beijing” # 輸入文字
類比按鍵輸入可以用於簡單的程式調試,在Activity中實現onKeyUp()方法即可。
Android 4.0+才可以使用tap和swipe子命令。
ime工具(IME管理)
ime工具用於IME管理。
ime
usage: ime list [-a] [-s]
ime enable ID
ime disable ID
ime set ID
列出IME:
ime list
選擇IME
ime set
連續命令列指令碼
指令碼實際上是利用了Android的shell系統啟動並執行,同樣可以傳入命令列的參數。 通過使用am調用Activity,通過input進行輸入事件,可以類比一個可執行程式的執行過程。 指令碼中還可以傳遞shell中傳入的參數。
編寫一個自動化指令碼:
echo $*am start -a android.intent.action.VIEW -d about://blankecho Enter Browserinput keyevent 82 echo Browser Menuinput keyevent 22 input keyevent 22 input keyevent 66 input keyevent 4 echo Browser Main
運行指令碼:
chmod 777 test.sh./test.sh
(我就不告訴你,很多同學通過這種方式去抓別人app的資料)
命令列和插入式組件結合的調試
Android應用程式APK調試的幾個要點:
核心方法是利用命令列的Intent。 單次調用可使用BroadcastReceiver組件 後台調用可使用Service組件 BroadcastReceiver組件也可放入其他組件內部 調用的參數使用Intent傳入;
啟動:am startservice和am broadcast
首要參數使用-a,資料參數為-d
AndroidManifest.xml當中要定義IntentFilter
帶資料的Intet和不帶資料的Intent命令列不同
:// : //…/ # ?
Host是字串,Port是整數,Path是多個字串, Segments是字串,QueryParameter是無順序的多個參數。
android.net.Uri類可以完成參數的
public abstract String getScheme ()public abstract String getHost() public abstract int getPort()public abstract String getFragment()public abstract String getPath()public abstract List getPathSegments()public String getQueryParameter(String key)public List getQueryParameters(String key)
方法:
am startservice -a android.intent.action.testtools.stub1 command://?key=10
am startservice -a android.intent.action.testtools.stub1 -d command://?key=5
am startservice -a android.intent.action.testtools.stub2 -d “command://?key1=hello&key2=120”
am broadcast -a android.intent.action.testtools.stub
am broadcast -a android.intent.action.testtools.stub command://abc:1234#hello
am broadcast -a android.intent.action.testtools.stub command:#/sdcard/test.txt
am broadcast -a android.intent.action.testtools.stub command://abc/hi1/hi2/hi3#hello
參數解析方法
String action = intent.getAction();Uri data = intent.getData();Log.i(TAG, action = + action + data = + data); if(null != data){ String host = data.getHost(); int port = data.getPort(); String path = data.getPath(); String fragment = data.getFragment(); Log.i(TAG, [Host]:[ + host + ] + [Port]:[ + port + ] + [Path]:[ + path + ] + [Fragment]:[ + fragment + ] ); List pathlist = data.getPathSegments(); for(int i=0;i< pathlist.size();i++ ){ Log.i(TAG, PATH[+i+]:[ + pathlist.get(i) + ] ); }}
注意:不同的Android版本組件是否可以直接使用的問題。
Android的特殊命令網路設定netcfg
netcfg -h
usage: netcfg [ {dhcp|up|down}]
netcfg
ndc和vdc
vdc volume list
ndc interface list
service
service -h
Usage: service [-h|-?]
service list
service check SERVICE
service call SERVICE CODE [i32 INT | s16 STR] … Options: i32: Write the integer INT into the send parcel. s16: Write the
UTF-16 string STR into the send parcel.
service list
iphonesubinfo等就是ServiceManager管理的服務名稱。
直接利用Binder方式調用。
屬性服務
Android具有prop屬性系統,使用getprop和setprop可以獲得屬性和設定屬性。
getprop查看屬性值
getprop ro.secure
setprZ喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcCDJ6NbDyvTQ1Na1PC9zdHJvbmc+PC9wPg0KPGJsb2NrcXVvdGU+DQoJPHA+dXNhZ2U6IHNldHByb3A8L3A+DQo8L2Jsb2NrcXVvdGU+DQo8cD48c3Ryb25nPndhdGNocHJvcHO87LLiyvTQ1Na1seS7rzwvc3Ryb25nPjxiciAvPg0Kd2F0Y2hwcm9wc9PD09q84LLiyvTQ1LXEseS7r6Os1rG909TL0NDV4rj2w/zB7qOsvavQzrPJ0a27t6Osvauw0c+1zbPDv9K7uPbK9NDUtcSx5LuvwdCz9qGjPC9wPg0KPHA+PHN0cm9uZz53YXRjaHByb3BzPC9zdHJvbmc+PC9wPg0KPGJsb2NrcXVvdGU+DQoJPHA+Jmx0O8qxvOQmZ3Q7IMr00NQgPSAmbHNxdW87yvTQ1Na1JnJzcXVvOyAmaGVsbGlwOyZoZWxsaXA7PGJyIC8+DQoJJmx0O8qxvOQmZ3Q7IMr00NQgPSAmbHNxdW87yvTQ1Na1JnJzcXVvOzwvcD4NCjwvYmxvY2txdW90ZT4NCjxociAvPg0KPHA+c3RhcnS6zXN0b3DD/MHuo6zTw9Pav6rKvLrNzaPWuWluaXS9+LPM1tC1xHNlcnZpY2WhozwvcD4NCjxwPjxzdHJvbmc+c3RhcnQge3NlcnZpY2VfbmFtZX08L3N0cm9uZz48YnIgLz4NCjxzdHJvbmc+c3RvcCB7c2VydmljZV9uYW1lfTwvc3Ryb25nPjwvcD4NCjxwPr3ivvZBbmRyb2lkz7XNs7XEZGFlbW9usbtraWxs1q6689bY0MLG9LavtcTOysziPC9wPg0KPGgyIGlkPQ=="系統資訊查看小工具">系統資訊查看小工具
Android中還提供了dumpstate、dumpsys、bugreport等幾個工具,用於查看系統各個方面的資訊。
dumpstate
工具用於將系統裝置的狀態匯出,通過訪問sys檔案系統和調用其他工具來完成。
dumpsys
用於查看應用的狀態。
由於dumpstate和dumpsys兩個工具匯出的內容都較多,最好在主機端配合adb來使用。
procrank抓取記憶體資訊
procrank工具用於抓取Android進程的記憶體使用量資訊。
procrank
VSS = Virtual Set Size
RSS = Resident Set Size
PSS = Proportional Set Size
USS = Unique Set Size
Android中的Linux命令
由於Android系統基於Linux實現,在系統中可以使用Linux中標準的方法進行調試。在Android中常用的通用Linux的調試方法主要包括以下幾個:
系統資訊工具(ps、kill、proc檔案系統) /dev/裝置檔案和/sys/檔案系統 系統效能工具(vmstat和top) gdb調試ps和proc查看進程
ps
USER PID PPID VSIZE RSS WCHAN PC NAMEroot 1 0 268 180 c009b74c 0000875c S /initroot 2 0 0 0 c004e72c 00000000 S kthreadd各個核心線程root 3 2 0 0 c003fdc8 00000000 S ksoftirqd/0root 4 2 0 0 c004b2c4 00000000 S events/0……省略,其他各個核心線程各個由init的啟動守護進程root 27 1 248 152 c009b74c 0000875c S /sbin/ueventdroot 29 1 3916 476 ffffffff afd0bdac S /system/bin/vold……省略,各個由init的啟動守護進程 各個應用程式進程system 64 33 125924 29216 ffffffff afd0b6fc S system_server……省略,各個應用程式進程
使用ps -t <進程id>則表示查看某一個進程中的線程。
kill命令可以指定進程的id來殺死進程。
proc檔案系統
/proc/<進程id>/為某一個進程的目錄。
cat /proc/34/cmdline
/system/bin/mediaserver
cat /proc/34/status #進程狀態
Name: mediaserver # 進程名稱State: S (sleeping) # 進程狀態Tgid: 34 # 線程組IDPid: 34 # 進程IDPPid: 1 # 父進程IDTracerPid: 0Uid: 1013 1013 1013 1013Gid: 1000 1000 1000 1000FDSize: 32Groups: 1003 1005 1006 3001 3002 3003 3004Threads: 8 # 所包含的線程數
環境變數
printenv命令用於查看系統中的各個環境變數
printenv
檔案系統
moun命令用於查看系統的掛接的檔案系統分區。
mount
rootfs / rootfs ro 0 0tmpfs /dev tmpfs rw,mode=755 0 0devpts /dev/pts devpts rw,mode=600 0 0proc /proc proc rw 0 0sysfs /sys sysfs rw 0 0none /acct cgroup rw,cpuacct 0 0tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0none /dev/cpuctl cgroup rw,cpu 0 0/dev/block/mtdblock0 /system yaffs2 ro 0 0/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0/dev/block/vold/179:0 /mnt/sdcard vfat
mount -t vfat /dev/block/mmcblk0p1 /sdcard
mount -o rw,remount -t yaffs /dev/block/mtdblock0 /system
網路設定和資訊
ifconfig用於配置網路
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
ifconfig eth0
eth0: ip 192.168.0.1 mask 255.255.255.0 flags [up broadcast running multicast]
route命令用於網路路由
route add default dev eth0
route add default gw 192.168.1.1 dev eth0
第一行表示增加了網卡eth0,第二行表示為這個網路裝置設定網關(gw)。
iftop工具用於統計網路流量,按照網路裝置列出接收資料(Rx)和發送資料(Tx)的情況:
iftop即時資料流量監控工具
Rx Txname MTU bytes packets errs drpd bytes packets errs drpd eth0 1500 0 0 0 0 0 0 0 0
netstat網路狀態的資訊擷取工具
netstat
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN tcp 0 0 10.0.2.15:5555 10.0.2.2:45610 ESTABLISHED
vmstat
vmstat在運行過程中,會定期打出一行的內容,表示系統當前的運行
r:在運行隊列中等待的進程數; b:在等待io的進程數; w:可以進入運行隊列但被替換的進程; free:閒置記憶體(單位k); mapped:影射的記憶體(單位k); in:每秒的中斷數,包括時鐘中斷; cs:每秒的環境(上下文)切換次數; us:CPU使用時間; sy:CPU系統使用時間; id:閑置時間。 VSS(Virtual Set Size):進程使用的虛擬記憶體 RSS(Resident Set Size):進程使用的實體記憶體mstat
procs memory system cpu r b free mapped anon slab in cs flt us ni sy id wa ir 0 0 348688 33004 58068 4264 18 13 0 1 0 0 99 0 0 0 0 348688 33008 58068 4264 27 39 0 1 0 1 99 0 0 0 0 348688 33008 58068 4264 22 21 0 0 0 1 99 0 0 0 0 348688 33008 58068 4264 27 59 0 3 0 4 94 0 0 0 0 348688 33008 58068 4264 19 19 0 0 0 1 99 0 0 2 0 348068 33012 58592 4240 70 138 0 27 0 4 69 0 0 0 0 348068 33012 58592 4240 84 188 0 42 0 8 51 0 0 2 0 345632 33756 60124 4248 119 416 5 36 0 13 51 0 0 0 0 344392 32660 62044 4248 96 396 0 46 0 8 46 0 0 0 0 344020 32664 62392 4248 103 548 0 42 0 6 52 0 0 0 0 344020 33264 62372 4248 45 80 0 2 0 5 93 0 0 0 0 344020 33264 62372 4248 37 87 0 3 0 1 97 0 0 0 0 343896 33264 62372 4248 23 28 0 1 0 1 98 0 0 0 0 343896 33264 62372 4248 24 26 0 1 0 0 99 0 0 0 0 343896 33264 61992 4248 30 41 0 4 0 3 93 0 0
top
top命令表示列出系統最耗資源的進程,主要可以檢測各個進程對CPU的消耗情況,資訊將一屏一屏的階段性地列印到終端上。
top
tcpdump
tcpdump命令是對網路上的資料包進行截獲的工具(抓包工具),可以根據不同的協議、裝置、連接埠等擷取資訊,得到的資料可供進一步的分析。
tcpdump -i any -p -s 0
tcpdump -i any -p -s 0 -w
00:20:52.011779 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88033:88057(24) ack 878157 win 876000:20:52.012146 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878157:878367(210) ack 88057 win 584000:20:52.012421 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88057:88081(24) ack 878367 win 876000:20:52.012840 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878367:878559(192) ack 88081 win 584000:20:52.013365 IP 10.0.2.2.33338 > 10.0.2.15.rplay: . ack 878559 win 876000:20:52.013369 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88081:88105(24) ack 878559 win 876000:20:52.013757 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878559:878863(304) ack 88105 win 584000:20:52.014262 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88105:88129(24) ack 878863 win 876000:20:52.014679 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878863:879149(286) ack 88129 win 584000:20:52.015087 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88129:88153(24) ack 879149 win 876000:20:52.015486 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 879149:879359(210) ack 88153 win 5840
/*
* @author zhoushengtao(周聖韜)
* @since 2015年7月3日 11:04:22
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流學習QQ群:341989536
* @私人QQ:445914891
/