Android 工具命令——adb学习

https://rainmonth.github.io/posts/A191020.html

摘要

adb,指的是Android Debug Bridge,即Android调试桥,顾名思义,和Android调试有莫大的关系。可以在命令通过输入命令来查看Android系统支持的服务的各种运行状态。

环境配置

  • 首先要已经搭建好Android开发环境(具体请自行百度)

  • 其次,为了避免频繁调用cd(切换目录命令,建议配置好环境变量,Mac下具体配置如下)

    1
    export PATH=${PATH}:/Users/RandyZhang/Library/Android/sdk/platform-tools

全局配置选项

  • -a,使用该选项将监听所有的网络接口,而不仅仅是localhost;

  • -d,使用USB设备(即真机设备,当连有多个设备时将报错,因为不知道到底该用哪个)

  • -e,使用TCP/IP设备(即模拟器设备,同上多个设备将报错)

  • -s SERIAL,使用使用给定的序列号设备(序列号唯一,多个设备不会报错,会覆盖$ANDROID_SERIAL环境变量),使用如下:

    1
    adb -s SERIAL command
  • -p PRODUCT,指定输出apk的名字或输出路径(会覆盖$ANDROID_PRODUCT_OUT环境变量),使用如下:

    1
    adb -p name(or path) command

    注意:这里是小写的p

  • -H,adb server的名称,默认localhost;

  • -P,adb server的端口号,默认5037;

  • -L SOCKET,在指定的socket上监听adb server,默认tcp:=localhost:5037;

常用命令

  • devices[-l], 列出已连接的设备(-l时输出详细结果);

  • help,查看帮助,如:

    1
    2
    3
    4
    #查看所有帮助
    adb help
    #查看commond命令的帮助
    adb help command
  • version,查看adb 版本号;

  • 文件传输

    • push,将SOURCE_DIR推送到DIS_DIR,使用方式:adb push SOURCE_DIR DIS_DIR

    • pull,将REMOTE_DIR拉到LOCAL_DIR,使用方式:adb pull REMOTE_DIR LOCAL_DIR

  • shell,通过输入adb shell,可以进入目标机器的shell命令行环境,改命令会单独介绍;

  • 安装与卸载

    • install
    • uninstall

shell命令

通用使用方法:adb [-d|-e|-s serial_number] shell shell_command

  • adb shell am,am(activity manager)
  • adb shell pm,pm(package manager)
  • adb shell pm list permissions 列出权限组

am

am,其实就是ActivityManagerService的命令行表现形式而已,也就是说,通过AMS的几乎所有功能都可以使用am来实现。am支持很多子命令,可以在shell环境下输入am查看帮助说明,现列出几个重要的命令。

pm

dumpsys

Android系统源码com.android.server包下面定义了一系列的服务,如果对应的Java代码里面有dump方法,就支持使用dumpsys来打印信息

连接Android设备,输入adb shell,进入到手机的shell交互界面

  • dumpsys --help, 查看dumpsys的帮助信息
1
2
3
4
5
6
7
8
9
usage: dumpsys
To dump all services.
or:
dumpsys [-t TIMEOUT] [--help | -l | --skip SERVICES | SERVICE [ARGS]]
--help: shows this help
-l: only list services, do not dump them
-t TIMEOUT: TIMEOUT to use in seconds instead of default 10 seconds
--skip SERVICES: dumps all services but SERVICES (comma-separated list)
SERVICE [ARGS]: dumps only service SERVICE, optionally passing ARGS to it
  • dumpsys -l,列出那些服务支持dump,但不进行dump
  • dumpsys --skip SERVICES,dump 除了指定SERVICES外的其他服务的信息
  • dumpsys SERVICES [ARGS],dump 指定SERVICES的信息,[ARGS]为SERVICES支持的参数

先看看支持dump哪些服务,输入dumpsys -l,会输出当前运行的服务,常用的几个如下:

  • activity,
  • window
  • batterystats
  • package
  • appwidget
  • meminfo
  • gfxinfo
    下面对上面常用的一些命令做说明

activity

对应于ActivityManagerService.java

window

对应于WindowManagerService.java

batterystats

对应于BatteryStatsService.java

package

对应于PackageManagerService.java

memoinfo

dumpsys meminfo + 包名,查看特定的进程的内存信息

查看对应包名内存信息,如输入adb shell dumpsys memoinfo com.hhdd.kadahd,会得到如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Applications Memory Usage (kB):
Uptime: 96605508 Realtime: 171616432

** MEMINFO in pid 24404 [com.hhdd.kadahd] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 20 20 0 0 12080 8058 2797
Dalvik Heap 7031 6920 0 4 13452 7278 6174
Dalvik Other 5713 5636 12 380
Stack 360 360 0 12
Ashmem 1996 1996 0 0
Other dev 32413 4080 28268 0
.so mmap 2699 888 1240 2052
.apk mmap 377 0 140 0
.ttf mmap 189 0 68 0
.dex mmap 10819 724 9052 12
Other mmap 34 4 12 0
Unknown 8451 8440 0 28
TOTAL 70102 29068 38792 2488 25532 15336 8971

