41

adb shell 指令手册

 5 years ago
source link: https://www.tuicool.com/articles/Vr6Nz2n
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

adb shell 指令使用手册,涉及到adb debug调试、adb无线连接、adb应用包操作,adb文件操作,adb网络操作、adb日志操作、adb截屏操作、adb系统相关操作。

ZNz632I.jpg!web adb shell 指令手册

一、ADB Debugging – Debug调试

1、adb devices

打印挂载的虚拟机/设备信息

adb devices

输入以上命令回车之后,输出设备序列号和状态 

e4b25377        device
emulator-5554  device

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进程)

二、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

四、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

5、adb shell rm

1)删除文件或文件夹

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

1)创建空文件或者改变文件时间戳,实际测试并不能创建文件,只能起到更新时间戳的作用。

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/

五、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

10)清空所有日志信息并退出

adb logcat -c

11)输出所有日志到窗口并退出

adb logcat -d

12)输出日志信息流到”test.logs“文件

adb logcat -f test.logs

13)打印指定的日志缓存大小信息并退出

adb logcat -g Prints the size of the specified log buffer and exits.

执行结果示例:

/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 Display the date, invocation time, priority/tag, and PID of the process issuing the message.

显示带日期、调用时间、优先级、TAG、进程PID和线程TID的日志信息

adb logcat -v threadtime

显示所有元数据和并隔行打印日志信息

adb logcat -v long

七、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
...

示例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
 ...

5、adb shell getprop

获取设备配置信息和Android配置服务信息

getprop [options]

示例1步骤一:

adb shell

步骤二:

getprop

示例2:

getprop ro.build.version.sdk

示例3:

getprop ro.chipname

示例4:

getprop | grep adb

6、adb shell setprop

服务属性参数设置

setprop <key> <value>

示例步骤一:

adb shell

步骤二:

setprop service.adb.tcp.port 5555

TIPS:

adb shell 命令可以归并几个命令一起顺序执行,使用“&&”符号连接执行的命令:

示例:重命名”test.apk”为”test02.apk”,并且删除”/tmp/”文件夹下所有以”.json”和“.xml”为后缀的文件。

mv /tmp/test01.apk /tmp/test02.apk && rm /tmp/*.json && rm /tmp/*.xml

以上内容根据 http://adbshell.com/commands 做翻译解释,在原文内容基础上进行扩展补充,若有错误请指证。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK