目的
利用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助手,先配对,再连接,进行控制。