目的
利用 adb 实现远程连接手机,控制手机。 mac 系统通过 ADB 与 scrcpy 实现手机投屏
方法
1. 下载 adb,scrcpy
- 安装 ADB
1
brew cask install android-platform-tools
- 安装 scrcpy
1
brew install scrcpy
下载过程遇到一个问题:
执行 brew install scrcpy后,出现以下错误:
1
2
Error: scrcpy: Failed to download resource "cmake.rb"
Download failed: https://raw.githubusercontent.com/Homebrew/homebrew-core/13ed6cb495ccb0394437f1f3b4449ddc854a464e/Formula/c/cmake.rb
解决方案: 下载地址:https://github.com/Genymobile/scrcpy/releases
- 进入 github 的 scrcpy 仓库,找到对应的 release 版本,下载对应的二进制文件,解压后,将文件移动到
/usr/local/bin目录下,即可使用。 - 直接下载 scrcpy 的 mac 版本,解压后,在目录解压好的中使用./scrcpy 运行这个文件。

2. adb 连接设备,使用无线调试
使用无线调试功能,以下是一些替代方法:
方法一:使用 ADB TCP/IP 模式
-
手机设置:
- 打开手机的“设置”。
- 进入“开发者选项”。
- 开启“USB 调试”。
- 使用 USB 线连接手机和电脑。
-
电脑端:
- 打开命令行工具。
- 输入
adb tcpip 5555,将 adb 从 USB 模式切换到 TCP/IP 模式。 - 断开 USB 连接。
- 输入
adb connect <手机的WLAN IP>:5555,连接设备。
方法二:使用 ADB WiFi
-
手机设置:
- 打开手机的“设置”。
- 进入“开发者选项”。
- 开启“USB 调试”。
- 使用 USB 线连接手机和电脑。
-
电脑端:
- 打开命令行工具。
- 输入
adb tcpip 5555。 - 断开 USB 连接。
- 找到手机的 IP 地址(在手机的“设置”->“关于手机”->“状态信息”中查找)。
- 输入
adb connect <IP地址>:5555来连接设备。
-
获取设备的 IP 地址 :
- 在安卓设备上,进入“设置”>“关于手机”>“状态”>“IP 地址”,记下设备的 IP 地址。
- 或者,可以在命令提示符中运行以下命令获取设备的 IP 地址:
1
adb shell ip -f inet addr show wlan0
方法三:使用第三方应用
您可以使用一些第三方应用程序来实现无线调试,例如 Wireless ADB、AirDroid、WiFi ADB 等。这些应用程序需要在设备上安装,并允许您通过无线局域网连接到设备并进行调试。大多数这些应用程序都需要您通过 USB 连接直到可以使用无线调试。
方法四:使用 ADB pair 命令(适用于 Android 11 及更高版本)
-
手机设置:
- 打开手机的“设置”。
- 进入“开发者选项”。
- 开启“无线调试”。
- 选择“使用配对码配对”或“使用二维码配对”。
- 记录下配对码、IP 地址和端口号。
-
电脑端:
- 打开命令行工具。
- 输入
adb pair ip:port,使用手机显示的 IP 地址和端口号。 - 根据提示输入配对码,完成配对。
- 输入
adb connect ip:port,连接设备。
进行投屏
- 查看 adb 连接的设备
1
adb devices
- 使用 scrcpy 打开手机投屏
1
scrcpy -m 1024
投屏结果:

一些脚本,实现点亮屏幕,输入密码等等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
# adb连接设备
adb connect 192.168.0.101:5555
# 点亮屏幕
adb shell input keyevent 26
# 上划屏幕
# 从屏幕底部 (540, 1500) 滑动到屏幕顶部 (540, 500)
adb shell input swipe 540 1500 540 500
# 输入密码,在输入密码的时候,使用adb会控制屏幕会黑屏,这时候就要用到这个命令了。
adb shell input text 123456
# 点击确定
adb shell input tap 540 960
让手机可以远程访问,不止局限于局域网内。
1. 利用 tailscale。
下载对应版本的软件包。
例如我需要再 mac 上控制安卓设备,就只需要两边登录同一个账号,就可以看到对方的 ip 了。
让后就通过 ip 进行访问
高级设置
利用公网服务器,作为 Tailscale 的中继节点,提升远程访问的稳定性。
2. 利用 frp 实现内网穿透,
FRP 需要提前在公网 IP 部署。
FRPC(安卓):https://github.com/jing332/FrpAndroid
被控部署 FRP(安卓版)
为实现公网访问,需要下载并安装 FRP 客户端,可以直接通过 github 仓库的 releases 下载。
编辑 frpc.ini 文件,配置如下:

然后设置后台无限制,防止软件被杀。
脚本实现 adb 端口号变化时,自动重启 frp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/bash
# 脚本目录
SCRIPT_DIR=$(dirname "$0")
# frp配置文件路径
FRPC_INI="/root/frp/frp_0.37.1_linux_arm64/frpc1.ini"
# frp可执行文件路径
FRPC_BIN="/root/frp/frp_0.37.1_linux_arm64/frpc"
# 获取当前的端口号
get_port() {
PORT=$(netstat -tulnp | grep adbd | awk '{print $4}' | sed 's/.*://')
if [ -z "$PORT" ]; then
echo "未能获取到端口号"
exit 1
fi
echo $PORT
}
# 检查端口号是否变化
check_port_change() {
CURRENT_PORT=$(get_port)
if [ -z "$LAST_PORT" ]; then
echo "首次运行,设置端口号:$CURRENT_PORT"
LAST_PORT=$CURRENT_PORT
return 0
fi
if [ "$CURRENT_PORT" == "$LAST_PORT" ]; then
echo "端口号未变化,无需重启"
return 1
else
echo "端口号变化,需要重启"
LAST_PORT=$CURRENT_PORT
return 0
fi
}
# 替换配置文件中的端口号
update_config() {
sed -i "9s/.*/local_port = $LAST_PORT/" $FRPC_INI
}
# 重启frpc进程
restart_frpc() {
# 使用完整的命令行字符串
EXACT_CMD="./frpc -c frpc1.ini"
# 查找并关闭旧进程
OLD_PID=$(ps -ef | grep -F "$EXACT_CMD" | grep -v grep | awk '{print $2}')
if [ ! -z "$OLD_PID" ]; then
echo "关闭旧的 frpc 进程 (PID: $OLD_PID)"
kill $OLD_PID
sleep 1
fi
# 切换到 frpc 所在目录
cd /root/frp/frp_0.37.1_linux_arm64
$EXACT_CMD &
cd - > /dev/null
}
# 无限循环,每10秒执行一次
while true; do
check_port_change
if [ $? -eq 0 ]; then
update_config
restart_frpc
fi
sleep 10
done
然后就可以在控制端,例如 mac 或者 windowss 使用 adb 连接手机,然后使用 scrcpy 进行投屏了。
如果使用手机控制,可以下载软件:甲壳虫 adb 助手,先配对,再连接,进行控制。