news 2026/5/4 5:44:44

告别臃肿GUI!用Python脚本+PyInstaller打造你的专属scrcpy启动器(含文件传输功能)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别臃肿GUI!用Python脚本+PyInstaller打造你的专属scrcpy启动器(含文件传输功能)

用Python脚本+PyInstaller打造轻量级scrcpy启动器(含文件传输)

在Android开发与调试过程中,scrcpy无疑是一款神器——它能够通过USB或Wi-Fi将手机屏幕投射到电脑上,并支持低延迟的鼠标键盘操作。但原生的scrcpy命令行工具缺乏一些实用功能,比如文件传输,而且每次启动都需要输入复杂的参数。市面上虽然有不少GUI封装工具,但往往体积臃肿,功能冗余。

本文将带你用Python脚本封装scrcpy的核心功能,并通过PyInstaller打包成独立的可执行文件。最终产物体积不到7MB,却集成了投屏、录屏、文件传输等实用功能,完全可以替代那些50MB+的GUI工具。

1. 为什么需要自定义scrcpy启动器

scrcpy本身已经非常优秀,但在日常使用中仍有一些痛点:

  • 缺乏文件传输功能:虽然adb本身支持文件传输,但每次都需要手动输入命令
  • 启动参数复杂:息屏模式、录屏模式等需要记忆不同的参数组合
  • 依赖命令行:非技术用户可能对命令行感到畏惧
  • GUI工具臃肿:第三方GUI封装往往体积庞大,且功能不一定符合个人需求

我们的Python脚本方案具有以下优势:

特性原生scrcpy第三方GUI我们的方案
文件传输❌ 不支持✅ 支持✅ 支持
体积~15MB~50MB~7MB
启动便捷性需要命令行一键启动一键启动
可定制性中等
依赖项需要adb环境自带adb自带adb

2. 核心功能设计

我们的启动器将实现以下核心功能:

  1. 基础投屏模式:普通显示+触控操作
  2. 息屏模式:手机屏幕关闭但仍可操作
  3. 录屏功能:自动保存为带时间戳的mp4文件
  4. 文件传输:通过拖放操作将文件传输到手机

2.1 项目结构准备

在开始编码前,需要准备好以下目录结构:

scrcpy_launcher/ ├── main.py # 主脚本文件 ├── adb.exe # adb工具 ├── scrcpy.exe # scrcpy主程序 └── file/ # 录屏保存目录

提示:确保scrcpy和adb的可执行文件与脚本放在同一目录下,这样可以避免路径问题。

3. Python脚本实现

下面是完整的Python实现代码,我们分段解析关键部分:

import os from datetime import datetime import subprocess def send_command(cmd): """执行adb/scrcpy命令""" subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) def transfer_file(): """处理文件传输""" while True: filepath = input("拖入要传输的文件:") if not filepath: break filename = os.path.basename(filepath) cmd = f".\\adb.exe push \"{filepath}\" /sdcard/Download/scrcpy/{filename}" os.system(cmd)

这段代码定义了两个核心函数:

  • send_command():用于执行scrcpy命令
  • transfer_file():处理文件传输逻辑,支持拖放操作

3.1 模式选择与执行

def normal_mode(): print("普通投屏模式") send_command("scrcpy") transfer_file() def screen_off_mode(): print("息屏投屏模式") send_command("scrcpy -S") transfer_file() def record_mode(): print("录屏模式") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") send_command(f"scrcpy -r file/{timestamp}.mp4") transfer_file() def record_screen_off_mode(): print("息屏录屏模式") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") send_command(f"scrcpy -S -r file/{timestamp}.mp4") transfer_file()

每种模式都对应不同的scrcpy参数组合:

  • 普通模式:scrcpy
  • 息屏模式:scrcpy -S
  • 录屏模式:scrcpy -r 文件名
  • 息屏录屏:组合使用-S-r参数

3.2 用户交互与主逻辑

if __name__ == "__main__": print("scrcpy启动器 v1.0") print("请选择模式:") print("1. 普通模式") print("2. 息屏模式") print("3. 录屏模式") print("4. 息屏录屏模式") choice = input("输入数字选择(默认2): ").strip() if choice == "1": normal_mode() elif choice == "3": record_mode() elif choice == "4": record_screen_off_mode() else: # 默认选择息屏模式 screen_off_mode()

4. 使用PyInstaller打包

将Python脚本打包成exe可以方便分享和使用,以下是详细步骤:

4.1 安装PyInstaller

pip install pyinstaller

4.2 打包配置

创建打包配置文件build.spec

# build.spec block_cipher = None a = Analysis(['main.py'], pathex=['.'], binaries=[], datas=[('adb.exe', '.'), ('scrcpy.exe', '.')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name='scrcpy_launcher', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='scrcpy_launcher')

