crossbundle_tools/commands/android/common/
attach_logger.rs

1use crate::{error::*, types::AndroidSdk};
2use std::process::Command;
3
4/// Returns `adb logcat` command
5fn logcat_cmd(sdk: &AndroidSdk) -> Result<Command> {
6    let mut adb = sdk.platform_tool(bin!("adb"))?;
7    adb.arg("logcat");
8    Ok(adb)
9}
10
11/// Attach logger to device with filter that passes only Rust Stdout or Stderr.
12/// Runs`adb logcat RustStdoutStderr:D '*:S'` command
13pub fn attach_logger_only_rust(sdk: &AndroidSdk) -> Result<()> {
14    let mut adb = logcat_cmd(sdk)?;
15    adb.arg("RustStdoutStderr:D")
16        .arg("SAPP:D")
17        .arg("Crossbow:D")
18        .arg("CrossbowPlugin:D")
19        .arg("*:S");
20    adb.spawn()?.wait()?;
21    Ok(())
22}
23
24/// Attach logger to device with filter that filters only App Stdout or Stderr.
25/// Runs`adb logcat --pid=`adb shell pidof -s com.crossbow.game`` command
26pub fn attach_logger_only_app(sdk: &AndroidSdk) -> Result<()> {
27    let mut adb_shell = sdk.platform_tool(bin!("adb"))?;
28    adb_shell.args(["shell", "pidof", "-s", "com.crossbow.game"]);
29    let res = adb_shell.output()?.stdout;
30    let pid = String::from_utf8_lossy(&res).to_string();
31
32    let mut adb = logcat_cmd(sdk)?;
33    adb.arg("--pid").arg(pid.trim());
34    adb.spawn()?.wait()?;
35    Ok(())
36}
37
38// #[cfg(test)]
39// mod tests {
40//     use super::*;
41
42//     #[test]
43//     fn test_attach_logger_only_app() -> Result<()> {
44//         let sdk = AndroidSdk::from_env()?;
45//         attach_logger_only_app(&sdk)?;
46//         Ok(())
47//     }
48// }