当前位置: 代码迷 >> Android >> Android调试命令小结
  详细解决方案

Android调试命令小结

热度:63   发布时间:2016-04-27 23:43:12.0
Android调试命令总结

转载表明来源:http://blog.csdn.net/yzzst/article/details/47128581

创业要接地气,GOOGLE、亚马逊、微软在中国做的怎么样,完全取决于他们的本地化程度。 ——周鸿祎

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

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


列出输入法:

ime list


选择输入法
ime set


连续命令行脚本

脚本实际上是利用了Android的shell系统运行的,同样可以传入命令行的参数。 通过使用am调用Activity,通过input进行输入事件,可以模拟一个可执行程序的执行过程。 脚本中还可以传递shell中传入的参数。
编写一个自动化脚本:

echo $*am start -a android.intent.action.VIEW -d about://blankecho "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


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
0


setprop 设置属性值

usage: setprop

watchprops检测属性值变化
watchprops用于监测属性的变化,直接运行这个命令,将形成循环,将把系统每一个属性的变化列出。

watchprops

<时间> 属性 = ‘属性值’ ……
<时间> 属性 = ‘属性值’


start和stop命令,用于开始和停止init进程中的service。

start {service_name}
stop {service_name}

解决Android系统的daemon被kill之后重新启动的问题

系统信息查看小工具

Android中还提供了dumpstate、dumpsys、bugreport等几个工具,用于查看系统各个方面的信息。

  1. dumpstate
    工具用于将系统设备的状态导出,通过访问sys文件系统和调用其他工具来完成。

  2. dumpsys
    用于查看应用的状态。
    由于dumpstate和dumpsys两个工具导出的内容都较多,最好在主机端配合adb来使用。

  3. 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
/

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案