某学姐

Android Female Developer, Technology Fan, Reader.

ADB工作原理及常用命令整理

2019-11-27 | Comments

  1. 基本指令
  2. am / pm
  3. logcat
  4. 查看设备信息
  5. 模拟用户事件
  6. ADB工作原理

1. 基本指令

adb devices (-l) 查看设备(-l表示列出设备具体信息)
adb start-server 启动adb服务
adb kill-server 停止adb服务
adb (-s serialNumber) shell 进入指定设备(一般多个设备同时连上adb时需要指定, serialNumber通过adb devices获取)

adb install (-r) xxx.apk 安装apk(-r表示卸载已有apk, 但保留其数据)
adb install (-r -d) xxx.apk 安装apk(-r表示卸载已有apk, 但保留其数据, -d表示支持版本降级)
adb uninstall (-k) xxx.apk 卸载apk(-k表示卸载后保存data和cache目录)

adb push local remote 电脑推送到手机(local -> remote, 电脑 -> 手机)
adb pull remote local 手机拉取到电脑(remote -> local, 手机 -> 电脑)

adb version 查看adb版本
adb –help adb命令帮助

2. am / pm

adb shell am start -n packageName/activityName 启动某个Activity(-n指定component)
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com/ 打开baidu(-a指定action, -d指定uri)
adb shell am start -a android.intent.action.CALL -d tel:10086 打电话(-a指定action, -d指定data_uri)
adb shell am startservice/stopservice 启动服务/停止服务(同am start)
adb shell am broadcast 发送广播(同am start)
adb shell pm list packages 打印所有程序的包名

adb shell force-stop packageName 强制停止一切(同设置->强制停止运行)
adb shell kill packageName 杀进程(只杀后台进程)
adb shell kill-all 杀死所有后台进程

关于packageName / activityName:
若使用Gradle构建则applicationId为packageName, activityName指Activity完整路径. 如果activityName路径包含packageName则可以省略掉包含的部分.
adb shell am start -n com.tencent.mm/com.tencent.mm.ui.LauncherUI 完整写法
adb shell am start -n com.tencent.mm/.ui.LauncherUI 简写

3. logcat

https://developer.android.com/studio/command-line/logcat

adb logcat *:W 打印Warning及以上等级的日志(log等级由低到高: V-D-I-W-E-F-S)
adb logcat | grep (-i) xxxStr 打印包含xxxStr字符串的日志(-i表示忽略大小写)
adb logcat -c 清空日志并退出
adb logcat -d 打印日志并退出
adb logcat -t < count > 打印最近count条日志
adb logcat > xxx.txt 将日志保存到电脑上文件
adb logcat -f /sdcard/xxx.txt 将日志保存到手机sdcard

4. 查看设备信息

https://developer.android.com/studio/command-line/dumpsys

adb shell dumpsys activity | grep mFocusedActivity 查看当前Activity(包括PackageName和ActivityName)
adb shell dumpsys activity activities | grep mResumedActivity 作用同上
adb shell dumpsys activity top 查看栈顶Activity完整信息(包括Package/Activity/Fragment/View/PID等完整信息)
adb shell dumpsys window w | grep name= 查看当前所有窗口信息(和以上作用有重合)
也可使用github上开源工具: https://github.com/fashare2015/ActivityTracker

adb shell cat /system/build.prop 查看设备完整信息
adb shell getprop ro.product.model 查看机型(如Redmi Note 4X)
adb shell getprop ro.build.version.release 查看Android版本号
adb shell wm sie 查看屏幕分辨率
adb shell cat /proc/cpuinfo 查看CPU信息
adb shell cat /proc/meminfo 查看内存信息
adb shell settings get secure android_id 查看android_id
adb shell service call iphonesubinfo 1 查看IMEI(Android 5.0及以上, 否则使用adb shell dumpsys iphonesubinfo)
adb shell ifconfig | grep Mask 查看ip地址(或adb shell ifconfig wlan0)

5. 模拟用户事件

http://gityuan.com/2015/06/28/adb-notes/

adb shell input text < string > 模拟输入, 手机端输入框输入string
adb shell input keyevent < KEYCODE > 模拟按键(如返回键adb shell input keyevent 4)
adb shell input tap < x > < y > 模拟点击, 点击指定坐标(如adb shell input tab 500 500)
adb shell input swipe < x1 > < y1 > < x2 > < y2 > < time > 模拟滑动, 指定时间内从坐标1滑动到坐标2

6. ADB工作原理

Android Debug Bridge

总共包含3个元素:
client: 客户端, 用于发送adb指令, 运行在PC端
daemon: adbd守护进程, 运行在手机端
server: 服务端, 管理client和adbd之间的通信, 运行在PC端

client <-> server <-> adbd

在client端通过指令启动adb client时, adb client会先检查adb server是否运行, 若没运行会启动adb server.
当adb server启动后, 会先绑定到TCP端口号5037, 监听adb client发送过来的指令.
同时adb server查找adbd守护进程, 和当前连接的手机设备建立连接.

ADB官方文档:
https://developer.android.com/studio/command-line/adb
关于adb指令更完整的使用参考:
https://github.com/mzlogin/awesome-adb

本文原文发自 某学姐, 转载请保留出处, 谢谢.

Comments