Objects
Views: 301 ViewRootImpl: 1
AppContexts: 3 Activities: 1
Assets: 2 AssetManagers: 2
Local Binders: 16 Proxy Binders: 22
Death Recipients: 1
OpenSSL Sockets: 3

SQL
MEMORY_USED: 399
PAGECACHE_OVERFLOW: 127 MALLOC_SIZE: 62

DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 84 125 234/171/14 /data/data/com.hhdd.kadahd/databases/kada_60008834
4 20 17 0/24/1 /data/data/com.hhdd.kadahd/databases/security
4 52 117 59/39/16 /data/data/com.hhdd.kadahd/databases/bugly_db_

各项指标的含义:

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

gfxinfo

dumpsys是一款运行在设备上的Android工具,将 gfxinfo命令传递给dumpsys可在logcat中提供输出,其中包含各阶段发生的动画以及帧相关的性能信息。

比如运行

adb shell dumpsys gfxinfo com.hhdd.kada,会输出如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
adb shell dumpsys gfxinfo com.hhdd.kada
Applications Graphics Acceleration Info:
Uptime: 281418709 Realtime: 1154925861

** Graphics info for pid 23406 [com.hhdd.kada] **

Stats since: 261201402950201ns
Total frames rendered: 200653 # 共收集了200653帧
Janky frames: 171683 (85.56%) # 耗时超过16ms的帧为171683,卡顿率为85.63%
90th percentile: 97ms # 90%的在97ms绘制完成
95th percentile: 105ms # 95%的在105ms绘制完成
99th percentile: 113ms # 99%的在113ms绘制完成
Number Missed Vsync: 76237 # 垂直同步失败的帧有76237
Number High input latency: 1037 # 处理input时间超时的帧1037
Number Slow UI thread: 121801 # 因UI线程导致超时的帧121801
Number Slow bitmap uploads: 479 # 因bitmap加载超时的帧479
Number Slow issue draw commands: 156855 #因绘制命令超时的帧156855

Caches:
Current memory usage / total memory usage (bytes):
TextureCache 7826168 / 75497472
LayerCache 589824 / 50331648 (numLayers = 1)
Layer size 384x384; isTextureLayer()=0; texid=32 fbo=0; refs=1
Layers total 589824 (numLayers = 1)
RenderBufferCache 0 / 8388608
GradientCache 0 / 1048576
PathCache 1936512 / 33554432
TessellationCache 12000 / 1048576
TextDropShadowCache 0 / 6291456
PatchCache 576 / 131072
FontRenderer 0 A8 1048576 / 1048576
FontRenderer 0 RGBA 0 / 0
FontRenderer 0 total 1048576 / 1048576
Other:
FboCache 0 / 0
Total memory usage:
11413656 bytes, 10.88 MB

Profile data in ms:

com.hhdd.kada/com.hhdd.kada.main.ui.activity.MainActivity/android.view.ViewRootImpl@934192b (visibility=0)
Draw Prepare Process Execute
38.87 0.85 32.90 1.29
32.53 0.85 33.40 1.39
42.86 0.87 32.51 1.37
34.05 0.79 33.39 1.49
29.17 0.91 32.37 1.48
20.68 0.81 33.87 1.64
...

Stats since: 261201402950201ns
Total frames rendered: 200654
Janky frames: 171684 (85.56%)
90th percentile: 97ms
95th percentile: 105ms
99th percentile: 113ms
Number Missed Vsync: 76238
Number High input latency: 1037
Number Slow UI thread: 121801
Number Slow bitmap uploads: 479
Number Slow issue draw commands: 156856

View hierarchy:

com.hhdd.kada/com.hhdd.kada.main.ui.activity.MainActivity/android.view.ViewRootImpl@934192b
921 views, 915.59 kB of display lists


Total ViewRootImpl: 1
Total Views: 921
Total DisplayList: 915.59 kB

app安装/卸载

备份/恢复

调试

  • adb bugreport [PATH],将bug报告输出到PATH指定位置
  • adb jdwp,列出所有持有JDWP(Java 平台调试体系结构)的进程id
  • adb logcat,logcat相关配置

安全

脚本命令

内部调试

  • adb start-server 开启服务器
  • adb kill-server关闭服务器
  • adb reconnect 服务器端的重连
  • adb reconnect device 设备端的重连

开启远程连接

断开远程连接

  1. adb devices 查看已经远程连接的设备,如:

    1
    2
    10.1.30.114:5555        device
    10.1.30.50:5555 device
  2. adb disconnect 要断开的设备号,即可断开链接。如:

    1
    adb disconnect 10.1.30.50:5555

相关环境变量

2、安装(-r 替换已存在的应用)
adb -s 5LM7N16531010541 shell pm install -r "/data/local/tmp/tinker.sample.android"

adb push 将本地apk文件推送到模拟器(或手机)上

例如:
​ 1、推送
​ adb push /Users/RandyZhang/AndroidStudioProjects/tinker/tinker-sample-android/app/build/outputs/apk/app-debug.apk /data/local/tmp/tinker.sample.android
​ 2、安装(-r 替换已存在的应用)
​ adb shell pm install -r “/data/local/tmp/tinker.sample.android”