adb即android debug bridge(安卓调试桥),本文内容包括常用adb shell相关命令的使用及说明,涉及到adb debug调试、adb无线连接、adb应用包操作、adb文件操作、adb网络操作、adb日志操作、adb截屏操作、adb系统交互相关操作。
一、ADB Debugging – Debug调试
1、adb devices
打印挂载的虚拟机/设备信息
adb devices
输入以上命令回车之后,输出设备序列号和状态
e4b25377 device
emulator-5554 device
1)连接多台设备的情况下,指定一个设备操作
adb -s <device> shell [option]
示例一:指定emulator-5554设备进行adb shell命令操作
adb -s emulator-5554 shell [option]
示例二:删除emulator-5554设备“sdcard/temp/“目录下所有以“Test“开头的文件
adb -s emulator-5554 shell rm sdcard/temp/Test*
2、adb forward
adb forward <local> <remote>
例:
adb forward tcp:8000 tcp:9000
设置端口8000转发连接到虚拟机/设备9000端口
Notes:设备的USB Debug开关处于打开状态
3、adb kill-server
终止server进程
adb kill-server
Notes: 如果adb服务在运行就杀死(终端adb.exe进程)
4、adb start-server
启动adb服务,配合adb kill-server进行adb进程的重启。
二、Wireless – 无线连接
1、adb connect
在Wi-Fi条件下使用adb
adb connect <host>[:<port>]
步骤一:
通过USB连接设备
步骤二:查看挂载的设备信息
adb devices
Notes: 步骤1和2都是必须的
步骤三:
adb tcpip 5555
用TCP模式重启adb,并设置端口为5555
步骤四:
找到Android设备的IP地址:设置-》关于-》状态-》IP地址,记住用#.#.#.#.格式显示的IP地址
步骤五:
adb connect #.#.#.#:5555
连接到地址 #.#.#.#:5555
步骤六:
拔掉USB线并确认你依然可以连接到设备。
adb devices
Notes: 确保你的主机和设备连接的是同一个WI-FI网络。
2、adb usb
用USB模式重启adb
adb usb
三、Package Manager – 包管理
1、adb install
1)指定绝对路径,把一个Android应用程序安装到一个虚拟机/设备。
adb install [option] <path>
2)基础示例,直接在已连接的虚拟机/设备上安装test应用。
adb install test.apk
3)应用设置FORWARD LOCK标志位安装:
TIPS:标识本应用属于受限应用,应用将会被安装到保护目录,只有该应用可以访问代码段和不属于resource的asset资源。那么安装这样的一个 apk,需要设置 FORWARD LOCK 标志位。
Android 1.5: PackageManager.FORWARD_LOCK_PACKAGE = 0x00000001; Android 2.2: 改成了 INSTALL_FORWARD_LOCK;
adb install -l test.apk
4)重新安装应用,保留已有的应用数据:
adb install -r test.apk
5)测试package标志安装:
如果编译apk的时候使用了debug方式,Android Studio默认会添加testOnly=true的属性,安装APK的时候如果报Failure [INSTALL_FAILED_TEST_ONLY]异常,就可以使用下面的命令安装应用。
或者如果在AndroidManifest.xml中配置了android:testOnly=”true”,直接改为false即可。
adb install -t test.apk
6)将应用安装到SD卡上,而不是内部存储卡:
adb install -s test.apk
7)忽略版本号安装APK,正常情况下新应用的版本号需要大于已安装应用的版本号,否则在重启应用之后会恢复回旧版本:
adb install -d test.apk
8)部分安装应用标志,实际测试并不支持此操作,已废弃:
adb install -p test.apk
2、adb uninstall
1)从虚拟机/设备上移除应用
adb uninstall [options] <PACKAGE>
指定包名参数卸载应用示例:
adb uninstall com.test.app
2)在保留应用数据和缓存文件夹的前提下移除应用。
adb uninstall -k com.test.app
3、adb shell pm list packages
1)打印所有包名,如果不带<FILTER>包名参数,默认对设备上存在的所有应用生效。
adb shell pm list packages [options] <FILTER>
2)打印虚拟机/设备上所有的包名参数
adb shell pm list packages
执行结果示例:
package:com.android.soundrecorder package:com.android.defcontainer package:com.android.contacts package:com.android.phone package:com.google.android.partnersetup package:com.android.proxyhandler package:com.google.android.gsf.login package:com.android.providers.calendar package:com.android.inputdevices package:com.android.browser package:com.google.android.feedback ...
3)关联APK文件打印所有包名信息
adb shell pm list packages -f
执行结果示例:
package:/system/app/SoundRecorder.apk=com.android.soundrecorder package:/system/priv-app/DefaultContainerService.apk=com.android.defcontainer package:/system/priv-app/Contacts.apk=com.android.contacts package:/system/priv-app/TeleService.apk=com.android.phone package:/system/priv-app/GooglePartnerSetup.apk=com.google.android.partnersetup package:/system/priv-app/ProxyHandler.apk=com.android.proxyhandler package:/system/priv-app/GoogleLoginService.apk=com.google.android.gsf.login package:/system/priv-app/CalendarProvider.apk=com.android.providers.calendar package:/system/priv-app/InputDevices.apk=com.android.inputdevices package:/system/app/Browser.apk=com.android.browser package:/system/priv-app/GoogleFeedback.apk=com.google.android.feedback ...
4)打印被标记为disabled的包名信息
adb shell pm list packages -d
5)打印被标记为enabled的包名信息
adb shell pm list packages -e
6)只过滤打印系统应用包名信息
adb shell pm list packages -s
7)只过滤打印第三方应用包名信息
adb shell pm list packages -3
8)打印带应用安装者信息的包名信息
adb shell pm list packages -i
执行结果示例:
package:com.android.soundrecorder installer=null package:com.android.defcontainer installer=null package:com.android.contacts installer=null package:com.android.phone installer=null package:com.google.android.partnersetup installer=null package:com.android.proxyhandler installer=null package:com.google.android.gsf.login installer=null package:com.android.providers.calendar installer=null ...
9) 打印包括已卸载应用的包名信息
adb shell pm list packages -u
10)根据用户id查询用户空间的所有包,USER_ID代表当前连接设备的顺序,从0开始:
adb shell pm list packages --user <USER_ID>
假设当前连接了一台虚拟机/设备,示例:
adb shell pm list packages --user 0
执行结果示例:
package:com.android.soundrecorder package:com.android.defcontainer package:com.android.contacts package:com.android.phone package:com.google.android.partnersetup package:com.android.proxyhandler package:com.google.android.gsf.login package:com.android.providers.calendar ...
4、adb shell pm path
打印对应包名的APK应用路径
adb shell pm path <PACKAGE>
示例:
adb shell pm path com.android.phone
执行结果示例:
package:/system/priv-app/TeleService.apk
5、adb shell pm clear
清除对应包名应用的所有数据(应用文件数据和缓存)
adb shell pm clear <PACKAGE>
示例:
adb shell pm clear com.test.abc
6、adb shell am start
通过主界面入口调起应用
adb shell am start <package/package.MainActivity>
示例,调起包名为com.android.test,入口为MainActivity的应用:
adb shell am start com.android.test/com.android.test.MainActivity
7、adb shell am force-stop
通过包名参数强停应用
adb shell am force-stop <package>
示例,强停包名为com.android.test的应用:
adb shell am force-stop com.android.test
8、adb shell am broadcast
使用adb发送广播操作,后面可以带Action,DATA URI和键值对参数:
adb shell am broadcast [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] ...] [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] [-n <COMPONENT>] [-f <FLAGS>] [<URI>]
示例一,发送Action参数为“CUSTOM_BROADCAST“,KEY_TYPE字段值为“10021“的广播:
adb shell am broadcast -a CUSTOM_BROADCAST --ei KEY_TYPE 10021
示例二,模拟开机广播发送
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
9、adb shell am dumpheap
用adb命令抓取Hprof文件,一般用于分析内存问题时使用,dump的文件路径一般配置在‘/data/local/tmp/‘目录下,配置SD卡路径可能会出现写权限问题。
adb shell am dumpheap <package> <filePath.prof>
示例:
adb shell am dumpheap com.android.test /data/local/tmp/DumpMemory.prof
四、File Manager – 文件管理
1、adb pull
从虚拟机/设备下载指定的文件到你的电脑
adb pull <remote> [local]
下载文件”/sdcard/demo.mp4” 到<android-sdk-path>/platform-tools目录示例:
adb pull /sdcard/demo.mp4
下载文件“/sdcard/demo.mp4”到电脑E盘示例:
adb pull /sdcard/demo.mp4 e:\
2、adb push
指定一个文件从电脑上传到虚拟机或设备。
adb push <local> <remote>
拷贝路径在 <android-sdk-path>/platform-tools/目录下的“test.apk“文件到虚拟机/设备”/sdcard”目录示例:
adb push test.apk /sdcard
拷贝电脑D盘上的“test.apk”文件到虚拟机/设备”/sdcard”目录示例:
adb push d:\test.apk /sdcard
3、adb shell ls
1)打印文件目录下的文件内容
ls [options] <directory>
步骤一,先执行以下命令进入shell操作环境:
adb shell
步骤二,执行以下指令:
ls
2)不隐藏起始入口,实际执行结果和ls无差别
ls -a
3)打印的文件/文件夹带索引参数
ls -i
执行结果示例:
1217 acct 2 cache 1220 config 1215 d 2 data 16 default.prop 1025 dev 1214 etc
4) 以区块的形式打印文件/文件大小
ls -s
执行结果示例:
total 540 0 acct 4 cache 0 config 0 d 4 data 4 default.prop 0 dev 0 etc
5)打印文件/文件夹UIDs和GIDs参数
ls -n
执行结果示例:
drwxr-xr-x 0 0 2019-07-03 23:23 acct drwxrwx--- 1000 2001 2019-07-03 23:24 cache dr-x------ 0 0 2019-07-03 23:23 config lrwxrwxrwx 0 0 2019-07-03 23:23 d -> /sys/kernel/debug drwxrwx--x 1000 1000 2018-12-27 16:33 data -rw-r--r-- 0 0 116 1970-01-01 08:00 default.prop drwxr-xr-x 0 0 2019-07-03 23:23 dev lrwxrwxrwx 0 0 2019-07-03 23:23 etc -> /system/etc
6)递归打印所有文件信息,使用Ctrl-C终止命令。
ls -R
4、adb shell cd
切换文件夹目录
cd <directory>
步骤一:
adb shell
步骤二:
cd /system
1)回到上一级目录
cd ..
2)回到根目录
cd /
5、adb shell rm
rm [options] <files or directory>
步骤一:
adb shell
步骤二:
rm /sdcard/test.txt
2)不做提示强制删除“/sdcard/test.txt“
rm -f /sdcard/test.txt
3)递归删除“/sdcard/tmp“目录下的所有文件
rm -r /sdcard/tmp
4)删除“/sdcard/tmp“文件夹,即使是非空的目录
rm -d /sdcard/tmp
Notes: rm -d 和命令 rmdir 等价
5)删除/tmp/文件夹下以.json结尾的文件,同理可以扩展到其他后缀名文件的删除
rm /tmp/*.json
6)在删除“/sdcard/test.txt“文件之前做提示,实际测试不支持此命令,已废弃。
rm -i /sdcard/test.txt
6、adb shell mkdir
1)创建文件夹
mkdir [options] <directory name>
2)创建“/sdcard/tmp“文件目录
mkdir /sdcard/tmp
3)创建”/sdcard/tmp“文件目录并设置777权限
mkdir -m 777 /sdcard/tmp
Notes: 777 权限说明 在linux系统中,文件或目录的权限可以分为3种: r:4 读 ; w:2 写;x:1 执行 示例1: 最高权限777:(4+2+1) (4+2+1) (4+2+1) 第一个7:表示当前文件的拥有者的权限,7=4+2+1 可读可写可执行权限 第二个7:表示当前文件的所属组(同组用户)权限,7=4+2+1 可读可写可执行权限 第三个7:表示当前文件的组外权限,7=4+2+1 可读可写可执行权限 示例2: 755:(4+2+1) (4+1) (4+1) 第一个7:表示当前文件的拥有者的权限,7=4+2+1 可读可写可执行权限 第二个5:表示当前文件的所属组(同组用户)权限,5=4+1 可读可执行权限 第三个5:表示当前文件的组外权限,5=4+1 可读可执行权限
4)如果没有父文件夹就创建需要的父文件夹。
mkdir -p /sdcard/tmp/sub1/sub2
7、adb shell touch
touch [options] <file>
步骤一:
adb shell
步骤二:
touch /sdcard/tmp/test.txt
查看命令执行结果,是否创建了“test.txt“文件
ls /sdcard/tmp
8、adb shell pwd
打印当前所处的工作目录
pwd
9、adb shell cp
拷贝文件或目录
cp [options] <source> <dest>
示例:
步骤一:
adb shell
步骤二,拷贝“test.txt“文件到”demo.txt”,如果没有“demo.txt“文件会自动创建:
cp /sdcard/test.txt /sdcard/demo.txt
10、adb shell mv
移动或者重命名文件
mv [options] <source> <dest>
步骤一:
adb shell
步骤二:
移动“/sdcard/tmp“下的文件到“/system/tmp“文件:
mv /sdcard/tmp /system/tmp
重命名“tmp“目录为”test”目录:
mv /sdcard/tmp /sdcard/test
11、adb shell unzip
解压文件
unzip <zip file>
示例:解压test.zip包文件到“/tmp/“文件夹下
unzip <path> -d <directory>
步骤一:
adb shell
步骤二:
unzip /sdcard/test.zip -d /sdcard/tmp/
12、adb shell cat
1)直接在控制台查看文件内容
cat <file>
2)在不解压文件情况下,直接在控制台查看压缩文件内容
zcat <file>
示例:查看error.log-20190713.gz压缩文件里面的错误日志信息
zcat /home/www/logs/error.log-20190713.gz
五、Network – 网络
1、adb shell netstat
netstat
示例步骤一:
adb shell
步骤二:
netstat
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:18016 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:24800 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22468 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6703 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5554 0.0.0.0:* LISTEN
2、adb shell ping
ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface] [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline] [-W timeout] [hop1 ...] destination
示例步骤一:
adb shell
步骤二:
ping www.google.com
Notes: 使用 Ctrl-C 终止命令执行
3、adb shell netcfg
netcfg [<interface> {dhcp|up|down}]
示例步骤一:
adb shell
步骤二:
netcfg
teql0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00
wlan0 UP 172.17.99.15/24 0x00001043 08:00:27:9d:36:6e
eth1 UP 172.17.100.15/24 0x00001043 08:00:27:94:5f:b2
sit0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00
lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00
ip6tnl0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00
4、adb shell ip
显示,操作路由,设备,策略路由和通道。
ip [ OPTIONS ] OBJECT OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |netns | l2tp } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | link } |-l[oops] { maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -b[atch] [filename] |-rc[vbuf] [size]}
显示WI-FI IP地址信息示例步骤一:
adb shell
步骤二:
ip -f inet addr show wlan0
六、Logcat – 日志
1、adb logcat
在屏幕打印日志信息
adb logcat [option] [filter-specs]
1)直接在窗口打印日志信息
adb logcat
Notes: 使用 Ctrl-C 终止
2)打印最低优先级的日志,只过滤显示verbose级别的日志
adb logcat *:V
3)过滤打印Debug级别的日志
adb logcat *:D
4)过滤打印info级别的日志
adb logcat *:I
5)过滤打印Warning级别日志
adb logcat *:W
6)过滤打印Error级别日志
adb logcat *:E
7)过滤打印Fatal级别日志
adb logcat *:F
8)过滤打印最高优先级日志
adb logcat *:S
执行结果示例:
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
9)Buffer相关日志打印:
adb logcat -b <Buffer>
查看缓存中包含音频或电话相关的日志信息
adb logcat -b radio
查看缓存中包含事件相关的日志信息
adb logcat -b event
查看缓存日志信息默认命令
adb logcat -b main
adb logcat -c
11)输出所有日志到窗口并退出
adb logcat -d
12)输出日志信息流到”test.logs“文件
adb logcat -f test.logs
13)打印指定的日志缓存大小信息并退出
adb logcat -g
执行结果示例:
/dev/log/main: ring buffer is 256Kb (14Kb consumed), max entry is 5120b, max payload is 4076b /dev/log/system: ring buffer is 256Kb (0Kb consumed), max entry is 5120b, max payload is 4076b
14)设置循环打印的日志数目最大值,默认值为4。
adb logcat -n <count>
15)设置日志循环打印输出的大小,默认值16。
adb logcat -r <kbytes>
16)设置默认的日志输出规则为静默级别。
adb logcat -s
17)adb logcat -v 规范输出
adb logcat -v <format>
带日志级别/TAG信息和进程PID信息,默认的格式化命令。
adb logcat -v brief
只带PID信息的日志
adb logcat -v process
只带优先级/TAG信息的日志
adb logcat -v tag
显示原始的日志信息,不带其他元数据
adb logcat -v raw
显示带日期、调用时间、优先级/TAG和进程PID的日志信息
adb logcat -v time
显示带日期、调用时间、优先级、TAG、进程PID和线程TID的日志信息
adb logcat -v threadtime
显示所有元数据和并隔行打印日志信息
adb logcat -v long
2、adb shell dumpsys
打印系统数据
adb shell dumpsys [options]
1)打印系统所有内存相关信息
adb shell dumpsys meminfo
2)打印指定包名应用的内存信息
adb shell dumpsys meminfo <package>
3)打印电量相关信息
adb shell dumpsys battery
执行结果示例:
Current Battery Service state: AC powered: false USB powered: true Wireless powered: false Max charging current: 0 Max charging voltage: 0 Charge counter: 0 status: 2 health: 2 present: true level: 49 scale: 100 voltage: 3920 temperature: 320 technology: Li-poly
4)收集设备电量数据信息
adb shell dumpsys batterystats
5)重置设备电量数据信息
adb shell dumpsys batterystats --reset
6)打印系统Activity相关信息
adb shell dumpsys activity
输出的信息包括以下八个部分:
ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents) ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts) ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers) ACTIVITY MANAGER URI PERMISSIONS (dumpsys activity permissions) ACTIVITY MANAGER SERVICES (dumpsys activity services) ACTIVITY MANAGER RECENT TASKS (dumpsys activity recents) ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
7)检测应用UI渲染情况
adb shell dumpsys gfxinfo <package>
七、Screenshot – 截屏
1、adb shell screencap
获取一个设备屏幕的截屏
adb shell screencap <filename>
示例步骤一:截屏并保存到“/sdcard/screen.png“路径:
adb shell screencap /sdcard/screen.png
步骤二:把截屏图片下载到电脑端:
adb pull /sdcard/screen.png
2、adb shell screenrecord
基于Android 4.4 (API level 19) 或更高版本的设备上的录屏操作指令
adb shell screenrecord [options] <filename>
示例步骤一:录屏并保存到”/sdcard/demo.mp4“文件,使用Ctrl-C终止录屏
adb shell screenrecord /sdcard/demo.mp4
步骤二:从设备下载录屏文件到电脑
adb pull /sdcard/demo.mp4
Notes: 使用Ctrl-C来终止录屏,否则录屏会在3分钟后自动停止,或者在设置的录屏时间之后终止。
1)设置录制的视频分辨率1280×720,默认值是设备原生显示分辨率(如果支持),不支持就是1280×720。最好使用设备支持的高级视频编码(AVC)分辨率大小。
adb shell screenrecord --size <WIDTHxHEIGHT>
2)设置录制视频的码率,单位Mbps/s,默认值是4Mbps,你可以增加码率来达到更好的视频效果,但同时也会加大生成视频文件的大小。
adb shell screenrecord --bit-rate <RATE>
示例:设置5Mbps的码率录屏
adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4
3)设置最大录屏时间,单位秒,默认最大值是180秒 (3 分钟).
adb shell screenrecord --time-limit <TIME>
4)90度旋转输出的视频,此功能处于实验阶段。
adb shell screenrecord --rotate
5)在命令执行窗口中输出日志信息,没有使用这个命令的话在录屏的时候不会输出任何提示信息。
adb shell screenrecord --verbose
八、System – 系统
1、adb root
使用root权限重启adb守护进程
adb root
Notes: 在虚拟机上测试,处于production builds模式下adbd无法使用root权限运行。
2、adb sideroad
写入/恢复Android“update.zip“包
adb sideload <update.zip>
Notes: adb reboot sideload [Android M+]
3、adb shell ps
打印进程状态信息
ps [options]
示例1步骤一:
adb shell
步骤二:
ps
执行结果示例:
USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 776 496 00000000 0805c716 S /init root 50 1 724 260 00000000 0805c716 S /sbin/ueventd media_rw 72 1 4092 468 ffffffff b7718116 S /system/bin/sdcard shell 73 1 1624 632 00000000 b7689116 S /system/bin/sh root 77 1 4772 248 ffffffff 0806c460 S /sbin/adbd root 149 1 1620 260 00000000 0805f50b S /sbin/healthd ...
若Android版本是8.0及以上,需要加-A参数才可以正常输出各个进程的信息:
ps -A
示例2:
ps -p
执行结果示例:
USER PID PPID VSIZE RSS PRIO NICE RTPRI SCHED WCHAN PC NAME root 1 0 776 496 20 0 0 0 00000000 0805c716 S /init root 50 1 724 260 20 0 0 0 00000000 0805c716 S /sbin/ueventd media_rw 72 1 5604 2036 20 0 0 0 ffffffff b7718116 S /system/bin/sdcard shell 73 1 1624 632 20 0 0 0 00000000 b7689116 S /system/bin/sh root 77 1 4772 248 20 0 0 0 ffffffff 0806c460 S /sbin/adbd root 149 1 1620 260 20 0 0 0 00000000 0805f50b S /sbin/healthd ...
4、adb shell top
1)从高到低显示CPU占用进程信息,使用Ctrl-C终止监控打印。
top [options]
示例步骤一:
adb shell
步骤二:
top
执行结果示例:
User 0%, System 2%, IOW 0%, IRQ 0% User 3 + Nice 0 + Sys 17 + Idle 577 + IOW 0 + IRQ 0 + SIRQ 0 = 597 PID PR CPU% S #THR VSS RSS PCY UID Name 514 0 1% S 61 985852K 60528K fg system system_server 2383 0 0% S 67 1438084K 89624K bg u0_a42 com.xingin.xhs 725 1 0% S 56 1409024K 99504K fg system com.vphone.launcher 1814 1 0% S 33 964544K 55496K bg u0_a17 com.bignox.app.store.hd 2248 0 0% S 27 956460K 55000K bg u0_a34 com.estrongs.android.pop 149 1 0% S 1 1620K 260K fg root /sbin/healthd 150 1 0% S 1 1540K 212K fg system /system/bin/servicemanager ...
2)显示占用较高的线程信息
top -t
执行结果示例:
User 0%, System 2%, IOW 0%, IRQ 0% User 4 + Nice 0 + Sys 14 + Idle 581 + IOW 0 + IRQ 0 + SIRQ 0 = 599 PID TID PR CPU% S VSS RSS PCY UID Thread Proc 514 730 1 0% S 985852K 60364K fg system Binder_5 system_server 725 908 0 0% S 1409024K 99504K fg system vphone.launcher com.vphone.launcher 1814 1827 0 0% S 964544K 55496K bg u0_a17 ox.app.store.hd com.bignox.app.store.hd 514 1039 1 0% S 985852K 60364K fg system Binder_8 system_server 514 632 1 0% S 985852K 60364K fg system Binder_3 system_server 514 1312 1 0% S 985852K 60364K fg system Binder_A system_server 2932 2932 0 0% R 2252K 788K fg root top top 2248 2347 0 0% S 956460K 54948K bg u0_a34 CatalogerThread com.estrongs.android.pop 2383 2383 0 0% S 1438084K 89400K bg u0_a42 com.xingin.xhs com.xingin.xhs ...
输出结果参数说明:
CPU占用率:
User 用户进程
System 系统进程
IOW IO等待时间
IRQ 硬中断时间
CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):
User 处于用户态的运行时间,不包含优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的运行时间
Idle 除IO等待时间以外的其它等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间
进程属性:
PID 进程在系统中的ID
CPU% 当前瞬时所以使用CPU占用率
S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
UID 运行当前进程的用户id
Name 程序名称android.process.media
示例一:检测电话的CPU占用情况
adb shell top|grep com.android.phone
5、adb shell getprop
获取设备配置信息和Android配置服务信息
getprop [options]
示例1步骤一:
adb shell
步骤二:
getprop
1)获取Android SDK版本
getprop ro.build.version.sdk
2)获取芯片名
getprop ro.chipname
3)获取adb 配置信息
getprop | grep adb
4)获取应用堆配置参数
getprop | grep heap
执行结果示例:
[dalvik.vm.heapgrowthlimit]: [384m] [dalvik.vm.heapmaxfree]: [8m] [dalvik.vm.heapminfree]: [512k] [dalvik.vm.heapsize]: [512m] [dalvik.vm.heapstartsize]: [8m] [dalvik.vm.heaptargetutilization]: [0.75]
6、adb shell setprop
服务属性参数设置
setprop <key> <value>
示例步骤一:
adb shell
步骤二:
setprop service.adb.tcp.port 5555
7、adb shell wm size
查看屏幕分辨率
示例输出:
Physical size: 1920x1080
8、adb shell input keyevent
使用adb触发系统按键事件,adb shell input keyevent <keyCode> 或 adb shell input keyevent <keyEvent>。
例如:触发系统返回按键,使用 adb shell input keyevent 4 或 adb shell input keyevent KEYCODE_BACK 两种方式都可以。
Android系统按键 keyCode 和对应的 keyEvent 参数列表如下:
0 --> "KEYCODE_UNKNOWN" 1 --> "KEYCODE_MENU" 2 --> "KEYCODE_SOFT_RIGHT" 3 --> "KEYCODE_HOME" 4 --> "KEYCODE_BACK" 5 --> "KEYCODE_CALL" 6 --> "KEYCODE_ENDCALL" 7 --> "KEYCODE_0" 8 --> "KEYCODE_1" 9 --> "KEYCODE_2" 10 --> "KEYCODE_3" 11 --> "KEYCODE_4" 12 --> "KEYCODE_5" 13 --> "KEYCODE_6" 14 --> "KEYCODE_7" 15 --> "KEYCODE_8" 16 --> "KEYCODE_9" 17 --> "KEYCODE_STAR" 18 --> "KEYCODE_POUND" 19 --> "KEYCODE_DPAD_UP" 20 --> "KEYCODE_DPAD_DOWN" 21 --> "KEYCODE_DPAD_LEFT" 22 --> "KEYCODE_DPAD_RIGHT" 23 --> "KEYCODE_DPAD_CENTER" 24 --> "KEYCODE_VOLUME_UP" 25 --> "KEYCODE_VOLUME_DOWN" 26 --> "KEYCODE_POWER" 27 --> "KEYCODE_CAMERA" 28 --> "KEYCODE_CLEAR" 29 --> "KEYCODE_A" 30 --> "KEYCODE_B" 31 --> "KEYCODE_C" 32 --> "KEYCODE_D" 33 --> "KEYCODE_E" 34 --> "KEYCODE_F" 35 --> "KEYCODE_G" 36 --> "KEYCODE_H" 37 --> "KEYCODE_I" 38 --> "KEYCODE_J" 39 --> "KEYCODE_K" 40 --> "KEYCODE_L" 41 --> "KEYCODE_M" 42 --> "KEYCODE_N" 43 --> "KEYCODE_O" 44 --> "KEYCODE_P" 45 --> "KEYCODE_Q" 46 --> "KEYCODE_R" 47 --> "KEYCODE_S" 48 --> "KEYCODE_T" 49 --> "KEYCODE_U" 50 --> "KEYCODE_V" 51 --> "KEYCODE_W" 52 --> "KEYCODE_X" 53 --> "KEYCODE_Y" 54 --> "KEYCODE_Z" 55 --> "KEYCODE_COMMA" 56 --> "KEYCODE_PERIOD" 57 --> "KEYCODE_ALT_LEFT" 58 --> "KEYCODE_ALT_RIGHT" 59 --> "KEYCODE_SHIFT_LEFT" 60 --> "KEYCODE_SHIFT_RIGHT" 61 --> "KEYCODE_TAB" 62 --> "KEYCODE_SPACE" 63 --> "KEYCODE_SYM" 64 --> "KEYCODE_EXPLORER" 65 --> "KEYCODE_ENVELOPE" 66 --> "KEYCODE_ENTER" 67 --> "KEYCODE_DEL" 68 --> "KEYCODE_GRAVE" 69 --> "KEYCODE_MINUS" 70 --> "KEYCODE_EQUALS" 71 --> "KEYCODE_LEFT_BRACKET" 72 --> "KEYCODE_RIGHT_BRACKET" 73 --> "KEYCODE_BACKSLASH" 74 --> "KEYCODE_SEMICOLON" 75 --> "KEYCODE_APOSTROPHE" 76 --> "KEYCODE_SLASH" 77 --> "KEYCODE_AT" 78 --> "KEYCODE_NUM" 79 --> "KEYCODE_HEADSETHOOK" 80 --> "KEYCODE_FOCUS" 81 --> "KEYCODE_PLUS" 82 --> "KEYCODE_MENU" 83 --> "KEYCODE_NOTIFICATION" 84 --> "KEYCODE_SEARCH" 85 --> "TAG_LAST_KEYCODE"
TIPS:
adb shell 命令可以归并几个命令一起顺序执行,使用“&&”符号连接执行的命令:
示例:重命名”test.apk”为”test02.apk”,并且删除”/tmp/”文件夹下所有以”.json”和“.xml”为后缀的文件。
mv /tmp/test01.apk /tmp/test02.apk && rm /tmp/*.json && rm /tmp/*.xml
转载请注明出处:陈文管的博客 – adb shell 指令手册
扫码或搜索:文呓
微信公众号 扫一扫关注