parallel_operations/
parallel_operations.rs

1use adb_kit::{ADB, prelude::*};
2
3fn main() -> ADBResult<()> {
4    let adb = ADB::new(None);
5
6    // 列出设备
7    let devices = adb.list_devices()?;
8    println!("发现 {} 个设备", devices.len());
9
10    if devices.len() < 2 {
11        println!("此示例需要至少 2 个设备");
12        return Ok(());
13    }
14
15    // 获取设备 ID 列表
16    let device_ids: Vec<&str> = devices.iter().map(|d| d.id.as_str()).collect();
17
18    // 并行执行 shell 命令
19    println!("并行执行 shell 命令...");
20    let shell_results = adb.parallel_shell(&device_ids, "getprop ro.product.model");
21
22    for (id, result) in &shell_results {
23        match result {
24            Ok(output) => println!("设备 {}: 型号 = {}", id, output.trim()),
25            Err(e) => println!("设备 {}: 错误 = {}", id, e),
26        }
27    }
28
29    // 检查多个设备是否在线
30    println!("检查设备在线状态...");
31    let online_devices = adb.filter_online_devices(&device_ids)?;
32    println!("在线设备: {}", online_devices.join(", "));
33
34    // 在所有在线设备上获取电池信息
35    println!("获取所有设备的电池信息...");
36    let battery_results = adb.on_all_online_devices(|device_id| {
37        adb.shell(device_id, "dumpsys battery")
38    })?;
39
40    for (id, result) in battery_results {
41        match result {
42            Ok(_) => println!("设备 {}: 已获取电池信息", id),
43            Err(e) => println!("设备 {}: 获取电池信息失败 = {}", id, e),
44        }
45    }
46
47    Ok(())
48}