在 Ubuntu 使用 scrcpy 进行 Android 桌面调试

scrcpy 是一个开源的 Android 屏幕镜像工具,允许用户通过 USB 或 WiFi 将Android 设备屏幕镜像到 Ubuntu 桌面,并支持鼠标键盘控制、文件传输、剪贴板同步等功能。

1. 环境准备

1.1 安装依赖

# 更新包列表
sudo apt update

# 安装基础依赖
sudo apt install -y adb scrcpy

# 安装额外工具(可选)
sudo apt install -y android-tools-adb android-tools-fastboot

1.2 验证安装

# 检查ADB版本
adb version

# 检查scrcpy版本
scrcpy --version

# 检查设备连接
adb devices

2. Android设备配置

2.1 启用开发者选项

  1. 进入设置关于手机
  2. 连续点击"版本号"7次,直到出现"您已处于开发者模式"
  3. 返回设置开发者选项

2.2 启用USB调试

在开发者选项中启用:

  • USB调试
  • USB调试(安全设置)
  • USB安装
  • USB调试(安全设置)

3. ADB设备连接与管理

3.1 USB连接方式

基础USB连接

# 通过USB连接设备
adb devices

# 预期输出示例:
# List of devices attached
# 1234567890ABCDEF    device
# 9876543210FEDCBA    device

USB连接故障排查

# 检查USB连接
lsusb

# 重启ADB服务
adb kill-server
adb start-server

# 检查设备权限
ls -la /dev/bus/usb/

# 添加udev规则(权限被拒绝时)
sudo nano /etc/udev/rules.d/51-android.rules
# 添加以下内容(替换VENDOR_ID)
SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", MODE="0666", GROUP="plugdev"

# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

3.2 WiFi连接方式

WiFi调试原理

WiFi调试通过TCP/IP协议实现ADB连接,无需物理USB连接。这种方式特别适合:

  • 设备距离计算机较远
  • 需要同时连接多个设备
  • 避免频繁插拔USB线
  • 在设备充电时进行调试

基础WiFi调试设置

方法一:通过USB初始化(推荐)

# 1. 通过USB连接设备
adb devices

# 2. 启用TCP/IP调试(端口5555)
adb tcpip 5555

# 3. 断开USB连接

# 4. 通过WiFi连接(需要知道设备IP)
adb connect 192.168.1.100:5555

# 5. 验证连接
adb devices

方法二:通过WiFi直接连接(Android 11+)

# 1. 在Android设备上启用"无线调试"
# 设置 → 开发者选项 → 无线调试

# 2. 点击"使用配对码配对设备"

# 3. 在Ubuntu上配对设备
adb pair 192.168.1.100:37017

# 4. 输入配对码

# 5. 连接设备
adb connect 192.168.1.100:5555

获取设备IP地址

方法一:通过Android设备查看

# 在Android设备上查看IP
# 设置 → WiFi → 点击已连接的网络 → 查看IP地址

方法二:通过ADB命令查看

# 通过USB连接时查看IP
adb shell ip route | grep wlan

# 或者
adb shell ifconfig wlan0 | grep "inet addr"

方法三:通过网络扫描

# 安装网络扫描工具
sudo apt install nmap

# 扫描局域网中的Android设备
nmap -sn 192.168.1.0/24

# 扫描特定端口
nmap -p 5555 192.168.1.0/24

3.3 多设备管理

查看连接的设备

# 列出所有连接的设备
adb devices

# 详细设备信息
adb devices -l

# 查看设备属性
adb shell getprop ro.product.model

多设备操作

# 指定设备执行命令
adb -s 1234567890ABCDEF shell ls /sdcard/

# 向指定设备推送文件
adb -s 1234567890ABCDEF push local_file.txt /sdcard/

# 从指定设备拉取文件
adb -s 1234567890ABCDEF pull /sdcard/remote_file.txt ./

# 安装APK到指定设备
adb -s 1234567890ABCDEF install app.apk

混合连接管理

# 同时管理USB和WiFi连接的设备
adb devices

# 预期输出示例:
# List of devices attached
# 1234567890ABCDEF    device          # USB设备
# 192.168.1.100:5555  device          # WiFi设备
# 192.168.1.101:5555  device          # WiFi设备

# 对USB设备操作
adb -s 1234567890ABCDEF shell ls /sdcard/

# 对WiFi设备操作
adb -s 192.168.1.100:5555 shell ls /sdcard/

3.5 连接故障排查

USB连接问题

# 检查USB连接
lsusb

# 重启ADB服务
adb kill-server
adb start-server

# 检查设备权限
ls -la /dev/bus/usb/

WiFi连接问题

问题1:无法发现设备

# 检查网络连通性
ping 192.168.1.100

# 检查端口是否开放
telnet 192.168.1.100 5555

# 检查防火墙设置
sudo ufw status
sudo ufw allow 5555

问题2:连接不稳定

# 检查网络质量
ping -c 10 192.168.1.100

# 调整ADB超时设置
export ADB_LOCAL_TRANSPORT_MAX_PORT=5585
export ADB_LOCAL_TRANSPORT_MIN_PORT=5585

# 重启ADB服务
adb kill-server
adb start-server

问题3:配对失败

# 清除配对信息
adb pair --clear

# 重新配对
adb pair 192.168.1.100:37017

# 检查配对码是否正确

4. scrcpy使用指南

4.1 基础使用

# 基本启动(自动选择第一个设备)
scrcpy

# 指定设备启动
scrcpy -s 1234567890ABCDEF

# 指定设备名称启动
scrcpy -s "Galaxy S21"

4.2 常用参数配置

# 设置窗口大小
scrcpy --max-size 1920

# 设置比特率(提高画质)
scrcpy --bit-rate 8M

# 设置帧率
scrcpy --max-fps 60

# 全屏启动
scrcpy --fullscreen

# 保持屏幕常亮
scrcpy --stay-awake

# 关闭屏幕(仅镜像)
scrcpy --turn-screen-off

4.3 高级配置

# 自定义配置启动
scrcpy \
    --max-size 1920 \
    --bit-rate 8M \
    --max-fps 60 \
    --stay-awake \
    --disable-screensaver \
    --window-title "Android调试" \
    --always-on-top

4.4 文件传输功能

通过ADB传输文件

# 推送文件到设备
adb push /path/to/local/file.txt /sdcard/Download/

# 从设备拉取文件
adb pull /sdcard/Download/file.txt /path/to/local/

# 批量传输
adb push /path/to/folder/ /sdcard/Download/

通过scrcpy拖拽传输

  1. 启用文件拖拽功能
scrcpy --push-target /sdcard/Download/
  1. 拖拽文件到scrcpy窗口,文件会自动传输到Android设备

4.5 剪贴板同步

启用剪贴板同步

# 启用剪贴板同步
scrcpy --clipboard-autosync

# 双向剪贴板同步
scrcpy --clipboard-autosync --forward-all-clipboard

剪贴板操作

  • Ubuntu → Android:在Ubuntu中复制,在Android应用中粘贴
  • Android → Ubuntu:在Android中复制,在Ubuntu应用中粘贴

5. 故障排查

5.1 常见问题

问题1:设备未识别

# 检查USB连接
lsusb

# 重启ADB服务
adb kill-server
adb start-server

# 检查设备权限
ls -la /dev/bus/usb/

问题2:scrcpy启动失败

# 检查设备连接
adb devices

# 检查scrcpy版本
scrcpy --version

# 使用详细模式启动
scrcpy --verbose

5.2 性能优化

# 降低画质提高性能
scrcpy --max-size 1280 --bit-rate 2M

# 关闭音频(如果不需要)
scrcpy --no-audio

# 使用硬件加速
scrcpy --encoder h264

参考文档

使用 Termux 在 Android 运行 Python 源码

1. 为什么是 Termux

  • 构建原生 Android App 成本高:需要完整的 SDK/NDK、Gradle、签名、打包与多 ABI 适配,调试周期长。
  • 直接验证业务逻辑:很多场景只需在设备上跑 Python 后端/脚本(算法、接口、数据处理),无须先做 APK 封装。
  • 环境接近真实设备:在手机本机 I/O、网络、性能与权限模型下验证代码,比纯模拟器/PC 更接近真实表现。
  • 快速迭代:通过 ADB/SSH 同步代码,立即运行与观察日志,缩短问题定位与修复时间。

注意事项

  • 环境差异:Termux 基于 Android/Linux 用户空间,和标准 Linux 发行版存在差异,某些系统调用/路径不可用。
  • Python 包兼容性:依赖原生扩展(C/C++/Fortran)的包在 Termux 上可能无法编译或运行(如依赖特定 glibc/系统接口)。
    • 优先选择纯 Python 包或提供 aarch64 预编译 wheels 的发行版。
    • 必要时安装 clang,rust,make,pkg-config 再尝试编译,但仍可能失败。
  • 官方不保证兼容:部分上游项目明确不支持 Termux/Android 平台,出现问题时官方可能不修复。
  • 版本固定:建议在 requirements.txt 固定依赖版本,避免因上游升级导致不可预期的构建/运行失败。

2. Termux 安装和配置

安装 Termux

方法一:通过应用商店

  1. 从 F-Droid 或 Google Play 安装 Termux
  2. 打开 Termux 应用

方法二:通过 ADB 安装 APK

# 下载 Termux APK 文件
# 从 https://f-droid.org/packages/com.termux/ 下载最新版本

# 通过 ADB 安装
adb install termux.apk

# 或者强制安装(覆盖现有版本)
adb install -r termux.apk

# 检查安装是否成功
adb shell pm list packages | grep termux

ADB 连接与 scrcpy 远程桌面

USB 连接(推荐)

# 在开发机上执行
# 1. 使用 USB 线连接设备
# 2. 在设备上启用 USB 调试
# 3. 检查连接
adb devices

# 如果显示设备,说明连接成功
# 运行scrcpy打开安卓桌面
scrcpy

无线 ADB 连接

# 在开发机上执行
# 1. 确保两个设备在同一网段下,通过 USB 连接并启用无线调试
adb tcpip 5555

adb connect 192.168.1.100:5555

# 4. 检查连接
adb devices

# 运行scrcpy打开安卓桌面
scrcpy

基础环境配置

1. 更新包管理器

# 在 Termux 中
# 更新包列表和系统
pkg update && pkg upgrade

# 清理缓存
pkg clean

2. 一键安装所有依赖

# 在 Termux 中
# 安装核心依赖(纯 Python 项目,无需编译工具)
pkg install -y python python-pip git curl wget openssh iproute2 net-tools htop procps rsync tree neofetch android-tools rust clang make pkg-config

3. 项目部署

克隆项目

# 在 Termux 中
git clone url-to-project
cd url-to-project

安装依赖

# 在 Termux 中
# 安装 Python 依赖
pip install -r requirements.txt

运行项目

# 在 Termux 中
# 后台运行
nohup python start_backend.py > drone.log 2>&1 &

# 检查运行状态
ps aux | grep python
curl http://localhost:8000/health

文件传输

# 在开发机上执行
# 通过 ADB 传输文件
adb push local_file.txt /data/data/com.termux/files/home/

# 从设备拉取文件
adb pull /data/data/com.termux/files/home/log.log ./

4. 使用 Termius 进行 SSH/SFTP 管理(推荐)

Termius 是一款跨平台的 SSH 客户端,适合管理 Termux 主机:

  • 可以为常用主机保存连接信息(主机、端口、用户名、密码/密钥)。
  • 支持命令片段(Snippets),可一键执行常用指令(如重启服务、查看日志)。
  • 内置 SFTP 文件管理,可直接浏览 ~ 与项目目录、上传/下载、查看与编辑文件。
  • 云同步(可选),多设备共享配置;也可本地仅存储,避免隐私外泄。

示例配置:

  1. 新建 Host:

    • Address: localhost(或手机局域网 IP)
    • Port: 8022(对应 adb forward tcp:8022 tcp:22
    • Username: u0_a...(Termux 默认交互用户,或留空用密码登录)
    • Password: 设置为你在 Termux 中的密码(如 termux123,建议修改)
  2. 新建 Snippet(命令片段):

    • 查看服务日志:tail -f ~/path-to-project/log.log
    • 重启服务:pkill -f "python start_backend.py" && nohup python ~/path-to-project/start_backend.py > ~/path-to-project/log.log 2>&1 &
  3. 使用 SFTP:

    • 直接进入 ~/path-to-project/,上传/下载 requirements.txtlog.log 等文件。
    • 可视化查看目录结构,便于排查路径与权限问题。

参考文档