Android ADB原理及常用命令
Android调试桥(ADB, Android Debug Bridge)是一个Android命令行工具,包含在SDK 平台工具包中,adb可以用于连接Android设备,或者模拟器,实现对设备的控制,比如安装和调试应用。和Appium一样,adb也是基于C/S架构实现的。
一、ADB运行原理
adb分为三个部分:PC上的adb client,adb server和手机(也可能是PC上的模拟器)上的adb daemon。这是一个多多连接的设计。即一台PC可以连接多个手机,一台手机也可以连接多个PC。
- Client本质上就是Shell,用来发送命令给Server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,绑定 TCP 的 5037 端口,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
- ADB Server:运行在PC上的后台程序,目的是检测USB接口何时连接或者移除设备。ADB Server维护着一个“已连接的设备的链表”,并且为每一个设备标记了一个状态:offline,bootloader,recovery或者online;Server一直在做一些循环和等待,,监听从 clients 发来的命令,协调client和Server还有daemon之间的通信。
- ADB Daemon:程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务;
Client和Server之间通过TCP/IP通信,Server侦听本机的5037端口,Client试图去连接这个端口。基于ADB的工具有 DDMS 、monkey 测试等
- adb源码:https://android.googlesource.com/platform/system/core/+/refs/heads/android10-c2f2-release/adb/
netstat -nao | findstr 5037
二、ADB常用命令
1. adb server启动和连接
- 启动 adb server
adb start-server
- 停止 adb server
adb kill-server
- 指定 adb server 的网络端口<adb默认端口为5037>
adb -P <port> start-server
在发送adb命令时,如果没有pc没有启动Server,则会自动启动一个Server,然后将命令发送到Server。
- 通过adb usb打开设备上的tcpip服务并绑定一个端口
adb tcpip 5555
adb -s 611DKBQC22SH2 tcpip 5555 # 设备在 5555 端口监听 TCP/IP 连接
无线连接要将 Android 设备与将运行 adb 的电脑连接到同一个局域网
ADB Client通过命令adb connect ip连接远程的终端
adb connect 127.0.0.1:62001 #夜游神模拟器
adb connect 127.0.0.1:7555 #网易mumu模拟器
adb disconnect <device-ip-address> # 断开连接
USB连接
开启Android 设备的开发者选项和 USB 调试模式
2. adb常用命令
以 root 权限运行 adbd
adb root
adb -s 611DKBQC22SH2 root
查看 adb 版本
adb version
查看设备名称
adb devices
重启手机
adb reboot
查看appPackage和appActivity
# 1
adb logcat | findstr -i displayed # 打印手机日志
# 2
adb shell dumpsys activity
# 3
C:\Users\admin> adb shell
root@shamu:/ # dumpsys activity | grep kaoyan
# 4
adb shell dumpsys activity top
# 5
adb shell dumpsys activity|findstr mFocusedActivity # 进入APP,得到APP名
# 6
adb shell dumpsys window windows|findstr "Current"
# 7
adb shell pm list packages #所有应用列表
adb shell pm list packages -s # 系统应用
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages smart # 包名包含smart字符串的应用安装卸载apk包
模拟器可以直接把安装包拖入模拟器进行安装adb安装卸载方法:
# 卸载
adb uninstall 包名
# 安装
adb install app.apk
adb install -r app.apk # 强制安装
3. adb 模拟控制手机
拉起、停止Activity
adb shell am start [options] :调起 Activity
adb shell am force-stop : 强制停止应用
adb shell am start -n com.tenda.smarthome.app/.activity.main.MainActivity # 打开smarthome APP
adb shell am force-stop com.tenda.smarthome.app # 强制停止应用
adb shell pm clear <packagename> # 清除应用数据与缓存
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com # 打开网页
模拟按键
adb shell input keyevent 模拟按键
adb shell input keyevent 3 # 按下HOME 键
adb shell input keyevent 4 # 按下返回键
adb shell input keyevent 26 # 按下电源键
adb shell input keyevent 82 # 按下菜单键
adb shell input keyevent 223 # 熄灭屏幕
adb shell input keyevent 224 # 点亮屏幕
adb shell input keyevent 67 # 删除
文本框输入
adb shell input text "text" # 向文本框中输入文字,不支持中文
点击
adb shell input tap 458 573 根据坐标点击
滑动
adb shell input swipe x:屏幕左到右 y:从上到下 左上角为0点-图像坐标系
adb shell input swipe 550 1200 550 375 # 滑动解锁
adb shell input swipe 700 200 100 200 # 左翻页
adb shell input swipe 100 200 1000 200 # 右翻页
4. adb文件管理(同Linux)
目录操作
C:\Users\DELL>adb shell
root@M5:/data # su 提取到root权限,显示井号即可
su
root@M5:/ # ls
ls
@btmtk
acdapi
adb
agps_supl
...
root@M5:/data # ls -l
ls -l
drwxrwx--- bluetooth net_bt 2019-03-01 14:26 @btmtk
drwxrwx--- system system 2019-03-01 14:26 acdapi
drwx------ root root 2019-03-01 14:26 adb
drwxrwx--x gps system 2019-07-19 10:49 agps_supl
drwxrwx--- system system 2019-03-01 14:26 amit
drwxrwxr-x system system 2019-07-22 09:13 anr
drwxrwx--x system system 2019-08-01 09:00 app
drwx------ root root 2019-03-01 14:26 app-asec
root@M5:/data # pwd 当前路径
pwd
/data
root@M5:/data/system # cd - 切换到上次目录
cd -
/data
root@M5:/data # cd .. 切换到上级目录
cd ..
2|root@M5:/ # cd d*a
cd d*a
root@M5:/data # cd s*m 目录名较长时建议使用通配符"*",如cd到system目录
cd s*m
root@M5:/data/system #
文件操作(同Linux)
rm -r crash # 删除文件夹及内容
rmdir # 文件夹 删文件夹
rm # 文件 删文件
cat filename # cat,more less显示文件内容
cp /data/data/com.android.contacts/databases/contacts_app.db /mnt/sdcard/ # 复制
mkdir # 创建目录
du # 显示目录空间大小
df # 显示磁盘空间大小
touch test.txt # 创建文件
ps # 显示进程
top # 动态显示进程状态
chmod 644 # 改变权限
退出
CTRL+C 退出shell模式
root@M5:/mnt/sdcard # ^C
C:\Users\DELL>d:
手机和电脑文件传输
将手机文件pull到电脑
D:\>adb pull sdcard/cmcc_sso_config.dat # 将手机sdcard中的cmcc_sso_config.dat 文件copy到电脑D:根目录下
D:\>adb pull sdcard/cmcc_sso_config.dat D:\adbtest
D:\>
- 将电脑文件push到手机目录下D
D:\>adb push D:/adbtest/cmcc_sso_config111.dat /sdcard/ # 将D:中的cmcc_sso_config111.dat copy到手机sdcard 文件夹下
D:\>adb shell
root@M5:/ # cd /mnt/sdcard
cd /mnt/sdcard root@M5:/mnt/sdcard # ls *cmcc_sso_config*
ls *cmcc_sso_config*
cmcc_sso_config.dat
cmcc_sso_config111.dat root@M5:/mnt/sdcard # find /data -name "cmcc_sso_config*"
find /data -name "cmcc_sso_config*"
/data/media/0/cmcc_sso_config.dat
/data/media/0/cmcc_sso_config111.dat
5. 其它实用功能
屏幕截图-截图保存到SD卡里再导出
D:\>adb shell screencap -p /sdcard/screen.png
D:\>adb pull /sdcard/screen.png
D:\>adb shell rm /sdcard/screen.png
录制屏幕
D:\>adb shell screenrecord /sdcard/filename22.mp4
D:\>adb pull /sdcard/filename22.mp4
D:\>adb shell rm /sdcard/filename22.mp4
D:\>adb shell screenrecord --time-limit 10 /sdcard/demo.mp4
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4
联网
D:\>adb shell svc wifi disable # 关闭WiFi
D:\>adb shell svc wifi enable # 开启WiFi
D:\>adb shell ping -w 3 8.8.8.8 # 查看是否能联网
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
D:\>adb shell cat /data/misc/wifi/*.conf # 查看连接过的 WiFi 密码
.....
device_name=meizu_M5
manufacturer=Meizu
model_name=M611D
model_number=M611D
serial_number=611DKBQC22SH2
device_type=10-0050F204-5
os_version=01020300
config_methods=physical_display virtual_push_button
p2p_no_group_iface=1
external_sim=1
wowlan_triggers=disconnect
network={
ssid="Plug_C415"
key_mgmt=NONE
priority=1
flag=1
}
network={
ssid=" "
key_mgmt=NONE
priority=2
flag=1
}
network={
ssid="test"
psk="12345678"
key_mgmt=WPA-PSK
priority=3
flag=1
}
切换飞行模式
通过adb shell,输入命令,可以切换飞行模式
开启飞行模式
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
关闭飞行模式
adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
svc命令
这个脚本在/system/bin目录下,可以用来控制电源管理,wifi开关,数据开关(就是上网流量)
控制usb插入的时候屏幕是否常亮
svc power stayon [true|false|usb|ac]
关闭数据连接(上网流量),这个命令不会更改app的任何设置,直接在底层关闭数据连接。
svc data disable
打开上网数据连接
svc data enable
控制3g数据连接比wifi优先。
svc data prefer
关闭wifi 连接
svc wifi disable
开启wifi连接
svc wifi enable
设置wifi优先
svc wifi prefer
上面的命令都要在shell中执行,需要root。可以用script ,然后输入这些命令做成在快捷方式放在桌面,跟那些开关软件一样方便使用。
安卓busybox
android busybox解决adbshell命令不全
安卓虽然是基于linux,但是精简了很多linux工具,很多常用的linux指令不能使用。busybox相当于一个打包的工具箱,打包了很多的常用的linux可执行文件和其依赖。安装了busybox你就可以在安卓下下载一个模拟终端然后在里面运行一些之前不能运行的指令。
wpa_spplicant
wpa_supplicant本是开源项目源码,被谷歌修改后加入Android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,控制漫游和无线驱动的IEEE 802.11 验证和关联。通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
wpa_supplicant工具主要包含wpa_supplicant(命令行模式,属于服务端)与wpa_cli(交互模式,属于客户端)两个程序来达到无线认证连接。通过wpa_cli来进行WiFi的配置和连接,也可以直接调用wpa_supplicant接口实现网络控制。
部分命令:
wpa_cli -i wlan0 scan \\扫描热点
wpa_cli -i wlan0 scan_result \\打印热点信息
wpa_cli -i wlan0 set_network 0 ssid "wifi_name" \\配置WiFi热点的名称ssid
wpa_cli -i wlan0 set_network 0 psk '"12345678"' \\配置WiFi热点的密码psk
--THE END--
文章标题:Android ADB原理及常用命令
本文作者:hiyo
本文链接:https://hiyong.gitee.io/posts/appium-adb/
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
Android ADB原理及常用命令的更多相关文章
- adb 环境配置 常用命令 总结
配置环境变量 右键我的电脑 -> 属性 -> 高级 -> 环境变量 -> Path 在Path中添加Android SDK安装路径中 adb.exe 的路径,例如[\sdk\p ...
- adb、monkey常用命令
adb.monkey常用命令 1.查看连接设备 adb devices 2.连接android模拟器 adb connect 127.0.0.1:62001 3.安装软件 adb install 这个 ...
- adb 简介与常用命令
1. abd 简介 2. adb 常用命令 1. abd 简介 adb 的全称为 Android Debug Bridge,就是起到调试桥的作用. 借助 adb 工具,我们可以管理设备或手机模拟器的状 ...
- Docker基础修炼2--Docker镜像原理及常用命令
通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...
- Git 工作原理以及常用命令操作
GIT工作原理 要了解GIT工作原理,先了解GIT的这几块区域: 工作区域划分 工作区:指的是本地工作空间,如果刚拉取下来的代码,没有修改的内容,这块区域是空白的 (modified-已修改状态) 暂 ...
- Android平台的一些常用命令
一.Android常见目录结构 1. apk文件在/data/app目录下 2. /data/data/[package.name]目录,存放程序数据缓存等等 3.SD卡安装方式的,则在/mnt/ ...
- Android Studio:Gradle常用命令
Android Studio中自带Terminal,可以直接使用gradle命令,不必另开命令窗口,相当方便,下面总结一下常用的命令: 1.查看Gradle版本号 ./gradlew -v ...
- android adb经常使用的命令
1.adb--- 订购屏幕截取 :adb shell screencap -p | sed 's/\r$//' > outputs.png 2.jni ---命令 :$NDK/ndk-b ...
- openvswitch的原理和常用命令
一.Openvswitch工作原理 openvSwitch是一个高质量的.多层虚拟交换机,使用开源Apache2.0许可协议,由 Nicira Networks开发,主要实现代码为可移植的C代码.它的 ...
随机推荐
- PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项下的子项列表中增加子项的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 追加子项 QTreeWidgetItem类型的项构建以后,可以通过addChild(QTreeWid ...
- PyQt学习随笔:Qt事件类QEvent详解
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...
- python安装Scrapy框架
看到自己写的惨不忍睹的爬虫,觉得还是学一下Scrapy框架,停止一直造轮子的行为 我这里是windows10平台,python2和python3共存,这里就写python2.7安装配置Scrapy框架 ...
- bugku never give up
打开网页,看到?id=1,很容易想到了爆破. 然后bp抓包爆破.(传说中的一秒爆破.) 看到了 1p.html . 直接访问 缓缓打出一个?(这是个锤子o,本来以为这里有flag,但是,这真的是论坛啊 ...
- WebRequest抓取网页数据出现乱码问题
今天项目里突然有个功能用不起来了,本机确实好的 ,这个很无语 不知道为啥 经过写日志发现html 变成了这样的东西,很是头疼,刚开始各种编码转换,发现这并不是编码的问题 后面观察目标网站多了一个gzi ...
- go学习的第7天
不容易啊,坚持7天了呢,今天开始看视频学习 https://www.bilibili.com/video/BV1pt41127FZ?from=search&seid=4441824587572 ...
- Oracle批量新增数据最佳实践
一.需求描述 现在的项目改造过程中,从国产的Gbase数据库改造为Oracle数据库,遇到一个问题有的业务操作需要批量新增数据. 这也是一个比较常规的操作,有很多地方确实需要一次性新增多条数据.Gba ...
- js原生方法promise的实现
一会儿就要回家过年了,再来手写一个promise吧,要不等着下班真的煎熬... <!DOCTYPE html> <html lang="en"> <h ...
- 密码学系列之:明文攻击和Bletchley Park
目录 简介 crib和明文攻击 布莱奇利公园(Bletchley Park) 简介 明文攻击就是指已经知道了部分明文和它对应的加密后的字段,从而可以推测出使用的加密手段或者密码本.明文攻击这个故事还要 ...