ScrcpyForAndroid
Introduction: Scrcpy android client
Tags:
scrcpy android client
从通过 ADB Wireless 连接的 Android 设备镜像视频与音频,并允许使用触摸屏与键盘鼠标进行控制
不需要 root 权限,也无需在设备上安装应用程序
[!NOTE] 本项目基于 scrcpy,但并非其官方版本,与原作者及维护团队不存在任何隶属或合作关系
下载
> releases
截图
Features
- 控制时可拉起本机输入法,且支持输入中文
- 剪贴板同步
- 低延迟音频链路 (默认未启用)
- 受控设备播放
USAGE_MEDIA流时 (namidaco/namida) ,两设备的音频延迟只差半拍 (没有具体测量能力) - 受控设备播放
USAGE_GAME流时 (明日方舟 Bilibili 服) ,仍存在 100~200ms 的有感延迟
- 受控设备播放
- 带生物认证的锁屏密码自动填充 (入口位于虚拟按钮中)
- 多配置切换,设备绑定配置,连接后直接进入全屏
- 可替换 scrcpy-server
- 利用 mDNS 服务实现自动连接启用无线调试的设备、自动发现等待配对设备的 IP 与端口
- 自动横竖屏切换(算吗
- 横屏布局
- 仅屏幕比例小于 16:9 的设备
- 全屏下映射返回键到远程
- 画中画
- 双向文件传输
- 流式 adb 终端
- 内置录制
已知问题
- 刚开始串流时有概率丢失关键帧导致花屏,等待一段时间后重新接收关键帧即可
- 因为没有设备用于 (也懒得) 测试,应用可能无法正常运行在安卓版本较低的设备上,特别是画中画功能,非常取决于国产 ROM 的实现
- 关闭画中画后不会停止 scrcpy 串流,仍然需要回到应用中点击停止
- 跨设备输入中文
- 实现方式为利用剪贴板同步,会导致受控机剪贴板历史被填充输入历史
- 不知道为什么有时候会上屏失败
- 虚拟按键的截图实现方式为发送
keycode 120,安卓官方(keycodes.h#349)的定义为System Request / Print Screen key.,不同的厂商有不同的实现,在某些类原生(AxionOS) 上的行为是软重启
TODO
> TODO.md
NOT-TODO
- 低版本安卓适配
- 项目的
minSdk为 26 / Android 8,98.4% 的设备都能成功安装上,只是出问题不管出问题了 (特别是崩溃闪退) 带 logcat 来尽量修
- 项目的
- 更多的文件操作,包括不限于
删除,重命名等- 可以长按复制路径去终端用
rm,mv
- 可以长按复制路径去终端用
- 录制的进一步优化
MediaCodec限制太大,再继续做要引入ffmpeg,ofc no way
- ADB 安装应用 / adb install
- 需要大改 JNI 的实现因此不做
- 可以推送文件之后使用终端安装或手动控制安装
- 有线控制 / fastboot
- 左转甲壳虫
Change Log
建议搭配模块
- 密码锁屏无法捕获: LSPosed/DisableFlagSecure
- 开机自动启用 adb: gist/906291
FAQ
控制不了
切到后台后 ADB 断连
- 将国产 ROM 中的
省电策略调整至无限制 - 将安卓原生设置中的
允许后台使用启用并设置为无限制(应用设置页中有入口)
- 将国产 ROM 中的
虚拟屏不显示输入法 / 输入法显示在主屏幕
- 将
--display-ime-policy设置为local - 自行在悬浮球中拉起本机输入法
- 将
码率只能拉到 40Mbps 嫌低
- 每个 Slider 选项的标题都可以点开自己输入值
录制/下载的文件在哪
- /sdcard/Movies/Scrcpy/
- /sdcard/Download/Scrcpy/
横屏模式对左撇子不太友好
- 右上角有按钮可以对调方向
MIUI 虚拟屏没有桌面 / 虚拟屏白屏
- 装个第三方桌面
构建
- JDK 17+
- Android SDK (
compileSdk 37/buildTools 37.0.0) - Android NDK
29.0.14206865
git clone --recursive https://github.com/Miuzarte/ScrcpyForAndroid.git
cd ScrcpyForAndroid
./gradlew assembleDebug
已克隆但没有拉取子模块:
git submodule update --init --recursive
specific abi:
./gradlew assembleRelease -PabiList=arm64-v8a
Credits
- Genymobile/scrcpy (包括图标)
- JNI ADB 实现: rikkaapps/shizuku, vvb2060/ndk.boringssl, lsposed/libcxx
- 界面组件: YuKongA/miuix
- 界面设计参考: tiann/KernelSU/manager, miuix/example
- 画中画实现参考: ClassicOldSong/moonlight-android
- 原生应用设置页跳转: YifePlayte/WOMMO
- 终端实现: reapercanuk39/termux-kotlin-app (仅 Apache 2.0 部分)
