本页面记录了 scrcpy 中特定设备的兼容性问题以及为解决这些问题而实现的解决方法。Scrcpy 旨在兼容各种 Android 设备和版本,但不同设备制造商定制 Android 的方式可能导致兼容性问题。
有关排查常见连接问题的更多信息,请参阅 常见问题。
Scrcpy 在与不同的 Android 设备配合使用时面临多项兼容性挑战
代码库包含多种解决方法来处理这些差异,并在不同设备上提供一致的功能。
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java server/src/main/java/com/genymobile/scrcpy/FakeContext.java
Scrcpy 实现了版本检查和特定的代码路径来处理 Android 版本之间的差异。 AndroidVersions 类定义了需要特殊处理的 API 级别的常量。
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java166-313
主要的 Android 版本兼容性考虑因素
| Android 版本 | API 级别 | 兼容性考虑因素 |
|---|---|---|
| Android 11+ | 30+ | AudioRecord 创建的更改,需要解决方法 |
| Android 12+ | 31+ | 需要为三星设备设置 ConfigurationController |
| 新的 AttributionSource 要求 | ||
| Android 14+ | 34+ | AudioRecord 原生设置更改(添加了 halInputFlags 参数) |
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java237-283
不同的设备制造商会以影响 scrcpy 功能的方式修改 Android。代码库包含针对多个 OEM 的特定解决方法。
| 制造商/品牌 | 问题 | 变通方法 |
|---|---|---|
| 三星 (Samsung) | DisplayManagerGlobal 在 Android 12+ 上需要 ConfigurationController | 在上下文初始化之前填充 ConfigurationController |
| Vivo | 修改了 AudioRecord 构造函数,需要真实的应用程序上下文 | 使用反射创建 AudioRecord,以避免触发修改后的代码 |
| ONYX | 应用信息填充会破坏视频镜像 | 在 ONYX 设备上跳过填充应用信息 |
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java60-77
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java59-77
Scrcpy 创建一个虚假的应用程序上下文,以规避 Android API 中的限制和要求。这在 FakeContext 类中实现。
来源: server/src/main/java/com/genymobile/scrcpy/FakeContext.java14-94
虚假上下文
来源: server/src/main/java/com/genymobile/scrcpy/FakeContext.java57-59 server/src/main/java/com/genymobile/scrcpy/Workarounds.java155-164
音频捕获尤其受到特定设备修改的影响,尤其是在 Vivo 等制造商的 ROM 上。
对于 Android 11 及以上版本,scrcpy 使用反射来创建 AudioRecord 实例,以绕过制造商的修改
之所以需要这种方法,是因为一些设备制造商修改了标准的 AudioRecord 构造函数,要求提供真实应用程序环境的上下文。
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java166-313
输入处理也可能受到特定设备限制的影响。
| 问题 | 受影响的设备 | 解决方案 |
|---|---|---|
| 鼠标和键盘无法工作 | 部分设备 | 在开发者选项中启用“USB 调试(安全设置)” |
| 特殊字符无法工作 | 所有设备(默认注入方法的限制) | 使用物理键盘模拟模式 |
来源: FAQ.md153-178
视频编码兼容性取决于设备支持的编解码器和编码器实现。
如果遇到与 MediaCodec 相关的异常,这可能表示与默认编码器不兼容。Scrcpy 允许通过命令行选项更改编码器。
来源: FAQ.md215-226
当遇到设备兼容性问题时
对于与设备的连接问题,请参阅 常见问题 页面。
Workarounds.java 文件是处理设备兼容性问题的中心位置。通常的模式包括:
来源: server/src/main/java/com/genymobile/scrcpy/Workarounds.java