凡试皆于八载之MacBook Air行之。
独为开发者,运七Mac应用,无他赞助之见。
HiyokoKit含安卓遥控,以scrcpy为之。自Tauri应用发令管理scrcpy,有特之难。
此吾所为之法也。
何谓scrcpy
scrcpy者,开源之器也,能映 Android 之屏于 ADB。此乃 Mac 上 Android 屏映之佳选,速且低迟,无需于器置应用。
自 Rust 启 scrcpy
rustuse std::process::{Command, Child};
use std::sync::Mutex;
pub struct ScrcpyProcess {
child: Option,
}
impl ScrcpyProcess {
公之始
&mut己,
装置序文&字,
极量:
位率&字,
) -> 之果<(), 事之过> {
令子器为Command::new("scrcpy")
.args([
"--serial", device_serial,
"--max-size", &max_size.to_string(),
"--视频比特率", 比特率,
"--window-title", "Android Mirror"
--无音
])
生之()
.map_err(|e| AppError::Scrcpy(e.to_string()))?;
self.child = Some(child);
Ok(())
}
pub fn stop(&mut self) {
if let Some(mut child) = self.child.take() {
child.kill().ok();
}
}
pub fn is_running(&mut self) -> bool {
if let Some(child) = &mut self.child {
child.try_wait().map(|s| s.is_none()).unwrap_or(false)
} else {
false
}
}
}
糅合scrcpy
scrcpy需于用户之机具或糅合于尔之应用。吾糅合之於应用资源,为通用二进制:
json{
"糅合": {
"资源": [
"bin/scrcpy",
"bin/adb"
]
}
}
运行时,取资源路径:
rustlet scrcpy_path = app_handle
路径也
取资源之所在
解包之
联结"bin/scrcpy"
察知scrcpy之退出
当用户关闭镜像窗口时,scrcpy程序即退出。需侦测此情形以更新界面。
铁锈之语// 背景中候
tokio::生发(async move {
循环 {
tokio::光阴::眠候(Duration::from_secs(1)).await;
let running = {
let mut proc = scrcpy_state.lock().unwrap();
proc.is_running()
};
if !running {
app_handle.emit("scrcpy-stopped", ()).ok();
break;
}
}
});
众器相容
scrcpy之--serial标识,用以择取众设备中之一。自adb devices取其序列,而显式传递之:
rustasync fn取设备序列() ->结果{
let output = Command::new("adb")
.args(["devices"])
.output()
.await?;
let stdout = String::from_utf8_lossy(&output.stdout);
stdout.lines()
.skip(1)
.find(|l| l.contains("device"))
.and_then(|l| l.split_whitespace().next())
.map(|s| s.to_string())
.ok_or(AppError::Device("No device found".into()))
}
若此有益,一❤️之助胜于所思——谢君!
Hiyoko PDF Vault → https://hiyokomtp.lemonsqueezy.com/checkout
X → @hiyoyok












