adb 常规指令与高级指令
adb优化,包含各种adb命令,fastboot命令等等
普通型命令
adb devices
只有一台设备连接时,可直接执行命令,超过一台设备时必须使用 adb -s + 序列号
的方式来指定设备,否则会提示 more than one devices/emulator
。
adb install
在只有一台设备连接时可使用 adb install 软件名.apk
进行安装,若有多个设备连接,则使用 adb install -s 序列号/ip:端口 软件名.apk
进行安装。
使用usb有线连接则使用
序列号
,局域网内无线连接则使用ip:端口
的方式连接
如果软件不在目前所在目录,则需要输入软件的 绝对路径
。
如:
1 | # 目前所在位置 |
**注意: **
如果路径中存在空格,则需要将路径用双引号引用起来,否则会将空格后的路径作为路径去寻找文件。
如:
1
2
3C:\Users\shimu>adb install E:\new folder\cfa-2.5.12-foss-arm64-v8a-release.apk
Performing Streamed Install
adb: failed to stat folder\cfa-2.5.12-foss-arm64-v8a-release.apk: No such file or directory
如果需要替换原来的应用,上面的安装命令是行不通的,需要加上 -r
,即替换原来的应用
如:
1 | C:\Users\shimu>adb install -r E:\new folder\cfa-2.5.12-foss-arm64-v8a-release.apk |
如果需要降级安装就需要在 -r
的后面加上 -d
如:
1 | C:\Users\shimu>adb install -r -d E:\new folder\cfa-2.5.12-foss-arm64-v8a-release.apk |
这里的
r
指的是replace
,替换原来的应用;-d
指的是downgrade
,降级安装。
adb install 附加参数
附加参数: adb install 参数 apk路径
附加参数 | 解释 |
---|---|
-t | 允许安装debug版测试包 |
-l | 锁定应用程序 |
-s | 将应用程序安装到sd卡上 |
-g | 安装后自动授权所有权限 |
-r | 替换已存在的应用程序,强制安装 |
-d | 允许降级安装 |
最常用的参数时最后两个
-r
和-d
,可以对软件进行降级安装,但通常降级安装会与adb uninstall
命令配合使用adb uninstall
与adb install
最大的区别是,在卸载时使用的时包名而不是安装包名,某些手机系统可以在软件详情里查看并复制包名。
adb uninstall
此命令与单词意义相同,卸载的意思,用法与 adb install
部分相同,即在多设备与但设备下使用场景相同。
使用方法: adb uninstall 参数 包名
附加参数: -k
保留数据卸载
adb push/pull
- adb push: 用于上传文件到手机端
- adb pull: 用于将手机端的文件下载到电脑端
adb shell
adb shell input tap [x] [y]
在但设备连接时可以直接使用
adb shell input tap 1000 1000
命令直接操控屏幕例:
1
C:\Users\shimu>adb shell input tap 540 250
也可直接使用
adb shell
命令进入shell
模式下后再使用input tap 540 250
方式进行操控屏幕例:
1
2C:\Users\shimu>adb shell
starqltechn:/ $ input tap 540 250与前面的命令一样,如果连接了多个设备后需要使用
-s
命令指定设备进行操控例:
1
C:\Users\shimu>adb -s 192.168.1.120:5555 shell input tap 540 250
也可与上面一一样,进入指定设备的
shell
模式后再进行操控屏幕例:
1
2C:\Users\shimu>adb -s 192.168.1.120:5555 shell
starqltechn:/ $ input tap 540 250
star2qltechn:/ $ input tap 1000 750 点击开始
star2qltechn:/ $ input tap 1800 100 点击关闭按钮
star2qltechn:/ $ input tap 800 500 领取登录奖励 1~4 x轴依次加300
star2qltechn:/ $ input tap 150 50 返回
star2qltechn:/ $ input tap 400 50 菜单
adb shell su
- 这个指令需要设备解锁root权限后才可使用
iptables
规则详解
iptables
是 Linux 系统中用于管理网络流量规则的工具。以下是规则的各部分解释:-I INPUT
- 插入 (-I for Insert) 一条规则到 INPUT 链的最前面。
- INPUT 链用于处理进入本地设备的流量。
-p tcp
- 匹配协议为 TCP 的数据包。
- tcp 是一种面向连接的网络协议,常用于 HTTP/HTTPS 等服务。
--dport 8080
- 指定目标端口号为 8080。
- 这表示匹配流量的目标是设备的 8080 端口。
- 常用于 HTTP 代理或 Web 服务。
-j ACCEPT
- 动作(Jump)为 ACCEPT。
- 允许符合条件的数据包通过。
命令的作用
在 Android 设备的防火墙中,添加一个规则来允许所有 TCP 流量访问设备的 8080 端口。例如:- 如果设备运行了一个本地 Web 服务(如 HTTP 服务器)在 8080 端口,此规则将允许外部设备访问它。
验证规则是否生效
- 列出当前规则: 这将显示 INPUT 链中的所有规则。
1
~ $ adb shell su -c "iptables -L INPUT"
- 测试端口访问: 在另一台设备上(如 PC),尝试通过网络访问 Android 设备的 8080 端口。例如:
1
~ $ curl http://<device-ip>:8080
- 列出当前规则:
常见问题及解决方案
- iptables: command not found
确保 Android 系统中安装了 iptables 或支持它的内核模块。 - Permission denied
确保设备已 Root,且 ADB 的 shell session 拥有超级用户权限。 - 规则被系统重置
某些 Android 设备可能会在重新启动时清空 iptables 规则。
解决方案:将规则写入脚本并设置为开机启动。 - 规则未生效
检查设备的网络接口配置是否正确,确保规则适用于正确的接口。
- iptables: command not found
常用规则
- 开放指定端口
1
~ $ adb shell su -c "iptables -I INPUT -p tct --dport 8080 -j ACCEPT"
- 关闭指定端口
1
~ $ adb shell su -c "iptables -D INPUT -p tct --dport 8080 -j ACCEPT"
- 开放指定端口
adb shell dumpsys
adb shell dumpsys window | findstr mCurrentFocus
: 获取当前当前正在使用运行的软件的包名1
2D:\scrcpy-win64-v2.2>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{e9dbf43 u0 com.miui.securitycenter/com.miui.securityscan.MainActivity}配合使用
adb shell pm
指令能直接获取到软件安装包的位置1
2D:\scrcpy-win64-v2.2>adb shell pm path com.miui.securitycenter
package:/product/priv-app/MIUISecurityCenter/MIUISecurityCenter.apk再使用
adb pull
命令将安装包下拉到电脑上,使用adb install
命令安装即可,也可以传到手机上直接安装注:若是系统软件,如MIUI就不能使用手机的安装系统进行安装,只能使用
adb install
来强行安装
使用 adb 调整音量
adb 调用系统服务
Android 11 中调整音量:1
adb shell service call audio 9 i32 <编号> i32 <类型> i32 1
Android 11 中设置音量:
1
adb shell service call audio 10 i32 <编号> i32 <音量> i32 1
通过
service call audio
调用系统服务,调用IAudioService.aidl
中编号为9的音量调整方法adjustStreamVolume()
,或编号为10的音量值设置方法setStreamVolume()
。命令参数
编号与音量
<编号>
可以在AudioSystem.java文件中查看。
通过命令adb shell dumpsys audio
可以得到设备的其他音频属性。也可以通过以下命令查看:1
2
3adb shell service call audio 16 i32 <编号> # 查看当前音量
adb shell service call audio 17 i32 <编号> # 查看最小音量
adb shell service call audio 18 i32 <编号> # 查看最大音量记录其范围和默认值可得到如下表格,不同厂商设备的音频范围和默认值可能有所差别:
编号 名称 范围 默认值 功能 0 STREAM_VOICE_CALL 1~11 8 通话 1 STREAM_SYSTEM 0~15 10 铃声 2 STREAM_RING 0~15 10 铃声 3 STREAM_MUSIC 0~150 100 媒体 4 STREAM_ALARM 1~15 12 闹钟 5 STREAM_NOTIFICATION 0~15 10 闹钟 6 STREAM_BLUETOOTH_SCO 1~15 7 通话 7 STREAM_SYSTEM_ENFORCED 0~7 7 铃声 8 STREAM_DTMF 0~15 10 铃声 9 STREAM_TTS 0~15 10 媒体 10 STREAM_ACCESSIBILITY 0~15 10 媒体 11 STREAM_ASSISTANT 0~15 10 语音助手 操作类型
adjustStreamVolume() 方法所需要的音量操作
<类型>
参数,可以在 AudioManager.java 中查看。整理如下:值 名称 功能 1 ADJUST_RAISE 增加音量 -1 ADJUST_LOWER 降低音量 0 ADJUST_SAME 显示音量,但不设置 -100 ADJUST_MUTE 静音 100 ADJUST_UNMUTE 取消静音 101 ADJUST_TOGGLE_MUTE 切换静音状态
示例
铃声编号
2
,增加音量的类型为1
,其命令为:1
adb shell service call audio 9 i32 2 i32 1 i32 1
音频编号
3
,设置其静音或非静音,其命令为:1
2
3adb shell service call audio 9 i32 3 i32 -100 i32 1 #静音
adb shell service call audio 9 i32 3 i32 100 i32 1 #关闭静音
adb shell service call audio 9 i32 3 i32 101 i32 1 #切换静音状态语音助手编号
11
,降低音量的类型为-1
,其命令为:1
adb shell service call audio 9 i32 11 i32 -1 i32 1
闹钟编号
4
,设置其音量为9
,其命令为:1
adb shell service call audio 10 i32 4 i32 9 i32 1
问题解决
权限问题
执行
adb root
Android 版本变动
从ASOP中搜索相关代码,依据对应版本的代码,更改命令中的参数。
如 Android 12,IAudioService.aidl相对 Android 11 改动了方法列表,adjustStreamVolume() 和 setStreamVolume() 分别从第 9 位、第 10 位,移动到了第 10位、第11位。因此,Android 12 中:
1
2
3
4
5adb shell service call audio 10 i32 <编号> i32 <类型> i32 1 # 调整音量
adb shell service call audio 11 i32 <编号> i32 <音量> i32 1 # 设置音量
adb shell service call audio 17 i32 <编号> # 当前音量
adb shell service call audio 18 i32 <编号> # 最小音量
adb shell service call audio 19 i32 <编号> # 最大音量