-
Notifications
You must be signed in to change notification settings - Fork 128
Open
Labels
enhancementNew feature or requestNew feature or request
Description
必须说明使用场景和价值
我基于这个项目,利用scrcpy的mic重定向,将CapsWriter-Offline装到这个软件里面了,实现了用任意安卓平板用语音写小说,当做MacBook air m1来使用:
https://github.com/ChaserSu/CapsWriter-Offline-Android
关于mic重定向,我是这么做的:
一、环境准备
- 安卓设备:Android 11+(本案例为 Android 16)
二、编译安装 scrcpy(适配 arm64,含 Java 依赖)
scrcpy 服务端基于 Java 开发,编译时必须安装 JDK,否则会报错 “无法构建 scrcpy-server”,完整步骤如下:
稍晚一些时候,我会上传预编译或将这个组件集成到软件里
# 1. 安装编译依赖(含openjdk-17-jdk,scrcpy编译必需)
sudo apt update && sudo apt install -y \
git gcc make meson ninja-build \
libusb-1.0-0-dev ffmpeg \
libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev \
openjdk-17-jdk
# 安装 FFmpeg 全套开发包(包含 libavdevice 及其头文件)
sudo apt install -y libavdevice-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libsdl2-dev
# 2. 克隆scrcpy源码(指定3.3.4版本,避免兼容性问题)
git clone -b v3.3.4 https://github.com/Genymobile/scrcpy.git
cd scrcpy
# 3. 编译并安装(arm64架构自动适配)
meson setup build --buildtype release
ninja -C build
# 会有报错,接下来我教你处理,因为arm64在该版本的target没有相关的安卓编译sdk- 关于scrcpy编译,需要做以下修改
- 先下载预编译版本
wget -O server/scrcpy-server-v3.3.4 https://github.com/Genymobile/scrcpy/releases/download/v3.3.4/scrcpy-server-v3.3.4
- 随后需要修改脚本
rm -rf server/scripts/build-wrapper.sh
nano server/scripts/build-wrapper.sh
- 然后覆盖填入
#!/usr/bin/env bash
# Wrapper script to invoke gradle from meson
set -e
# Do not execute gradle when ninja is called as root (it would download the
# whole gradle world in /root/.gradle).
# This is typically useful for calling "sudo ninja install" after a "ninja
# install"
if [[ "$EUID" == 0 ]]
then
echo "(not invoking gradle, since we are root) - Using precompiled server" >&2
PROJECT_ROOT="$1"
OUTPUT="$2"
cp "$PROJECT_ROOT/scrcpy-server-v3.3.4" "$OUTPUT"
chmod +x "$OUTPUT"
exit 0 # root用户成功返回
fi
PROJECT_ROOT="$1"
OUTPUT="$2"
BUILDTYPE="$3"
# 注释掉Gradle相关代码
# GRADLE=${GRADLE:-$PROJECT_ROOT/../gradlew}
if [[ "$BUILDTYPE" == debug ]]
then
echo "=== Using precompiled scrcpy-server (debug mode, arm64 compatible) ==="
cp "$PROJECT_ROOT/scrcpy-server-v3.3.4" "$OUTPUT"
chmod +x "$OUTPUT"
else
echo "=== Using precompiled scrcpy-server (release mode, arm64 compatible) ==="
cp "$PROJECT_ROOT/scrcpy-server-v3.3.4" "$OUTPUT"
chmod +x "$OUTPUT"
fi
# 关键添加:明确返回成功状态码,让ninja继续执行后续编译
exit 0
- 随后安装即可:
# 继续编译
sudo chmod +x server/scripts/*.sh
ninja -C build
sudo ninja -C build install
# 验证安装成功
scrcpy --version # 输出3.3.4即正常
三、配置 arm64 版 ADB(解决架构不兼容问题)
- ADB 版本太旧!pair 命令是安卓 11 + 新增的(需 ADB 30.0.0+)
- 普通 Linux 的 ADB 为 x86_64 架构,需安装 arm64 专属版本:
# 1. 卸载旧版ADB(避免路径冲突)
# 卸载 apt 安装的旧版 ADB
sudo apt remove android-tools-adb -y
# 2. 下载官方最新版 platform-tools(包含 arm64 版 ADB)
wget https://github.com/AndroidIDEOfficial/platform-tools/releases/download/v34.0.4/platform-tools-34.0.4-aarch64.tar.xz -O ~/platform-tools.tar.xz
# 3. 解压到用户目录
tar -xvf platform-tools.tar.xz
# 4. 验证 ADB 版本(需显示 30.0.0+,支持 pair 命令)
~/platform-tools/adb --version
# 安装到系统bin
sudo cp ~/platform-tools/{adb,fastboot,etc1tool,dmtracedump,e2fsdroid,hprof-conv,sqlite3} /usr/local/bin/
四、无线调试配对与 ADB 连接(本地网络,无需 WiFi)
通过安卓 “无线调试” 功能实现子系统与宿主机的本地连接,避免 USB 依赖:
安卓设备操作:
- 开启「开发者选项」(设置→关于手机→连续点击版本号);
- 开启「无线调试」,点击「配对设备(使用配对码)」;
- 记录弹出的「配对地址(如localhost:41955)」和「6 位配对码」。
Linux 子系统操作:
adb kill-server && adb start-server
# 1. 配对设备(替换为实际地址和配对码)
adb pair localhost:41955 675984
# 2. 连接设备(默认端口5555,以设备显示为准)
adb connect localhost:41955
# 验证连接(显示device即正常)
adb devices五、音频转接配置(核心:虚拟设备 + 强制绑定)
通过 Pulseaudio 创建虚拟音频设备,将 scrcpy 转发的麦克风音频转为子系统可识别的输入源:
# 1. 清理旧模块(避免冲突,首次执行可忽略报错)
pactl unload-module module-remap-source 2>/dev/null
pactl unload-module module-null-sink 2>/dev/null
# 2. 创建虚拟sink(接收scrcpy的音频输出)
pactl load-module module-null-sink sink_name=scrcpy_sink # 输出模块ID(如18)
# 3. 创建虚拟source(作为子系统音频输入,命名为scrcpy_mic)
pactl load-module module-remap-source source_name=scrcpy_mic master=scrcpy_sink.monitor # 输出模块ID(如19)
# 4. 启动scrcpy并强制音频输出到虚拟设备(关键:PULSE_SINK绑定)
PULSE_SINK=scrcpy_sink scrcpy \
--audio-source=mic \
--no-video \
--audio-buffer=20 \
--audio-codec=aac \
--serial=localhost:41955能否将上述的mic重定向的方法,整合进这个软件吗?这样就不用单独编译scrcpy了
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request