1、概念
Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an emulator instance or connected Android-powered device. It is a client-server program that includes three components:
- A client, which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients.
- A server, which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device.
- A daemon, which runs as a background process on each emulator or device instance.
adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
2、作用
ADB 是 android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备,它的主要功能有:
- 运行设备的shell(命令行);
- 管理模拟器或设备的端口映射;
- 计算机和设备之间上传/下载文件;
- 将本地apk软件安装至模拟器或android设备;
3、adb客户端的启动
当你启动一个adb客户端,客户端首先确认是否已有一个adb服务进程在运行。如果没有,则启动服务进程。当服务器运行, adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,所有的adb客户端都是用端口 5037与adb服务器对话的.
接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连续的端口——一个偶数端口用来相应控制台的连接,和一个奇数端口 用来响应adb连接。比如说:
模拟器1,控制台:端口5554
模拟器1,Adb端口5555
控制台:端口 5556
Adb端口5557...
如上所示,模拟器实例通过5555端口连接adb,就如同使用5554端口连接控制台一样.
一旦服务器与所有模拟器实例建立连接,就可以使用adb命令控制和访问该实例。因为服务器管理模拟器/设备实例的连接,和控制处理从来自多个adb客户端来的命令,你可以通过任何客户端(或脚本)来控制任何模拟器或设备实例.
4、常用adb命令
Command | Description |
---|---|
adb connect host:port | 连接到指定设备 |
adb devices | 查看连接计算机的设备 |
adb tcpip 5555 | restarting in TCP mode port: 5555 |
adb usb | restarting ADB in USB mode |
android list targets | 显示系统中全部Android平台 |
android list avd | 显示系统中全部AVD(模拟器) |
adb reboot | 重启设备 |
adb get-serialno | 获取序列号 |
adb reboot bootloader | 重启到bootloader,即刷机模式 |
adb reboot recovery | 重启到recovery,即恢复模式 |
adb logcat | 查看log日志 |
adb logcat -v time *:e/d/i/w | 格式化过滤输入log日志 |
adb shell screencap <filename> | taking a screenshot of a device display |
adb pull /sdcard/screen.png | download the file from the device |
adb kill-server | 终止adb服务进程 |
adb start-server | 重启adb服务进程 |
adb shell pm path <PACKAGE> | Print the path to the APK of the given <PACKAGE> |
adb shell pm clear <PACKAGE> | Deletes all data associated with a package |
adb shell pm list packages [options] <FILTER> | Prints all packages, optionally only those whose package name contains the text in <FILTER> |
adb shell pm list packages -f | See their associated file |
adb shell pm list packages -d | Filter to only show disabled packages |
adb shell pm list packages -e | Filter to only show enabled packages |
adb shell pm list packages -s | Filter to only show system packages |
adb shell pm list packages -3 | Filter to only show third party packages |
adb shell pm list packages -i | See the installer for the packages |
adb shell pm list packages -u | Also include uninstalled packages |
adb shell pm list packages --user <USER_ID> | The user space to query |
adb shell cat /sys/class/net/wlan0/address | 获取机器MAC地址 |
adb shell cat /proc/cpuinfo | 获取CPU序列号 |
adb install <apkfile> | 安装APK |
adb install -d <apkfile> | allow version code downgrade |
adb install -r <apkfile> | 保留数据和缓存文件,重新安装apk |
adb install -s <apkfile> | 安装apk到sd卡 |
adb uninstall <package> | 卸载APK |
adb uninstall -k <package> | 卸载app但保留数据和缓存文件 |
adb shell am start -n <package_name> | 启动应用 |
adb shell top | 查看设备cpu和内存占用情况 |
adb shell top -m 6 | 查看占用内存前6的app |
adb shell top -n 1 | 刷新一次内存信息,然后返回 |
adb shell procrank | 查询各进程内存使用情况 |
adb shell kill [pid] | 杀死一个进程 |
adb shell ps | 查看进程列表 |
adb shell ps -x [PID] | 查看指定进程状态 |
adb shell service list | 查看后台services信息 |
adb shell cat /proc/meminfo | 查看当前内存占用 |
adb shell cat /proc/iomem | 查看IO内存分区 |
adb remount | 将system分区重新挂载为可读写分区 |
adb pull <remote> <local> | 从设备复制文件到本地 |
adb push <local> <remote> | 向模拟器中写文件 |
adb shell ls | 列出目录下的文件和文件夹,等同于dos中的dir命令 |
adb shell rename path/oldfilename path/newfilename | 重命名文件 |
adb shell rm /system/avi.apk | 删除system/avi.apk |
adb shell rm -r <folder> | 删除文件夹及其下面所有文件 |
adb shell mv path/file newpath/file | 移动文件 |
adb shell chmod 777 /system/fonts/DroidSansFallback.ttf | 设置文件权限 |
adb shell mkdir path/foldelname | 新建文件夹 |
adb shell cat <file> | 查看文件内容 |
adb shell cat /data/misc/wifi/*.conf | 查看wifi密码 |
adb logcat -c | 清除log缓存 |
adb bugreport | 查看bug报告 |
adb shell getprop [options] | get property via the android property service |
adb shell ls [options] | list directory contents |
adb shell ls -n | list numeric UIDs and GIDs |
adb shell cd <directory> | change directory |
adb shell cat /system/build.prop | 获取设备信息 |
adb shell dumpsys [options] | dumps system data |
adb shell dumpsys meminfo <PackageName> | 查看Android应用单个进程的memory |
adb shell dumpsys activity | 获取当前Android系统Activity栈中Activity信息 |
adb shell dumpsys activity findstr "mFocusedActivity" | 获取当前Android系统Activity栈最上层的Activity |
adb shell getprop ro.build.version.release | 获取系统版本 |
adb shell getprop ro.build.version.sdk | 获取系统api版本 |
adb help | 查看ADB帮助 |
adb shell monkey -v -p your.package.name 500 | 跑monkey |
adb -s <serialNumber> <command> | 在指定的设备上执行adb命令 |
adb -e <command> | 如果连接了多个设备,既有真机又有模拟器,但只有一个模拟器的情况下,可以使用该命令在模拟器上执行 |
adb -d <command> | 如果连接了多个设备,既有真机又有模拟器,但只有一个真机的情况下,可以使用该命令在指定真机上执行 |
adb shell pm clear <packagename> | 清除应用数据与缓存 |
adb shell am start -n <packagename> | 启动应用 |
adb shell am force-stop <packagename> | 强制停止应用 |
adb get-serialno | 获取设备序列号 |
adb shell cat /sys/class/net/wlan0/address | 获取MAC地址 |
adb shell getprop ro.product.model | 查看设备型号 |
adb shell wm size | 查看设备屏幕分辨率 |
adb shell wm density | 查看屏幕密度 |
adb shell screenrecord [options] /sdcard/demo.mp4 | 手机录屏 |
adb pull /sdcard/demo.mp4 D:/ | 导出视频到D盘根目录 |
adb shell dumpsys batterystats <package name> | 查看指定应用的耗电情况 |
参考文档:ADB Shell