关键配置说明:

  • datas:将adb.exe和scrcpy.exe包含在最终打包文件中
  • upx=True:使用UPX压缩可执行文件,减小体积
  • console=True:保留控制台窗口,方便调试

4.3 执行打包

pyinstaller --onefile --clean build.spec

打包完成后,你会在dist目录下得到scrcpy_launcher.exe文件,体积通常在6-8MB之间。

5. 高级功能扩展

基础功能已经足够日常使用,但我们可以进一步扩展:

5.1 添加更多adb功能

def adb_shell(): """进入adb shell""" os.system(".\\adb.exe shell") def screenshot(): """截图并保存到电脑""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") os.system(f".\\adb.exe exec-out screencap -p > screenshot_{timestamp}.png") print(f"截图已保存为 screenshot_{timestamp}.png")

5.2 支持无线连接

def wireless_connect(): """切换到无线连接模式""" ip = input("输入手机IP地址: ") port = input("输入端口(默认5555): ") or "5555" # 先通过USB连接执行adb tcpip os.system(f".\\adb.exe tcpip {port}") # 断开USB连接 os.system(f".\\adb.exe connect {ip}:{port}") print(f"已连接到 {ip}:{port},现在可以断开USB线")

5.3 配置文件支持

添加config.ini支持自定义参数:

[default] resolution = 1280 bitrate = 8M max_fps = 60

然后在Python代码中读取配置:

import configparser config = configparser.ConfigParser() config.read('config.ini') resolution = config.get('default', 'resolution', fallback='1280') bitrate = config.get('default', 'bitrate', fallback='8M') max_fps = config.get('default', 'max_fps', fallback='60')

6. 实际使用技巧

经过几个月的实际使用,我总结出一些实用技巧:

  1. 文件传输优化:在手机Download目录创建scrcpy文件夹,所有传输文件都放在这里,方便管理
  2. 录屏管理:定期清理file目录中的录屏文件,避免占用过多空间
  3. 无线连接:在家使用时可以设置为无线模式,摆脱线缆束缚
  4. 快捷键组合:scrcpy本身支持很多快捷键,如:
    • Ctrl+o:返回
    • Ctrl+h:主页
    • Ctrl+s:切换息屏模式

遇到无法触控的问题时,可以尝试以下adb命令修复:

adb shell pm grant com.android.shell android.permission.WRITE_SECURE_SETTINGS

这个轻量级启动器已经成为了我日常开发的必备工具,特别是它的文件传输功能大大提升了工作效率。相比那些庞大的GUI工具,这个6MB的小程序反而更能满足我的实际需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 5:41:25

SONOFF POW Ring智能电表开关评测与应用指南

1. SONOFF POW Ring智能电表开关深度评测作为一名长期关注智能家居设备的工程师,我最近拿到了ITEAD公司最新推出的SONOFF POW Ring智能电表开关。这款采用CT钳形电流互感器技术的设备,相比传统电表有着革命性的改进。它最大的特点是不需要直接接触带电导…

作者头像 李华
网站建设 2026/5/4 5:27:51

Python 爬虫反爬突破:JS 变量实时监控与关键参数捕获

前言 在现代 Web 前端工程化与站点风控体系持续升级的背景下,纯静态接口明文传输数据的模式已逐步淘汰,绝大多数中大型互联网平台、电商系统、资讯门户、金融类站点均采用 JavaScript 动态渲染、前端加密算法、运行时变量生成、动态参数签名等技术构建请…

作者头像 李华
网站建设 2026/5/4 5:23:26

从激光打标到智造升级:泉州鞋服如何靠一台设备逆袭全球

在智能制造席卷制造业的今天,一项看似小众的技术 ——激光打标,正悄悄撑起中国鞋服产业的品质与效率天花板。尤其在福建泉州、晋江这片 “中国鞋都” 腹地,激光设备与千亿鞋服集群深度绑定,走出了一条技术国产化、产业高端化的共赢…

作者头像 李华
网站建设 2026/5/4 5:15:47

【RT-DETR涨点改进】TMM 2026顶刊 |独家创新首发、特征融合改进篇| 引入CGMM跨模态全局建模模块,通过特征在空间与通道层面实现深度融合,助力小目标检测,多模态融合目标检测有效涨点

一、本文介绍 🔥本文给大家介绍使用 CGMM跨模态全局建模模块 改进RT-DETR网络模型,通过跨模态全局建模机制对不同来源的特征进行更充分的对齐与交互,使模型能够在特征融合阶段同时建模空间维度和通道维度的全局上下文信息,从而缓解不同模态或不同层级特征之间的不一致问题…

作者头像 李华