adb基本操作
简介
adb的全称为Android Debug Bridge,就是起到调试桥的作用。
adb是[android sdk](https://baike.baidu.com/item/android sdk?fromModule=lemma_inlink)里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的android设备(如G1手机).
它的主要功能有:
-
运行设备的shell(命令行)
-
管理模拟器或设备的端口映射
-
计算机和设备之间上传/下载文件
-
将本地apk软件安装至模拟器或android设备
架构
adb是一个 C/S架构的应用程序,由三部分组成:
- adb client:运行在PC上(为DDMS即IDE工作)
- adb daemon:守护进程,运行于Emulaor
- adb server:服务进程,运行在PC,管理adb client和adb daemon之间的通信
server与client通信的端口是5037,adb server与emulator交互时使用的端口有两个:
- 5554专门用于与Emulator实例的连接
- 5555专门用于与daemon连接

环境依赖
ADB依赖
-
JDK
Java开发工具包
-
platform-tools
Android平台工具包
下载
JDK的安装以及环境变量的配置,在这里就不详细赘述了,网上一搜一大把。
下面提供几个不同操作系统下的adb工具下载地址:
-
ADB和Fastboot for Windows
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
-
ADB和Fastboot for Mac
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
-
ADB和Fastboot for Linux
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
下载完以后,解压到你想解压的地方
配置
为了方便日后命令行的使用,这里以Windows系统为例,配置一下adb的环境变量。
这里需要注意下步骤5:这里的文件夹路径指向的是你上面下载的压缩包解压的目录路径

验证
输入以下两个指令以验证环境是否安装正确:
java -version查看java版本adb version查看adb版本
C:\Users\liaoy>java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
C:\Users\liaoy>adb version
Android Debug Bridge version 1.0.41
Version 33.0.3-8952118
Installed as C:\Program Files\platform-tools\adb.exe
如果上面两步验证没有问题以后,那么下面我们就可以开始进入使用环节了
连接设备
adb支持两种连接android系统的方式:
- USB方式
- 网络方式(ADB远程调试Android设备)
USB方式
-
Android设备处于开发者模式
系统–>关于手机–>版本号(连续点击多次至提示打开开发者模式)。
-
USB连接Android设备
USB连接Android设备,在开发这模式中,将USB调试和USB安装、USB调试(安全设置),这几个选项都打开,下拉状态栏中USB使用方式选择:传输文件
-
验证是否连接设备
C:\Users\liaoy>adb devices List of devices attached 145621a0 device当出现xxxxx device字样,则代表设备已经连接成功
-
当PC接入的Android设备数量>1台时,执行adb命令会报错提示“adb: more than one device/emulator”
C:\Users\liaoy>adb shell adb:more than one device/emulator出现以上情况可以使用“-s”参数来指定要操作的设备,例如:
C:\Users\liaoy>adb -s 145621a0 shell
网络方式
-
确保电脑和Android设备需连同一wifi
-
使用usb数据线连接设备
-
设置wifi adb连接端口号
C:\Users\liaoy>adb tcpip 5555 restarting in TCP mode port: 5555 -
查看连接设备IP
C:\Users\liaoy>adb shell ifconfig wlan0 wlan0 Link encap:UNSPEC Driver icnss inet addr:192.168.8.124 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::e219:9b44:140c:efb7/64 Scope: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:22787838 errors:0 dropped:0 overruns:0 frame:0 TX packets:15743149 errors:0 dropped:25 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:23279809590 TX bytes:8007838414 -
拔掉usb数据线
-
通过IP连接至安卓设备
- 通过
adb connect指定端口号则连接指定设备的端口号,若不指定端口号,则默认连接5555端口
C:\Users\liaoy>adb connect 192.168.8.124:5555 already connected to 192.168.8.124:5555 - 通过
-
断开连接
- 通过
adb disconnect指定ip端口号则断开指定设备的连接,若不指定,则断开所有设备连接
C:\Users\liaoy>adb disconnect 192.168.8.124:5555 disconnected 192.168.8.124:5555 - 通过
抓取指定应用日志
1. 获取应用的包名
通过以下两种方式获取需要抓取日志的应用包名
-
输入命令:
adb shell am monitor,随后运行应用程序C:\Users\liaoy>adb shell am monitor Monitoring activity manager... available commands: (q)uit: finish monitoring ** Activity starting: com.baidu.searchbox ** Activity resuming: com.baidu.searchbox ** Activity resuming: com.baidu.searchbox通过以上命令可以获取到当前设备在activity状态的程序
-
输入命令:adb shell pm list packages -3
C:\Users\liaoy>adb shell pm list packages -3 package:com.sohu.inputmethod.sogou package:com.baidu.searchbox package:com.ibimuyu.lockscreen package:com.UCMobile package:com.ss.android.ugc.aweme package:com.tencent.mobileqq package:com.shuame.sprite package:com.jingdong.app.mall package:com.alibaba.android.rimet package:com.taobao.taobao package:com.qitu.market通过以上命令可以获取到所有已安装应用的包名
2. 抓取应用日志
-
进入adb shell;
-
使用命令logcat | grep com.taobao.taobao(软件的包名)
C:\Users\liaoy>adb shell HWASK-H:/ $ logcat | grep com.taobao.taobao 11-14 15:29:45.373 4751 4751 I RMS.HwSysResManager: preloadAppForLauncher packageName com.taobao.taobao preloadType 101 11-14 15:29:45.409 2090 2390 I HwWindowManagerServiceEx: set launch origin and target for: com.taobao.taobao with delay 3000 11-14 15:29:45.414 2090 2390 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 hwFlg=0x10 cmp=com.taobao.taobao/com.taobao.tao.welcome.Welcome bnds=[192,127][360,322] (has extras)} from uid 10056 11-14 15:29:45.417 1057 1097 D AwareLog: iawared: WorkingsetProcessCommand subCmd = 354, userId=10109, pid=0, com.taobao.taobao 11-14 15:29:45.417 1057 1097 D AwareLog: iawared: WorkingsetSendPrereadMsg com.taobao.taobao 11-14 15:29:45.417 1057 1097 D AwareLog: iawared: WorkingsetStart com.taobao.taobao in monitor0 11-14 15:29:45.440 2090 2390 D ActivityTaskManager: TaskLaunchParamsModifier:task=null activity=ActivityRecord{c22ef83 u0 com.taobao.taobao/com.taobao.tao.welcome.Welcome t-1} display-from-source=0 display-id=0 display-windowing-mode=1 11-14 15:29:45.441 2090 2390 D ActivityTaskManager: TaskLaunchParamsModifier:task=null activity=ActivityRecord{c22ef83 u0 com.taobao.taobao/com.taobao.tao.welcome.Welcome t-1} display-from-source=0 display-id=0 display-windowing-mode=1 activity-options-fullscreen=Rect(0, 0 - 0, 0) non-freeform-display maximized-bounds... -
也可通过
[-s]选项,参数值为:*:E来指定日志输出级别- V:不过滤输出所有调试信息,包括 VERBOSE、DEBUG、INFO、WARN、ERROR
- D:debug过滤器,输出DEBUG、INFO、WARN、ERROR调试信息
- I:info过滤器,输出INFO、WARN、ERROR调试信息
- W:waring过滤器,输出WARN和ERROR调试信息
- E:error过滤器,只输出ERROR调试信息
130|HWASK-H:/ $ logcat -s *:E | grep com.taobao.taobao 11-14 15:38:17.326 2090 2285 E WindowManager: win=Window{c370ab1 u0 com.taobao.taobao/com.taobao.tao.welcome.Welcome EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true 11-14 15:38:19.372 2090 2390 E WifiService: Permission violation - getConfiguredNetworks not allowed for uid=10109, packageName=com.taobao.taobao, reason=java.lang.SecurityException: UID 10109 has no location permission 11-14 15:38:19.382 2090 14896 E WifiService: Permission violation - getConfiguredNetworks not allowed for uid=10109, packageName=com.taobao.taobao, reason=java.lang.SecurityException: UID 10109 has no location permission 11-14 15:38:45.785 29795 30536 E ProtoDB : begin compacting: /data/user/0/com.taobao.taobao/files/lsdb-downgrade 11-14 15:38:45.786 29795 30536 E ProtoDB : finish compacting: /data/user/0/com.taobao.taobao/files/lsdb-downgrade 11-14 15:38:45.786 29795 30536 E ProtoDB : begin compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:45.786 29795 30536 E ProtoDB : finish compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:45.786 29795 30536 E ProtoDB : begin compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:45.786 29795 30536 E ProtoDB : finish compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:45.786 29795 30536 E ProtoDB : begin compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:45.786 29795 30536 E ProtoDB : finish compacting: /data/user/0/com.taobao.taobao/files/lsdb-uikit_navigation_extern 11-14 15:38:47.028 30812 30930 E SharedPreferencesImpl: Couldn't rename file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml to backup file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml.bak 11-14 15:38:47.034 29795 30237 E SharedPreferencesImpl: Couldn't rename file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml to backup file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml.bak 11-14 15:38:47.039 30812 30930 E SharedPreferencesImpl: Couldn't rename file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml to backup file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml.bak 11-14 15:38:47.043 29795 30237 E SharedPreferencesImpl: Couldn't rename file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml to backup file /data/user/0/com.taobao.taobao/shared_prefs/adaemon.xml.bak 11-14 15:38:49.198 29795 30387 E ShopRouterInit: orange change : shop_router, pkgName = com.taobao.taobao 11-14 15:38:51.281 29795 30223 E SoPatchLogger: DegradeSoUtils:->dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/base.apk"],nativeLibraryDirectories=[/data/user/0/com.taobao.taobao/app_plugins_lib, /data/user/0/com.taobao.taobao/files/swallows/arm64-v8a/0acf1bae557965135ecab91915d22646, /data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/lib/arm64, /data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64]]] couldn't find "libMNN_NPU.so" 11-14 15:38:51.282 29795 30223 E MNNPyBridge: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/base.apk"],nativeLibraryDirectories=[/data/user/0/com.taobao.taobao/app_plugins_lib, /data/user/0/com.taobao.taobao/files/swallows/arm64-v8a/0acf1bae557965135ecab91915d22646, /data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/lib/arm64, /data/app/com.taobao.taobao-_ymujAQODhiOLC6_u2iTDQ==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64]]] couldn't find "libMNN_NPU.so"
常用指令
-
adb start-server
启动ADB服务
-
adb kill-server
关闭ADB服务
-
adb devices
列出所有设备
-
adb connect 192.168.100.1:5555
connect 表示连接到设备
192.168.100.1:5555 表示设备地址(address)和端口号(dport) -
adb disconnect
断开所有连接
-
adb reboot
重启设备
-
adb reboot recovery
重启设备到Recovery
-
adb reboot bootloader
也就是常说的BL锁
-
adb shell wm size
size 表示获取当前设备屏幕的分辨率
-
adb shell wm size 1080x1920
size 1080x1920 表示设定屏幕分辨率为1080x1920
注意 : 1080x1920中的x,是字母x(艾克斯) -
adb shell wm size reset
size reset 表示重置当前设备的屏幕分辨率恢复到默认
-
adb shell wm density
wm density 表示获取当前屏幕密度
-
adb shell wm density 300
wm density 300 表示设置当前设备屏幕密度为300
-
adb shell wm density reset
wm density reset 表示重置当前设备的屏幕密度恢复到默认
-
adb shell
进入shell模式
-
exit
退出shell模式
-
su
切换到Root用户
-
adb -s emulator-5554 shell
-s 表示指定某个设备
emulator-5554 表示设备名称 -
adb install -g -r .\easyclick.apk
install 表示安装
-g 表示赋予所有权限
-r 表示覆盖安装
.\wechat.apk 表示需要安装的apk路径支持相对和绝对路径 -
adb shell pm list package -3
pm 表示Package Manager(包管理器)
list 表示列表,列出
package 表示包
-3 表示第三方应用(即用户自行安装的应用)
-s 表示系统应用
-3可省,列出设备所有包名 -
adb shell pm path com.gibb.easyclick
pm 表示Package Manager(包管理器)
path 表示安装路径
com.gibb.easyclick 表示包名,此指令的执行结果,即显示出微信安装包所在的位置路径 -
adb shell pm clear com.gibb.easyclick
pm 表示Package Manager(包管理器)
clear 表示清空
com.gibb.easyclick 表示包名,此指令的执行结果,即清空微信所有数据,恢复到第一次安装的状态
此指令等同于清空应用详情界面中的存储(Storage)-数据(Data) -
adb shell dumpsys window
dumpsys window 表示将当前界面转存成静态文件
-
adb shell dumpsys window|findStr mCurrentFocus
dumpsys window 表示将当前界面转存成静态文件
findStr mCurrentFocus 表示查找属性
获取当前界面的PackageName(包名)和ActivityName(活动名) -
adb shell pm uninstall com.gibb.easyclick
pm 表示Package Manager(包管理器)
uninstall 表示反向安装,即卸载
com.gibb.easyclick 表示需要卸载的包名,此指令的执行结果,即卸载微信 -
adb shell pm uninstall --user 0 com.gibb.easyclick
pm 表示Package Manager(包管理器)
uninstall 表示反向安装,即卸载
–user 0 表示管理员权限
com.gibb.easyclick 表示需要卸载的包名
此指令可以卸载大部分系统自带的应用,适用于强迫症,极端完美主义玩家.需要谨慎使用,卸载后尽量不要关机或者重启设备,否则可能会出现无法开机的情况.或者开机时间很长很长(其实就是系统发现缺少了自带应用,努力恢复的一个过程),有变砖的可能性 -
adb shell am force-stop com.gibb.easyclick
am 表示Activity Manager(活动管理器)
force-stop 表示强制停止
com.gibb.easyclick 表示需要强制停止的包名
此指令等同于应用详情界面中的强制停止 -
adb shell monkey -p com.gibb.easyclick 1
monkey 表示压力测试
-p 表示指定包名
com.gibb.easyclick 表示需要测试的包名
1 表示时间,单位毫秒
大部分情况用来启动某个已知包名的应用,参考来源于Stack Overflow -
adb shell mkdir test
mkdir 表示创建文件夹
test 表示创建新文件夹的名称 -
adb shell touch test.txt
touch 表示创建新文件,替代方案cat >test.txt
test.txt 表示创建新文件的名称 -
adb shell cat test.txt
cat 表示打开文件
test.txt 表示要打开的文件 -
adb shell cat >test.txt
创建一个test.txt的文件,并输入内容,ctrl+d退出编辑,enter结束操作如果test.txt存在,之前的内容会被覆盖
-
adb shell cat >>test.txt
编辑test.txt文件,追加内容,ctrl+d退出编辑,enter结束操作如果test.txt不存在,会自动创建
ctrl+d
退出编辑模式
-
adb shell cp /sdcard/1.txt /sdcard/Pictures/1.txt
cp 表示复制
/sdcard/1.txt 表示原路径位置
/sdcard/Pictures/1.txt 表示移动后的路径位置,支持重命名 -
adb shell mv /sdcard/1.txt /sdcard/Pictures/1.txt
mv 表示移动
/sdcard/1.txt 表示原路径位置
/sdcard/Pictures/1.txt 表示移动后的路径位置,支持重命名 -
adb shell rename oldf.txt newf.txt
rename 表示重命名
oldf.txt 表示原名称
newf.txt 表示修改后的名称,重命名 -
adb shell rm test.txt
rm 表示删除文件
test.txt 表示需要删除的文件 -
adb shell rmdir test
rmdir 表示删除文件夹
test 表示需要删除的文件夹
需要注意的是,当文件夹test中包含其他文件或文件夹的时候,会删除失败 -
adb shell rm -r test
rm 表示删除
-r 表示递归到其子目录
test 表示需要删除的文件夹
该方法会删除整个test文件夹,包括其子目录中,请谨慎操作 -
adb shell find -name uiauto*
find 表示查找匹配
-name 表示名称区分大小写
uiauto* 表示匹配规则,其中*表示匹配任意数量的任意字符 -
adb shell find -iname pictures
find 表示查找匹配
-iname 表示不区分大小写
pictures 表示需要查找的名称 -
adb shell find -name [ASP]ictures
find 表示查找匹配
-name 表示名称区分大小写
[ASP]ictures 表示匹配规则,会匹配Aictures和Sictures还有Pictures -
adb shell input keyevent 3
input 表示输入模式
keyevent 表示模拟按键
3 表示三大金刚中的主页Home,对应KeyCode码表 -
adb shell input keyevent 4
input 表示输入模式
keyevent 表示模拟按键
4 表示三大金刚中的返回Back,对应KeyCode码表 -
adb shell input keyevent 26
input 表示输入模式
keyevent 表示模拟按键
26 表示电源Power,对应KeyCode码表 -
adb shell input keyevent 82
input 表示输入模式
keyevent 表示模拟按键
82 表示三大金刚中的菜单Menu,对应KeyCode码表 -
adb shell input text 1234qwer
input 表示输入模式
text 表示输入字符/字符串
1234qwer 表示需要输入的字符/字符串
注意 : 因为编码的原因,故不支持输入中文 -
adb shell ime
扩展一下(对于编码和极端输入有用)
主要关注list和set,enable和disable仅作了解就行
ADB编码问题解决方案
方案参考:查看ADBKeyboard
-
adb shell am broadcast -a ADB_INPUT_TEXT --es msg ‘你好世界’
ADBKeyboard解决输入中文的编码问题
-
adb shell am broadcast -a ADB_CLEAR_TEXT
清空输入的文本
-
adb shell input tap x y
input 表示输入模式
tap 表示点击
x 表示需要点击的位置横坐标
y 表示需要点击的位置纵坐标 -
adb shell input swipe x1 y1 x2 y2
input 表示输入模式
swipe 表示滑动
x1 表示起始位置的横坐标
y1 表示起始位置的纵坐标
x2 表示终点位置的横坐标
y2 表示重点位置的纵坐标 -
adb shell screencap /sdcard/Pictures/now.png
screencap 表示截图
/sdcard/Pictures/now.png 表示截图保存的位置 -
adb shell ps
ps 表示列出当前所有任务(包括name和pid)
-
adb shell kill pid
kill 表示杀死进程/服务
pid 表示任务的pid属性 -
adb shell /system/bin/uiautomator dump /sdcard/now.xml
/system/bin/uiautomator 表示执行uiautomator
dump 表示将当前界面转存为静态文件
/sdcard/now.xml 转存位置
/system/bin/目录下为指令集合,亦可简写为adb shell uiautomator dump /sdcard/now.xml -
adb push .\1.txt /sdcard/1.txt
push 表示将PC端的指定文件推送到移动端
.\1.txt 表示文件在PC端的位置,一般都是用相对路径
/sdcard/1.txt 表示文件推送到移动端保存的位置
多个设备同时在线需要指定设备名称,如adb -s emulator-5554 push .\1.txt /sdcard/1.txt -
adb pull /sdcard/1.txt .\1.txt
pull 表示拉取移动端文件到PC端
/sdcard/1.txt 表示文件在移动端的位置
.\1.txt 表示拉取到PC端保存的位置
push和pull对应,记忆方法:pull中有两个L,可以联想到汉语中la,相反另外一个则为推送 -
adb remount
remount 表示挂载为可读写
常用于Permission Denied(权限不足)的问题,优先考虑挂载,挂载失败再考虑chmod提权 -
adb shell chmod -R 777 path
chmod 表示提权
-R 表示提权递归到该目录的子目录,注意大写
777 表示权限级别
path 表示需要提权的目录 -
设备代理模式激活方式1
推送设备对应的二进制文件,adb push newagent-x86 /data/local/tmp/agent
cd到tmp,chmod -R 777 agent//提权
执行adb shell /data/local/tmp/agent -mode=runagent -dport=19901,19902,19903 --password=123 -
设备代理模式激活方式2
路径提权,adb remount//remount succeeded
推送二进制文件到system目录 adb push newagent-x86 /system/bin/agent//直接推送会报错,但并不影响激活效果
执行二进制文件 adb shell /system/bin/agent -mode=runagent -dport=19901,19902,19903 --password=123 -
设备代理模式激活方式3
exe程序批量激活
激活结果验证
查询指定端口号19901,19902,19903是否存在通讯 adb shell netstat -ant