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 | usage: dumpsys | 
- 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 | Applications Memory Usage (kB): | 
各项指标的含义:
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 | adb shell dumpsys gfxinfo com.hhdd.kada | 
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 设备端的重连
开启远程连接
断开远程连接
- adb devices 查看已经远程连接的设备,如: - 1 
 2- 10.1.30.114:5555 device 
 10.1.30.50:5555 device
- 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 
例如:
    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”