Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android調試命令總結

Android調試命令總結

編輯:關於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:
title=


顯式啟動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

title=

另一個文件: /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

title=


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

usage: ime list [-a] [-s]
ime enable ID
ime disable ID
ime set ID


列出輸入法:

ime list
title=


選擇輸入法
ime set
title=


連續命令行腳本

腳本實際上是利用了Android的shell系統運行的,同樣可以傳入命令行的參數。 通過使用am調用Activity,通過input進行輸入事件,可以模擬一個可執行程序的執行過程。 腳本中還可以傳遞shell中傳入的參數。
編寫一個自動化腳本:

echo $*
am start -a android.intent.action.VIEW -d about://blank
echo Enter Browser
input keyevent 82 
echo Browser Menu
input 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

title=


ndc和vdc

vdc volume list
title=

ndc interface list
title=


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
title=

iphonesubinfo等就是ServiceManager管理的服務名稱。
直接利用Binder方式調用。


屬性服務

Android具有prop屬性系統,使用getprop和setprop可以獲得屬性和設置屬性。


getprop查看屬性值
title=

getprop ro.secure
0


setprZ喎?/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
title=

title=

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
title=

USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1     0     268    180   c009b74c 0000875c S /init
root      2     0     0      0     c004e72c 00000000 S kthreadd
各個內核線程
root      3     2     0      0     c003fdc8 00000000 S ksoftirqd/0
root      4     2     0      0     c004b2c4 00000000 S events/0
……省略,其他各個內核線程
各個由init的啟動守護進程
root      27    1     248    152   c009b74c 0000875c S /sbin/ueventd
root      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                                    # 線程組ID
Pid:    34                                    # 進程ID
PPid:   1                                     # 父進程ID
TracerPid:      0
Uid:    1013    1013    1013    1013
Gid:    1000    1000    1000    1000
FDSize: 32
Groups: 1003 1005 1006 3001 3002 3003 3004

Threads:        8                             # 所包含的線程數

環境變量

printenv命令用於查看系統中的各個環境變量

printenv
title=


文件系統

moun命令用於查看系統的掛接的文件系統分區。

mount

rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0
none /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                              Tx
name     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 8760
00:20:52.012146 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878157:878367(210) ack 88057 win 5840
00:20:52.012421 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88057:88081(24) ack 878367 win 8760
00:20:52.012840 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878367:878559(192) ack 88081 win 5840
00:20:52.013365 IP 10.0.2.2.33338 > 10.0.2.15.rplay: . ack 878559 win 8760
00:20:52.013369 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88081:88105(24) ack 878559 win 8760
00:20:52.013757 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878559:878863(304) ack 88105 win 5840
00:20:52.014262 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88105:88129(24) ack 878863 win 8760
00:20:52.014679 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878863:879149(286) ack 88129 win 5840
00:20:52.015087 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88129:88153(24) ack 879149 win 8760
00: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
/
title=

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved