在 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 启用开发者选项
- 进入设置 → 关于手机
- 连续点击"版本号"7次,直到出现"您已处于开发者模式"
- 返回设置 → 开发者选项
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拖拽传输
- 启用文件拖拽功能:
scrcpy --push-target /sdcard/Download/
- 拖拽文件到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
方法一:通过应用商店
- 从 F-Droid 或 Google Play 安装 Termux
- 打开 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 文件管理,可直接浏览
~与项目目录、上传/下载、查看与编辑文件。 - 云同步(可选),多设备共享配置;也可本地仅存储,避免隐私外泄。
示例配置:
新建 Host:
- Address:
localhost(或手机局域网 IP) - Port:
8022(对应adb forward tcp:8022 tcp:22) - Username:
u0_a...(Termux 默认交互用户,或留空用密码登录) - Password: 设置为你在 Termux 中的密码(如
termux123,建议修改)
- Address:
新建 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 &
- 查看服务日志:
使用 SFTP:
- 直接进入
~/path-to-project/,上传/下载requirements.txt,log.log等文件。 - 可视化查看目录结构,便于排查路径与权限问题。
- 直接进入