adb的使用,连接手机的方法,远程连接手机

Posted by abining on December 20, 2024

目的

利用adb实现远程连接手机,控制手机。 mac系统通过ADB与scrcpy实现手机投屏

方法

1. 下载adb,scrcpy

  1. 安装ADB
1
brew cask install android-platform-tools
  1. 安装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

  1. 进入github的scrcpy仓库,找到对应的release版本,下载对应的二进制文件,解压后,将文件移动到 /usr/local/bin目录下,即可使用。
  2. 直接下载scrcpy的mac版本,解压后,在目录解压好的中使用./scrcpy运行这个文件。 image.png

2. adb连接设备,使用无线调试

使用无线调试功能,以下是一些替代方法:

方法一:使用ADB TCP/IP模式

  1. 手机设置

    • 打开手机的“设置”。
    • 进入“开发者选项”。
    • 开启“USB调试”。
    • 使用USB线连接手机和电脑。
  2. 电脑端

    • 打开命令行工具。
    • 输入 adb tcpip 5555,将adb从USB模式切换到TCP/IP模式。
    • 断开USB连接。
    • 输入 adb connect <手机的WLAN IP>:5555,连接设备。

方法二:使用ADB WiFi

  1. 手机设置

    • 打开手机的“设置”。
    • 进入“开发者选项”。
    • 开启“USB调试”。
    • 使用USB线连接手机和电脑。
  2. 电脑端

    • 打开命令行工具。
    • 输入 adb tcpip 5555
    • 断开USB连接。
    • 找到手机的IP地址(在手机的“设置”->“关于手机”->“状态信息”中查找)。
    • 输入 adb connect <IP地址>:5555 来连接设备。
  3. 获取设备的 IP 地址

    • 在安卓设备上,进入“设置”>“关于手机”>“状态”>“IP 地址”,记下设备的 IP 地址。
    • 或者,可以在命令提示符中运行以下命令获取设备的 IP 地址:
    1
    
    adb shell ip -f inet addr show wlan0
    

方法三:使用第三方应用

您可以使用一些第三方应用程序来实现无线调试,例如Wireless ADB、AirDroid、WiFi ADB等。这些应用程序需要在设备上安装,并允许您通过无线局域网连接到设备并进行调试。大多数这些应用程序都需要您通过USB连接直到可以使用无线调试。

方法四:使用ADB pair命令(适用于Android 11及更高版本)

  1. 手机设置

    • 打开手机的“设置”。
    • 进入“开发者选项”。
    • 开启“无线调试”。
    • 选择“使用配对码配对”或“使用二维码配对”。
    • 记录下配对码、IP地址和端口号。
  2. 电脑端

    • 打开命令行工具。
    • 输入 adb pair ip:port,使用手机显示的IP地址和端口号。
    • 根据提示输入配对码,完成配对。
    • 输入 adb connect ip:port,连接设备。

进行投屏

  1. 查看adb连接的设备
1
adb devices 
  1. 使用scrcpy打开手机投屏
1
scrcpy -m 1024

投屏结果: image.png

一些脚本,实现点亮屏幕,输入密码等等。

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文件,配置如下: 20241223091325

然后设置后台无限制,防止软件被杀。

脚本实现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助手,先配对,再连接,进行控制。