如何远程调试一台Android设备

要想跨越公网调试Android设备首先需要解决两个问题:

  1. 如何让adb走tcp通信
  2. 如何从公网连接这台设备

第一个问题:通过tcp调试Android手机

其实adb本身是支持通过tcp协议传输数据的只是可能大部分人从来没用过这个功能,大家可以在终端里面输入adb –help查看,里面有这么几个参数:

1
2
3
4
5
6
7
...
networking:
connect HOST[:PORT] connect to a device via TCP/IP
disconnect [[HOST]:PORT] disconnect from given TCP/IP device, or all
...
usb restart adbd listening on USB
tcpip PORT restart adbd listening on TCP on PORT

connect和disconnect是用来连接一台远程设备或者断开远程设备的,usb和tcpip选项是用来切换手机端adbd守护进程工作模式的我们要用到的就是tcpip这个参数使adbd服务监听在一个特定的网络端口上

在电脑端执行

1
2
3
adb shell ifconfig wlan0 #先查看一下手机wifi的ip地址后续连接的时候会用到
adb tcpip 5555 #将手机切换到tcp模式并在5555端口上监听
adb connect 192.168.1.8:5555 #连接手机对应的ip地址和端口

或者在已root的设备上使用termux软件设置adbd为tcp模式

1
2
3
4
5
6
7
// 持久化设置
# setprop persist.adb.tcp.port 5555
# stop adbd; start adbd
// 一次性设置重启后失效
# setprop service.adb.tcp.port 5555
# stop adbd; start adbd

至此第一个问题已解决

第二个问题:跨越公网连接设备

在大多数的环境中我们手机都是通过连接一台无线路由器NAT上网的,但是熟悉网络的小伙伴一定知道路由器并不会给手机分配一个公网IP而是一个内网的,因此我们理论上从公网上是不能直接访问到这台手机的.这里我们需要做一个内网穿透把这台手机给暴露在公网上这样我们才能直接访问,而目前内网穿透的方案有很多像商业的花生壳以及开源的nginxfrp这些,商业的限制太多切收费而nginx又太复杂那剩下的只有frp了不了解frp的同学可以自行搜索一下使用起来也比较简单,不过这里又有一个问题了我们需要一台具有公网IP服务器来运行frp的server端!这…貌似又陷入了死循环… 不过幸好找到一个免费的frp服务器Android版本的frp的客户端可以直接连接并且速度还不错具体怎么配置查看frp文档很简单,感谢站长用爱发电! 至此需要的东西都准备齐了大致的网络拓扑如下

  1. 先把Android设备切换到tcp模式下

    1
    adb tcpip 5555 #将手机切换到tcp模式并在5555端口上监听
  2. 去natfrp网站注册账号申请一个隧道
    创建好了之后点击配置文件这个选择之前申请的服务器节点下面就会限制对应的配置文件

  3. 安装Android frpc客户端

    • 下载对应手机架构的frpc客户端
      arm架构下载frp_0.33.0_linux_arm.tar.gz
      arm64架构下载frp_0.33.0_linux_arm64.tar.gz

    • 下载完成后从压缩文件中把frpc解压出来传到设备上的临时目录并追加执行权限

      1
      2
      adb push frpc /data/local/tmp
      adb shell chmod +x /data/local/tmp/frpc
    • 导入在网站上生成的客户端配置文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      adb shell

      cat > /sdcard/frpc.ini << EOL
      [common]
      server_addr = 27.155.87.89
      server_port = 7000
      tcp_mux = true
      pool_count = 1
      protocol = tcp
      user = xxxxxxxxxxxxxx
      token = xxxxxxxxxxxxxxxx
      dns_server = 114.114.114.114

      [AndroidTunnel]
      privilege_mode = true
      type = tcp
      local_ip = 127.0.0.1
      local_port = 5555
      remote_port = 58998
      use_encryption = false
      use_compression = true
      EOL

    • 运行frpc客户端映射端口

      1
      nohup /data/local/tmp/frpc -c /sdcard/frpc.ini > /sdcard/frpc.log &

      执行完之后就可以把命令行窗口给关闭了

  4. 远程调试

    找到客户端配置文件中的server_addrremote_port字段这两个就是我们的连接设备的地址和端口

    1
    adb connect 27.155.87.89:58998

    如果不出意外的话应该就会连上的之后就可以像在本地一样调试设备了

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2015-2024 Kaisar
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信