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
2
3
4
5
6
7
8
# 目前所在位置
C:\Users\shimu>chdir
C:\Users\shimu
# 安装包所在位置: C:\Users\shimu\Downloads\Magisk-v26.1.apk
# 则安装时则需要如下使用方法
C:\Users\shimu>adb install C:\Users\shimu\Downloads\Magisk-v26.1.apk
# 或者直接找到安装包,然后将安装包拖进cmd即可
# 选中安装包 ctrl+c ,然后回到窗口 ctrl+v 也能达到同样的效果
  • **注意: **

    如果路径中存在空格,则需要将路径用双引号引用起来,否则会将空格后的路径作为路径去寻找文件。

    如:

    1
    2
    3
    C:\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 uninstalladb 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
    2
    C:\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
    2
    C:\Users\shimu>adb -s 192.168.1.120:5555 shell
    starqltechn:/ $ input tap 540 250

adb shell su

  • 这个指令需要设备解锁root权限后才可使用

iptables

  • 规则详解
    iptables 是 Linux 系统中用于管理网络流量规则的工具。以下是规则的各部分解释:

    1. -I INPUT
      • 插入 (-I for Insert) 一条规则到 INPUT 链的最前面。
      • INPUT 链用于处理进入本地设备的流量。
    2. -p tcp
      • 匹配协议为 TCP 的数据包。
      • tcp 是一种面向连接的网络协议,常用于 HTTP/HTTPS 等服务。
    3. --dport 8080
      • 指定目标端口号为 8080。
      • 这表示匹配流量的目标是设备的 8080 端口。
      • 常用于 HTTP 代理或 Web 服务。
    4. -j ACCEPT
      • 动作(Jump)为 ACCEPT。
      • 允许符合条件的数据包通过。
  • 命令的作用
    在 Android 设备的防火墙中,添加一个规则来允许所有 TCP 流量访问设备的 8080 端口。例如:

    • 如果设备运行了一个本地 Web 服务(如 HTTP 服务器)在 8080 端口,此规则将允许外部设备访问它。
  • 验证规则是否生效

    1. 列出当前规则:
      1
      ~ $ adb shell su -c "iptables -L INPUT"
      这将显示 INPUT 链中的所有规则。
    2. 测试端口访问: 在另一台设备上(如 PC),尝试通过网络访问 Android 设备的 8080 端口。例如:
      1
      ~ $ curl http://<device-ip>:8080
  • 常见问题及解决方案

    1. iptables: command not found
      确保 Android 系统中安装了 iptables 或支持它的内核模块。
    2. Permission denied
      确保设备已 Root,且 ADB 的 shell session 拥有超级用户权限。
    3. 规则被系统重置
      某些 Android 设备可能会在重新启动时清空 iptables 规则。
      解决方案:将规则写入脚本并设置为开机启动。
    4. 规则未生效
      检查设备的网络接口配置是否正确,确保规则适用于正确的接口。
  • 常用规则

    1. 开放指定端口
      1
      ~ $ adb shell su -c "iptables -I INPUT -p tct --dport 8080 -j ACCEPT"
    2. 关闭指定端口
      1
      ~ $ adb shell su -c "iptables -D INPUT -p tct --dport 8080 -j ACCEPT"

adb shell dumpsys

  • adb shell dumpsys window | findstr mCurrentFocus: 获取当前当前正在使用运行的软件的包名

    1
    2
    D:\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
    2
    D:\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 调整音量

  1. 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()

  2. 命令参数

    1. 编号与音量

      <编号>可以在AudioSystem.java文件中查看。
      通过命令adb shell dumpsys audio可以得到设备的其他音频属性。也可以通过以下命令查看:

      1
      2
      3
      adb 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 语音助手
    2. 操作类型

      adjustStreamVolume() 方法所需要的音量操作<类型>参数,可以在 AudioManager.java 中查看。整理如下:

      名称 功能
      1 ADJUST_RAISE 增加音量
      -1 ADJUST_LOWER 降低音量
      0 ADJUST_SAME 显示音量,但不设置
      -100 ADJUST_MUTE 静音
      100 ADJUST_UNMUTE 取消静音
      101 ADJUST_TOGGLE_MUTE 切换静音状态
  3. 示例

    1. 铃声编号2,增加音量的类型为1,其命令为:

      1
      adb shell service call audio 9 i32 2 i32 1 i32 1
    2. 音频编号3,设置其静音或非静音,其命令为:

      1
      2
      3
      adb 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 #切换静音状态
    3. 语音助手编号11,降低音量的类型为-1,其命令为:

      1
      adb shell service call audio 9 i32 11 i32 -1 i32 1
    4. 闹钟编号4,设置其音量为9,其命令为:

      1
      adb shell service call audio 10 i32 4 i32 9 i32 1
  4. 问题解决

    1. 权限问题

      执行adb root

    2. Android 版本变动

      从ASOP中搜索相关代码,依据对应版本的代码,更改命令中的参数。
      如 Android 12,IAudioService.aidl相对 Android 11 改动了方法列表,adjustStreamVolume() 和 setStreamVolume() 分别从第 9 位、第 10 位,移动到了第 10位、第11位。

      因此,Android 12 中:

      1
      2
      3
      4
      5
      adb 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 <编号> # 最大音量

    原文链接:https://blog.csdn.net/run068/article/details/122824920