Android調試命令總結

來源:互聯網
上載者:User

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
/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.