9.设备管理与自动化
在日常使用 scrcpy 的过程中,除了基本的投屏和控制功能,设备本身的行为管理往往会被忽视。实际上,scrcpy 提供了一系列精细的设备管理选项,能让整个使用体验更加自动化和流畅。这些功能特别适合长时间演示、自动化测试或者远程设备管理的场景。本章将深入探讨如何通过命令行参数和配置,实现对设备电源、屏幕状态以及应用启动的精确控制。
屏幕常亮与超时控制
保持唤醒状态
最实用的功能之一,莫过于让设备在连接期间保持唤醒。默认情况下,即使手机连着电脑,屏幕依然会按照系统设置自动熄灭。对于需要长时间观察设备状态的场景,比如监控日志、演示应用或者自动化测试,这会带来不小的麻烦。
scrcpy 提供了 --stay-awake 参数(简写 -w)来解决这个问题。这个参数的作用是防止设备在插入电源后自动休眠。需要特别注意,它只在设备通过 USB 连接并处于充电状态时生效。如果是纯无线连接(TCP/IP 模式),这个参数不会起作用,因为这是 Android 系统本身的行为限制。
scrcpy --stay-awake
# 或者使用短参数
scrcpy -w
当 scrcpy 关闭时,系统会自动恢复之前的唤醒状态设置,不用担心忘记改回来导致手机一直亮屏耗电。
这个参数背后的原理是修改了 Android 系统的 stay_on_while_plugged_in 全局设置。这个设置决定了设备在连接电源时是否保持唤醒。我们也可以手动通过 adb 命令来查看和修改这个值:
# 查看当前设置值
adb shell settings get global stay_on_while_plugged_in
# 设置为 7,表示在连接 AC 电源、USB 和无线充电器时都保持唤醒
adb shell settings put global stay_on_while_plugged_in 7
# 设置为 0 禁用此功能
adb shell settings put global stay_on_while_plugged_in 0
这里的数值是一个位掩码,7 表示同时启用三种充电模式下的常亮功能。虽然手动设置更灵活,但使用 scrcpy 的参数更方便,因为退出时会自动清理,避免留下全局性的系统改动。
屏幕超时时间调整
除了保持唤醒,scrcpy 还允许临时调整屏幕自动关闭的延迟时间。--screen-off-timeout 参数可以设置屏幕在无操作后多久自动熄灭,单位是秒。比如设置为 300 秒,意味着 5 分钟无操作后屏幕才会关闭。
scrcpy --screen-off-timeout=300
这个设置同样会在 scrcpy 退出时自动恢复原始值。Android 系统内部这个值是以毫秒为单位存储的,所以通过 adb 手动设置时需要注意单位转换:
# 查看当前超时时间(毫秒)
adb shell settings get system screen_off_timeout
# 设置为 30 秒(30000 毫秒)
adb shell settings put system screen_off_timeout 30000
在实际使用中,这个参数可以和 --stay-awake 配合使用。比如在进行自动化测试时,既希望设备不休眠,又想在测试脚本出错时让屏幕最终能自动关闭以节省电量。这时可以设置一个较长的超时时间,既保证了测试期间的稳定性,又提供了最后的保护机制。
屏幕开关与电源管理
启动时关闭屏幕
有时候我们希望投屏时设备本身的屏幕是关闭的,特别是在光线较暗的环境下,避免手机屏幕的反光干扰视线。scrcpy 提供了 --turn-screen-off 参数(简写 -S),可以在启动时直接关闭设备屏幕。
scrcpy --turn-screen-off
# 或者
scrcpy -S
屏幕关闭后,投屏依然正常工作,所有操作都可以通过电脑完成。如果需要重新打开屏幕,可以使用快捷键 MOD+Shift+o。这里的 MOD 键默认是左 Alt 键,可以在启动时通过 --shortcut-mod 参数修改。
一个有趣的细节是,当屏幕关闭状态下,如果通过 scrcpy 发送 POWER 键事件(右键点击或 MOD+p),系统会尝试在短暂延迟后再次关闭屏幕。这是 scrcpy 为了方便用户做的特殊处理,因为 Android 的 POWER 键行为总是倾向于点亮屏幕。物理电源键依然可以正常唤醒设备,这个处理只影响通过 scrcpy 发送的按键事件。
组合使用策略
--turn-screen-off 和 --stay-awake 可以组合使用,形成一个非常实用的场景:设备屏幕关闭以节省电量和避免干扰,但系统本身保持唤醒状态以确保后台任务正常运行。
scrcpy --turn-screen-off --stay-awake
# 短参数组合
scrcpy -Sw
这个组合在长时间运行的自动化测试中特别有用。屏幕关闭减少了 OLED 烧屏的风险和电量消耗,而保持唤醒确保了测试进程不会被系统挂起。
Android 15+ 的电源控制
从 Android 15 开始,系统提供了更直接的屏幕电源控制命令。虽然 scrcpy 本身没有直接封装这些新命令,但了解它们有助于在特殊场景下手动控制设备。
# 关闭主屏幕(0 表示主显示)
adb shell cmd display power-off 0
# 打开主屏幕
adb shell cmd display power-on 0
这些命令与 scrcpy 的 --turn-screen-off 不同,它们是系统级的电源控制,效果更彻底。不过在实际使用中,scrcpy 的参数已经足够应对大多数场景,而且跨版本兼容性更好。
触摸点显示与调试
物理触摸可视化
在演示或教学场景中,让观众看到触摸操作的位置非常重要。Android 开发者选项里有一个"显示触摸操作"的功能,scrcpy 通过 --show-touches 参数(简写 -t)可以直接在启动时启用这个功能。
scrcpy --show-touches
# 或者
scrcpy -t
需要特别注意的是,这个功能只显示物理触摸,也就是手指直接在设备屏幕上的触摸点。通过 scrcpy 进行的鼠标操作不会显示触摸点,这是 Android 系统的限制,不是 scrcpy 的问题。
触摸点显示为一个小圆点,跟随手指移动,松开后消失。这个视觉反馈对于演示复杂手势操作或者调试触摸相关的问题非常有帮助。
和 scrcpy 的其他设备管理参数一样,这个设置也会在程序退出时自动恢复原始状态。如果希望手动控制这个设置,可以通过以下 adb 命令:
# 查看当前状态
adb shell settings get system show_touches
# 启用触摸显示
adb shell settings put system show_touches 1
# 禁用触摸显示
adb shell settings put system show_touches 0
手动设置的好处是可以在 scrcpy 运行时动态调整,不需要重启投屏。比如在演示过程中突然需要展示触摸位置,可以临时通过 adb 命令开启,结束后再关闭。
应用启动与自动配置
应用列表获取
scrcpy 不仅能控制设备系统行为,还能直接管理应用。--list-apps 参数可以列出设备上安装的所有应用包名,这对于后续的应用启动功能非常有用。
scrcpy --list-apps
执行后会输出一个包名列表,每行一个。列表包含系统应用和用户安装的应用,可能会很长。建议配合 grep 使用来快速定位特定应用:
scrcpy --list-apps | grep firefox
这个命令的输出可以直接作为 --start-app 参数的输入,形成完整的工作流。
应用启动的多种方式
--start-app 是 scrcpy 设备管理功能中最强大的参数之一。它允许在投屏启动时自动打开指定应用,支持多种灵活的指定方式。
最推荐的方式是使用应用的包名(package name),这是 Android 系统中应用的唯一标识符:
scrcpy --start-app=org.mozilla.firefox
包名稳定可靠,不会因为语言环境或系统版本变化。获取包名的方法除了 --list-apps,还可以通过应用商店链接或者第三方应用信息工具查看。
对于不熟悉包名的用户,scrcpy 提供了按应用名称搜索的功能。在应用名前加上 ? 前缀,scrcpy 会在设备上搜索匹配的应用:
scrcpy --start-app=?firefox
这种方式很方便,但需要注意两点:一是搜索可能需要几秒钟时间,特别是设备上应用较多时;二是如果多个应用名称匹配,可能会启动非预期的应用。因此,生产环境或脚本中还是推荐使用包名。
高级启动选项
有时候我们希望应用在启动前被强制停止,确保从一个干净的状态开始。这可以通过在包名前加上 + 前缀实现:
scrcpy --start-app=+org.mozilla.firefox
这个选项会先执行 am force-stop 命令终止应用进程,然后再启动。对于测试场景特别有用,可以避免应用残留状态影响测试结果。
+ 和 ? 前缀可以组合使用,顺序必须是 +?:
scrcpy --start-app=+?firefox
这表示先搜索名称包含 "firefox" 的应用,找到后强制停止再启动。虽然方便,但建议只在交互式使用,脚本中还是明确指定包名更可靠。
虚拟显示中的应用启动
--start-app 参数与虚拟显示功能结合使用时,能发挥更大作用。虚拟显示是 Android 10+ 提供的功能,允许应用在一个独立的显示空间中运行,不影响主屏幕。
scrcpy --new-display=1920x1080 --start-app=org.videolan.vlc
这个命令会创建一个 1920x1080 的虚拟显示,并在其中启动 VLC 播放器。应用运行在隔离环境中,关闭投屏后虚拟显示会自动销毁,不会留下任何痕迹。这对于需要同时运行多个应用实例或者测试应用在不同分辨率下的表现非常有用。
虚拟显示的详细配置和管理会在第 12 章专门讲解,这里只需要了解 --start-app 可以与之配合即可。
关闭时自动断电策略
退出时关闭屏幕
在自动化脚本或者远程管理场景中,经常需要在 scrcpy 结束时自动关闭设备屏幕以节省电量。--power-off-on-close 参数正好满足这个需求。
scrcpy --power-off-on-close
当 scrcpy 正常退出时(无论是通过关闭窗口还是发送退出信号),设备屏幕会自动关闭。这个行为与 --turn-screen-off 不同,后者只在启动时生效,而前者在退出时触发。
这个参数特别适合无人值守的自动化任务。比如一个定时运行的测试脚本,启动 scrcpy 执行测试,完成后自动退出,设备屏幕关闭进入低功耗状态,整个流程无需人工干预。
启动时的电源控制
默认情况下,scrcpy 启动时会尝试唤醒设备(如果屏幕是关闭的)。在某些场景下,这可能不是期望的行为。比如设备正在执行后台任务,屏幕关闭是有意为之,不希望被投屏操作打扰。
--no-power-on 参数可以禁用这个自动唤醒行为:
scrcpy --no-power-on
使用这个参数后,如果设备屏幕是关闭的,投屏会以黑屏状态开始,直到手动发送电源键事件或者使用其他方式唤醒设备。这个选项在需要保持设备"静默"状态的场景中很有用,比如监控后台服务运行状态而不干扰前台界面。
电源管理策略组合
这些电源管理参数可以组合出多种使用模式。比如一个典型的自动化测试场景:
scrcpy --no-power-on --start-app=+com.example.test --power-off-on-close
这个命令组合的含义是:启动时不唤醒设备(保持当前状态),强制停止并启动测试应用,scrcpy 退出时关闭屏幕。整个流程对设备状态的干扰最小,适合集成到 CI/CD 流水线中。
另一个演示场景的组合:
scrcpy --stay-awake --show-touches --start-app=org.mozilla.firefox
这个组合确保设备在演示期间不会休眠,触摸操作清晰可见,并且直接打开浏览器准备演示内容。退出后所有设置自动恢复,不留痕迹。
总结
设备管理与自动化是 scrcpy 进阶使用中不可或缺的一环。通过合理组合 --stay-awake、--turn-screen-off、--show-touches、--start-app 和 --power-off-on-close 等参数,可以构建出高度自动化的工作流程,无论是日常开发、演示教学还是自动化测试,都能大幅提升效率。
这些参数的设计哲学体现了 scrcpy 一贯的特点:临时性、可恢复性和灵活性。所有设备状态的修改都会在退出时自动清理,不会对系统造成永久性改变,这让实验和脚本编写更加安全。
掌握了设备管理后,下一步自然要考虑如何在更复杂的网络环境中使用这些功能。下一章将深入探讨无线连接与远程访问,包括 TCP/IP 连接的深度配置、SSH 隧道穿透内网以及远程 ADB 服务器的部署策略,让设备管理的能力突破物理距离的限制。